diff --git a/RockOS/.git-backup/COMMIT_EDITMSG b/RockOS/.git-backup/COMMIT_EDITMSG new file mode 100644 index 0000000..385809f --- /dev/null +++ b/RockOS/.git-backup/COMMIT_EDITMSG @@ -0,0 +1 @@ +more vga stuff diff --git a/RockOS/.git-backup/FETCH_HEAD b/RockOS/.git-backup/FETCH_HEAD new file mode 100644 index 0000000..965dca4 --- /dev/null +++ b/RockOS/.git-backup/FETCH_HEAD @@ -0,0 +1 @@ +6a79a20cf6d7c4597050a6119a4b373ec09f9645 branch 'main' of 74.208.227.0:slinky55/RockOS diff --git a/RockOS/.git-backup/HEAD b/RockOS/.git-backup/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/RockOS/.git-backup/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/RockOS/.git-backup/ORIG_HEAD b/RockOS/.git-backup/ORIG_HEAD new file mode 100644 index 0000000..9f060c3 --- /dev/null +++ b/RockOS/.git-backup/ORIG_HEAD @@ -0,0 +1 @@ +454de8feed8e1ff633dd40a31317d4500f4b1221 diff --git a/RockOS/.git-backup/config b/RockOS/.git-backup/config new file mode 100644 index 0000000..c47af5a --- /dev/null +++ b/RockOS/.git-backup/config @@ -0,0 +1,12 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = git@74.208.227.0:slinky55/RockOS.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "main"] + remote = origin + merge = refs/heads/main + vscode-merge-base = origin/main diff --git a/RockOS/.git-backup/description b/RockOS/.git-backup/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/RockOS/.git-backup/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/RockOS/.git-backup/hooks/applypatch-msg.sample b/RockOS/.git-backup/hooks/applypatch-msg.sample new file mode 100755 index 0000000..a5d7b84 --- /dev/null +++ b/RockOS/.git-backup/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/RockOS/.git-backup/hooks/commit-msg.sample b/RockOS/.git-backup/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/RockOS/.git-backup/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/RockOS/.git-backup/hooks/fsmonitor-watchman.sample b/RockOS/.git-backup/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..23e856f --- /dev/null +++ b/RockOS/.git-backup/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/RockOS/.git-backup/hooks/post-update.sample b/RockOS/.git-backup/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/RockOS/.git-backup/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/RockOS/.git-backup/hooks/pre-applypatch.sample b/RockOS/.git-backup/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/RockOS/.git-backup/hooks/pre-commit.sample b/RockOS/.git-backup/hooks/pre-commit.sample new file mode 100755 index 0000000..e144712 --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/RockOS/.git-backup/hooks/pre-merge-commit.sample b/RockOS/.git-backup/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/RockOS/.git-backup/hooks/pre-push.sample b/RockOS/.git-backup/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/RockOS/.git-backup/hooks/pre-rebase.sample b/RockOS/.git-backup/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/RockOS/.git-backup/hooks/pre-receive.sample b/RockOS/.git-backup/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/RockOS/.git-backup/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/RockOS/.git-backup/hooks/prepare-commit-msg.sample b/RockOS/.git-backup/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/RockOS/.git-backup/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/RockOS/.git-backup/hooks/push-to-checkout.sample b/RockOS/.git-backup/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/RockOS/.git-backup/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/RockOS/.git-backup/hooks/update.sample b/RockOS/.git-backup/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/RockOS/.git-backup/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/RockOS/.git-backup/index b/RockOS/.git-backup/index new file mode 100644 index 0000000..d461b8f Binary files /dev/null and b/RockOS/.git-backup/index differ diff --git a/RockOS/.git-backup/info/exclude b/RockOS/.git-backup/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/RockOS/.git-backup/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/RockOS/.git-backup/logs/HEAD b/RockOS/.git-backup/logs/HEAD new file mode 100644 index 0000000..4fc1158 Binary files /dev/null and b/RockOS/.git-backup/logs/HEAD differ diff --git a/RockOS/.git-backup/logs/refs/heads/main b/RockOS/.git-backup/logs/refs/heads/main new file mode 100644 index 0000000..041e709 Binary files /dev/null and b/RockOS/.git-backup/logs/refs/heads/main differ diff --git a/RockOS/.git-backup/logs/refs/remotes/origin/HEAD b/RockOS/.git-backup/logs/refs/remotes/origin/HEAD new file mode 100644 index 0000000..8734eec --- /dev/null +++ b/RockOS/.git-backup/logs/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 4e8de774ef76caed41dffa19de0e90f1ec356534 slinky 1781417108 -0500 clone: from 74.208.227.0:slinky55/RockOS.git diff --git a/RockOS/.git-backup/logs/refs/remotes/origin/main b/RockOS/.git-backup/logs/refs/remotes/origin/main new file mode 100644 index 0000000..ffe316a --- /dev/null +++ b/RockOS/.git-backup/logs/refs/remotes/origin/main @@ -0,0 +1,42 @@ +4e8de774ef76caed41dffa19de0e90f1ec356534 53c5d7d40c92e9f9dceaa7dcfc35a46d8710734c slinky55 1781415254 -0500 update by push +53c5d7d40c92e9f9dceaa7dcfc35a46d8710734c ac4b510221717936555ca3e478f27f1bf6b46399 slinky55 1781481237 -0500 update by push +ac4b510221717936555ca3e478f27f1bf6b46399 25da0f6a71c2ce4aba86f32d375d97562a1650e3 slinky55 1781561647 -0500 pull: fast-forward +25da0f6a71c2ce4aba86f32d375d97562a1650e3 fe3725db99bf7181e9194510f15f6f7ab99cffbf slinky55 1781584504 -0500 update by push +fe3725db99bf7181e9194510f15f6f7ab99cffbf 0a51a5e8bccfdb5e3d99438eb738a5e56ac37590 slinky55 1781629530 -0500 pull: fast-forward +0a51a5e8bccfdb5e3d99438eb738a5e56ac37590 171cbd21bc1c032bc3818696b937007bc6013bec slinky55 1781653475 -0500 update by push +171cbd21bc1c032bc3818696b937007bc6013bec 0cb7311911cc37bfa99efeddaaca706d9b8490f6 slinky55 1781661258 -0500 pull: fast-forward +0cb7311911cc37bfa99efeddaaca706d9b8490f6 7d34fbbd022f50376c4067a594de4c12a3880a8d slinky55 1781738209 -0500 update by push +7d34fbbd022f50376c4067a594de4c12a3880a8d b384723dbdecc59099db9580aa1473098000f286 slinky55 1781846831 -0500 update by push +b384723dbdecc59099db9580aa1473098000f286 0f84acde302a1f01e52a9d504a188b14ed4819a2 slinky55 1782007501 -0500 pull: fast-forward +0f84acde302a1f01e52a9d504a188b14ed4819a2 a82a7aa1a4559d3e4b838f7f129266c20cc50ebd slinky55 1782079039 -0500 update by push +a82a7aa1a4559d3e4b838f7f129266c20cc50ebd ae4b6863bf686ff2d0b26c0a70f37c84fc9e4e0a slinky55 1782274917 -0500 pull: fast-forward +ae4b6863bf686ff2d0b26c0a70f37c84fc9e4e0a 68dbdbb2c8f4798af40df79d6afb037fa1c9af18 slinky55 1782325829 -0500 update by push +68dbdbb2c8f4798af40df79d6afb037fa1c9af18 bf0d1caa8902bf2f812b33a5f20b2b89c26eaab5 slinky55 1782349153 -0500 pull: fast-forward +bf0d1caa8902bf2f812b33a5f20b2b89c26eaab5 8fa7a5930cdec67ac00379ab241db67906d14fe0 slinky55 1782355928 -0500 update by push +8fa7a5930cdec67ac00379ab241db67906d14fe0 a501b1913eab8f594fa9bf8141eadb87becc60fa slinky55 1782362496 -0500 update by push +a501b1913eab8f594fa9bf8141eadb87becc60fa 57d7d34c6d797b9ceef5de13091eeb56ff8e2eac slinky55 1782414219 -0500 update by push +57d7d34c6d797b9ceef5de13091eeb56ff8e2eac 43bc0df81a8755b46f7062263c6063319353d5f1 slinky55 1782523078 -0500 pull: fast-forward +43bc0df81a8755b46f7062263c6063319353d5f1 97357f3170d59a64f9ac72eb1d06ec93172a9252 slinky55 1782687544 -0500 update by push +97357f3170d59a64f9ac72eb1d06ec93172a9252 5983212da0651f730f8900aa51146e461f05ce92 slinky55 1782771843 -0500 pull: fast-forward +5983212da0651f730f8900aa51146e461f05ce92 ce81d4eb31577446527811678dfc3fd042fb787f slinky55 1782795804 -0500 update by push +ce81d4eb31577446527811678dfc3fd042fb787f af6c1c94cffa4197296a23efde18425220ea6438 slinky55 1782867624 -0500 pull: fast-forward +af6c1c94cffa4197296a23efde18425220ea6438 b6ee4fc3de326f1f6be2e9baab4bca141a9bfa88 slinky55 1782954025 -0500 update by push +b6ee4fc3de326f1f6be2e9baab4bca141a9bfa88 48df965268e6f964bc608bd3ec3cab97e38ea4aa slinky55 1782961870 -0500 update by push +48df965268e6f964bc608bd3ec3cab97e38ea4aa ab5a1ecb6b88d7bd6dcbbcadcbff009eef7157c8 slinky55 1783135527 -0500 update by push +ab5a1ecb6b88d7bd6dcbbcadcbff009eef7157c8 0b98ac0273731d958307bd0a1cf4705ccd64d13d slinky55 1783142818 -0500 pull: fast-forward +0b98ac0273731d958307bd0a1cf4705ccd64d13d 17ccde355672be85baf7efe2f77c468b75ef842d slinky55 1783148363 -0500 update by push +17ccde355672be85baf7efe2f77c468b75ef842d 7d76f0ec73be8c6554e9e993f97bbc60fcdbdb98 slinky55 1783148963 -0500 update by push +7d76f0ec73be8c6554e9e993f97bbc60fcdbdb98 6d7a23d747e511a4572301239d106fa79cd03a59 slinky55 1783394041 -0500 update by push +6d7a23d747e511a4572301239d106fa79cd03a59 177a0b8fe922ef36cd0624f835ff32ed842b6635 slinky55 1783401208 -0500 update by push +177a0b8fe922ef36cd0624f835ff32ed842b6635 e42ee8eb85fafc4c16654372e7cd9979b9f1dd62 slinky55 1783468344 -0500 update by push +e42ee8eb85fafc4c16654372e7cd9979b9f1dd62 ec3cbb479486af14f15f95376cc0e8ec1d86ba9a slinky55 1783555903 -0500 update by push +ec3cbb479486af14f15f95376cc0e8ec1d86ba9a 4d98d73f5ea90a0a0b6e26340658457c0de2fc73 slinky55 1783563334 -0500 update by push +4d98d73f5ea90a0a0b6e26340658457c0de2fc73 032a35206acc5e3139313183d354c5b988d4df3e slinky55 1783689008 -0500 pull: fast-forward +032a35206acc5e3139313183d354c5b988d4df3e 92748fd258852e50033777bf27697aea2c808b3a slinky55 1783783991 -0500 update by push +92748fd258852e50033777bf27697aea2c808b3a 992ffd1f6bc5a31582327ab4b434e47fcab4afe4 slinky55 1783784193 -0500 update by push +992ffd1f6bc5a31582327ab4b434e47fcab4afe4 3c6fd8cb651389de9cc425b6893c5512f9447ed3 slinky55 1783846588 -0500 update by push +3c6fd8cb651389de9cc425b6893c5512f9447ed3 d60036a4bdcc5e0b2b534446f19171a8ddcc2e08 slinky55 1783849073 -0500 update by push +d60036a4bdcc5e0b2b534446f19171a8ddcc2e08 e2ab1303243a463122832044a7fc75651008fb8f slinky55 1783874573 -0500 update by push +e2ab1303243a463122832044a7fc75651008fb8f 5c7febbbf0de9ca0d3f02efb50a2688f14b17d75 slinky55 1783905391 -0500 pull: fast-forward +5c7febbbf0de9ca0d3f02efb50a2688f14b17d75 454de8feed8e1ff633dd40a31317d4500f4b1221 slinky55 1784005672 -0500 update by push +454de8feed8e1ff633dd40a31317d4500f4b1221 6a79a20cf6d7c4597050a6119a4b373ec09f9645 slinky55 1784073843 -0500 pull: fast-forward diff --git a/RockOS/.git-backup/logs/refs/stash b/RockOS/.git-backup/logs/refs/stash new file mode 100644 index 0000000..c53d1e4 --- /dev/null +++ b/RockOS/.git-backup/logs/refs/stash @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 dbbda1ee4c5fc1f792cda63e4ccfb6abc9262f25 slinky55 1781561654 -0500 WIP on main: ac4b510 paging +dbbda1ee4c5fc1f792cda63e4ccfb6abc9262f25 afeebd1abb969f477d79fca3e708ac7b5e68ba5e slinky55 1781629559 -0500 WIP on main: fe3725d boot page table works +afeebd1abb969f477d79fca3e708ac7b5e68ba5e d69cc348f1cc9794ad175eb80ed588faf0baf1c8 slinky55 1782867628 -0500 WIP on main: ce81d4e loading initrd now... diff --git a/RockOS/.git-backup/objects/00/7814f68faec60aed438eeec12bb21a6a25ab52 b/RockOS/.git-backup/objects/00/7814f68faec60aed438eeec12bb21a6a25ab52 new file mode 100644 index 0000000..7bb64ce Binary files /dev/null and b/RockOS/.git-backup/objects/00/7814f68faec60aed438eeec12bb21a6a25ab52 differ diff --git a/RockOS/.git-backup/objects/00/8aa81124033c58f439f258ae52f08942ca2258 b/RockOS/.git-backup/objects/00/8aa81124033c58f439f258ae52f08942ca2258 new file mode 100644 index 0000000..0f28318 Binary files /dev/null and b/RockOS/.git-backup/objects/00/8aa81124033c58f439f258ae52f08942ca2258 differ diff --git a/RockOS/.git-backup/objects/00/e6d47b780b27fc62a1fef933b269727d3bd61f b/RockOS/.git-backup/objects/00/e6d47b780b27fc62a1fef933b269727d3bd61f new file mode 100644 index 0000000..2674c09 Binary files /dev/null and b/RockOS/.git-backup/objects/00/e6d47b780b27fc62a1fef933b269727d3bd61f differ diff --git a/RockOS/.git-backup/objects/00/ea6d985ac3c26e8d4e744cc3484f5b1d03a026 b/RockOS/.git-backup/objects/00/ea6d985ac3c26e8d4e744cc3484f5b1d03a026 new file mode 100644 index 0000000..5677322 Binary files /dev/null and b/RockOS/.git-backup/objects/00/ea6d985ac3c26e8d4e744cc3484f5b1d03a026 differ diff --git a/RockOS/.git-backup/objects/00/ef5a31b59a54d3029d9a3d82ba4fa739e0b7da b/RockOS/.git-backup/objects/00/ef5a31b59a54d3029d9a3d82ba4fa739e0b7da new file mode 100644 index 0000000..fa09a82 Binary files /dev/null and b/RockOS/.git-backup/objects/00/ef5a31b59a54d3029d9a3d82ba4fa739e0b7da differ diff --git a/RockOS/.git-backup/objects/01/27163fdfd01b87f339c8503e332e3060183e43 b/RockOS/.git-backup/objects/01/27163fdfd01b87f339c8503e332e3060183e43 new file mode 100644 index 0000000..6950296 --- /dev/null +++ b/RockOS/.git-backup/objects/01/27163fdfd01b87f339c8503e332e3060183e43 @@ -0,0 +1,3 @@ +xPN0eW* 1#00Yv}.''ύ +߱X*M ]`C/^gXCғhކ >tq!'X"F\Q2u o*0zu-~1Q{yQтd#Sc Cud4qLJQs2%^J-]kp>6 π@Ԣ?ŤȖšxr +!! \ No newline at end of file diff --git a/RockOS/.git-backup/objects/01/5b0ff3d4306bc3890c97f0cad186882b2fa2e1 b/RockOS/.git-backup/objects/01/5b0ff3d4306bc3890c97f0cad186882b2fa2e1 new file mode 100644 index 0000000..72277e1 Binary files /dev/null and b/RockOS/.git-backup/objects/01/5b0ff3d4306bc3890c97f0cad186882b2fa2e1 differ diff --git a/RockOS/.git-backup/objects/01/70f10be8b6ee5f04356c1b94f581b6beedfb78 b/RockOS/.git-backup/objects/01/70f10be8b6ee5f04356c1b94f581b6beedfb78 new file mode 100644 index 0000000..0ce0274 Binary files /dev/null and b/RockOS/.git-backup/objects/01/70f10be8b6ee5f04356c1b94f581b6beedfb78 differ diff --git a/RockOS/.git-backup/objects/02/1e58a5c4d4e949acb109c531b08fd7805b544a b/RockOS/.git-backup/objects/02/1e58a5c4d4e949acb109c531b08fd7805b544a new file mode 100644 index 0000000..a1a5a7d Binary files /dev/null and b/RockOS/.git-backup/objects/02/1e58a5c4d4e949acb109c531b08fd7805b544a differ diff --git a/RockOS/.git-backup/objects/02/48aa77ed48e09a1fe26809974f7e5e073017a4 b/RockOS/.git-backup/objects/02/48aa77ed48e09a1fe26809974f7e5e073017a4 new file mode 100644 index 0000000..74bfc84 --- /dev/null +++ b/RockOS/.git-backup/objects/02/48aa77ed48e09a1fe26809974f7e5e073017a4 @@ -0,0 +1,2 @@ +x]K0}_qЗn91&:m"rM%mhcCMZ7)ww/e +EB^S|fBU,REk!ޑP]a},'o TM+Sc vpf7|%0 QUgRiM1-Rt:͂SnHF4hR"۔J*5&USr(ꌎjb/4J,r T^=GYֲJr[Ahy2]' P|"A۳:|K.H3{r]N 16Q$ r` \ No newline at end of file diff --git a/RockOS/.git-backup/objects/02/71c604d1f52c01118b6136819da105b195e3f6 b/RockOS/.git-backup/objects/02/71c604d1f52c01118b6136819da105b195e3f6 new file mode 100644 index 0000000..9731a3f Binary files /dev/null and b/RockOS/.git-backup/objects/02/71c604d1f52c01118b6136819da105b195e3f6 differ diff --git a/RockOS/.git-backup/objects/02/740d2fcabb4dbef1ae4e9a07984a1f33d25a50 b/RockOS/.git-backup/objects/02/740d2fcabb4dbef1ae4e9a07984a1f33d25a50 new file mode 100644 index 0000000..ff7d8b7 Binary files /dev/null and b/RockOS/.git-backup/objects/02/740d2fcabb4dbef1ae4e9a07984a1f33d25a50 differ diff --git a/RockOS/.git-backup/objects/02/955f2a1e59488960eb5beaa8fb15029ab34f78 b/RockOS/.git-backup/objects/02/955f2a1e59488960eb5beaa8fb15029ab34f78 new file mode 100644 index 0000000..ab2af4a Binary files /dev/null and b/RockOS/.git-backup/objects/02/955f2a1e59488960eb5beaa8fb15029ab34f78 differ diff --git a/RockOS/.git-backup/objects/02/b490254d96d6d877db58311c0903c491465b62 b/RockOS/.git-backup/objects/02/b490254d96d6d877db58311c0903c491465b62 new file mode 100644 index 0000000..61d83ce --- /dev/null +++ b/RockOS/.git-backup/objects/02/b490254d96d6d877db58311c0903c491465b62 @@ -0,0 +1,2 @@ +xT]o@mb"bJJ)RP}B&wN:*hAU{l'] zvvg^=LnߌSE@q/ A{ZhPA U EZ!Zy5+2QBHs(hǒ !STҜTԅ5TO!eLF\I)Y)2/fK09_f'EJ=o(GCʸ{3kPim(SHwׇ~6u \ No newline at end of file diff --git a/RockOS/.git-backup/objects/03/2a35206acc5e3139313183d354c5b988d4df3e b/RockOS/.git-backup/objects/03/2a35206acc5e3139313183d354c5b988d4df3e new file mode 100644 index 0000000..2d398d4 --- /dev/null +++ b/RockOS/.git-backup/objects/03/2a35206acc5e3139313183d354c5b988d4df3e @@ -0,0 +1,2 @@ +x[ +!@vn1V|\'ip,h8pbL&tȄf0.h+GCKr6 )ԋ@ (f=}}+-Tp_/%zX֠@~ ;7 ʥOD \ No newline at end of file diff --git a/RockOS/.git-backup/objects/03/d6e3c8409e084d1126175c06fc63665ef274d2 b/RockOS/.git-backup/objects/03/d6e3c8409e084d1126175c06fc63665ef274d2 new file mode 100644 index 0000000..6db4eaa --- /dev/null +++ b/RockOS/.git-backup/objects/03/d6e3c8409e084d1126175c06fc63665ef274d2 @@ -0,0 +1,3 @@ +x0Et\BE, "iP@x``E.ҝ9wIVQwT: $E9Mh~eJUS=`1BZ@jC.!ZPƨ𤋮EE [Y +6vffV]ޤiB& gu>7wmxO$m \ No newline at end of file diff --git a/RockOS/.git-backup/objects/04/9de3c0d11548e79d8357f0bbc3613530eb71d6 b/RockOS/.git-backup/objects/04/9de3c0d11548e79d8357f0bbc3613530eb71d6 new file mode 100644 index 0000000..59f288b --- /dev/null +++ b/RockOS/.git-backup/objects/04/9de3c0d11548e79d8357f0bbc3613530eb71d6 @@ -0,0 +1,3 @@ +x] +@E{Ġ@~-qwcwsSHa8Ʋ8m%ZZP ,> 0 + "C1WAfL_ϮxkEQ}nߘ\Z-`ə%P@v \ No newline at end of file diff --git a/RockOS/.git-backup/objects/04/af6b0ec5ff8d542a0d191f951cd1043d589ae1 b/RockOS/.git-backup/objects/04/af6b0ec5ff8d542a0d191f951cd1043d589ae1 new file mode 100644 index 0000000..89892dc Binary files /dev/null and b/RockOS/.git-backup/objects/04/af6b0ec5ff8d542a0d191f951cd1043d589ae1 differ diff --git a/RockOS/.git-backup/objects/04/df1fead56a9292ac5f531b7b6b54231d51c84a b/RockOS/.git-backup/objects/04/df1fead56a9292ac5f531b7b6b54231d51c84a new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/04/e4f3dff85078a65f8e3ac33c4ea650b99f9a93 b/RockOS/.git-backup/objects/04/e4f3dff85078a65f8e3ac33c4ea650b99f9a93 new file mode 100644 index 0000000..2fe9e43 Binary files /dev/null and b/RockOS/.git-backup/objects/04/e4f3dff85078a65f8e3ac33c4ea650b99f9a93 differ diff --git a/RockOS/.git-backup/objects/05/062fd3d394fb5be4782ab776d627ed9f95c15a b/RockOS/.git-backup/objects/05/062fd3d394fb5be4782ab776d627ed9f95c15a new file mode 100644 index 0000000..632062b Binary files /dev/null and b/RockOS/.git-backup/objects/05/062fd3d394fb5be4782ab776d627ed9f95c15a differ diff --git a/RockOS/.git-backup/objects/05/6326c122719a38bce8d7c676d3d491c46a9a76 b/RockOS/.git-backup/objects/05/6326c122719a38bce8d7c676d3d491c46a9a76 new file mode 100644 index 0000000..ef39ce1 Binary files /dev/null and b/RockOS/.git-backup/objects/05/6326c122719a38bce8d7c676d3d491c46a9a76 differ diff --git a/RockOS/.git-backup/objects/05/9aa9a948bd667b40d1f189ca2c8efdc3bbbc5f b/RockOS/.git-backup/objects/05/9aa9a948bd667b40d1f189ca2c8efdc3bbbc5f new file mode 100644 index 0000000..c17b0b4 Binary files /dev/null and b/RockOS/.git-backup/objects/05/9aa9a948bd667b40d1f189ca2c8efdc3bbbc5f differ diff --git a/RockOS/.git-backup/objects/06/946d0f02e649e3cf4969876442e121c684b676 b/RockOS/.git-backup/objects/06/946d0f02e649e3cf4969876442e121c684b676 new file mode 100644 index 0000000..40a3fa3 --- /dev/null +++ b/RockOS/.git-backup/objects/06/946d0f02e649e3cf4969876442e121c684b676 @@ -0,0 +1,4 @@ +xU]@1MK O%15cǖwFilvC_/{x'>z;ՂMe nz:NKۄ-h<.*c,{a%ǟ7: +"|OӔ&Lwc ' Mx,S?7ei- Y@B<Q lg!ԷʭY')d&hik$I.y|W{BRcrPI +/UVN Q L:<}{ c n_,zW؋1Sa H^49QRQ;]5}?-@;sy \ No newline at end of file diff --git a/RockOS/.git-backup/objects/06/df64ad1a34d423be4b72617c35b8d7414ccb12 b/RockOS/.git-backup/objects/06/df64ad1a34d423be4b72617c35b8d7414ccb12 new file mode 100644 index 0000000..3cb1324 Binary files /dev/null and b/RockOS/.git-backup/objects/06/df64ad1a34d423be4b72617c35b8d7414ccb12 differ diff --git a/RockOS/.git-backup/objects/07/125acde834b7a47446cab453515e5373225a6a b/RockOS/.git-backup/objects/07/125acde834b7a47446cab453515e5373225a6a new file mode 100644 index 0000000..ae78449 Binary files /dev/null and b/RockOS/.git-backup/objects/07/125acde834b7a47446cab453515e5373225a6a differ diff --git a/RockOS/.git-backup/objects/07/190974927e8e7332ac52630f4526ed8b1b2ce8 b/RockOS/.git-backup/objects/07/190974927e8e7332ac52630f4526ed8b1b2ce8 new file mode 100644 index 0000000..8390554 --- /dev/null +++ b/RockOS/.git-backup/objects/07/190974927e8e7332ac52630f4526ed8b1b2ce8 @@ -0,0 +1,4 @@ +xSQK0@ِ4S`s",ͤ6ҟoY2C徻/}.ۋIYeH$09n:<`b.*"v?'m맓-.mr]ykF?mu<6L|ǻLsʬ! 3Q `(hB0E]-`Fsu$},`f7*Y irֈ +Pv 0'z1,& +kM9f6ҵF4 + /[3 r.lÂns/c+7eJȈ$nxz?/]I vvsK?7'Fl3y+NSՠ$ԝrqI=iqJ8VyV[zcc3=V \ No newline at end of file diff --git a/RockOS/.git-backup/objects/07/b9232c3471721a05db84b4d2749b9e0916ff9a b/RockOS/.git-backup/objects/07/b9232c3471721a05db84b4d2749b9e0916ff9a new file mode 100644 index 0000000..b6c038a Binary files /dev/null and b/RockOS/.git-backup/objects/07/b9232c3471721a05db84b4d2749b9e0916ff9a differ diff --git a/RockOS/.git-backup/objects/07/d008faf8964c84be61f0f4930ebbb5f3b545a0 b/RockOS/.git-backup/objects/07/d008faf8964c84be61f0f4930ebbb5f3b545a0 new file mode 100644 index 0000000..8e04c51 Binary files /dev/null and b/RockOS/.git-backup/objects/07/d008faf8964c84be61f0f4930ebbb5f3b545a0 differ diff --git a/RockOS/.git-backup/objects/07/fa93171fe10c2c7139f0209435f92023eca53a b/RockOS/.git-backup/objects/07/fa93171fe10c2c7139f0209435f92023eca53a new file mode 100644 index 0000000..4fdc27b Binary files /dev/null and b/RockOS/.git-backup/objects/07/fa93171fe10c2c7139f0209435f92023eca53a differ diff --git a/RockOS/.git-backup/objects/08/77456edaa5aeec1446dd56bd86acb78b03c92e b/RockOS/.git-backup/objects/08/77456edaa5aeec1446dd56bd86acb78b03c92e new file mode 100644 index 0000000..08f7c40 Binary files /dev/null and b/RockOS/.git-backup/objects/08/77456edaa5aeec1446dd56bd86acb78b03c92e differ diff --git a/RockOS/.git-backup/objects/08/a2a0cef15614b32490f32f6e302326fb4d6ac4 b/RockOS/.git-backup/objects/08/a2a0cef15614b32490f32f6e302326fb4d6ac4 new file mode 100644 index 0000000..85292ed Binary files /dev/null and b/RockOS/.git-backup/objects/08/a2a0cef15614b32490f32f6e302326fb4d6ac4 differ diff --git a/RockOS/.git-backup/objects/08/f6cbf96d713481e0f36c570763a2100bc6a072 b/RockOS/.git-backup/objects/08/f6cbf96d713481e0f36c570763a2100bc6a072 new file mode 100644 index 0000000..4ae6c8c Binary files /dev/null and b/RockOS/.git-backup/objects/08/f6cbf96d713481e0f36c570763a2100bc6a072 differ diff --git a/RockOS/.git-backup/objects/09/9ec5937b4c1b0c3b81d23caf6abe9587699e0a b/RockOS/.git-backup/objects/09/9ec5937b4c1b0c3b81d23caf6abe9587699e0a new file mode 100644 index 0000000..b37f5be Binary files /dev/null and b/RockOS/.git-backup/objects/09/9ec5937b4c1b0c3b81d23caf6abe9587699e0a differ diff --git a/RockOS/.git-backup/objects/09/e097c31d3379b6ff2f6cbe191f60eec961f810 b/RockOS/.git-backup/objects/09/e097c31d3379b6ff2f6cbe191f60eec961f810 new file mode 100644 index 0000000..a4b339a Binary files /dev/null and b/RockOS/.git-backup/objects/09/e097c31d3379b6ff2f6cbe191f60eec961f810 differ diff --git a/RockOS/.git-backup/objects/09/fddd3fb5dd4d5d6707176e0e6289a14b2f43bc b/RockOS/.git-backup/objects/09/fddd3fb5dd4d5d6707176e0e6289a14b2f43bc new file mode 100644 index 0000000..1ed3b85 Binary files /dev/null and b/RockOS/.git-backup/objects/09/fddd3fb5dd4d5d6707176e0e6289a14b2f43bc differ diff --git a/RockOS/.git-backup/objects/0a/0cf58b33dc085fb440296c311df56a6a8f719b b/RockOS/.git-backup/objects/0a/0cf58b33dc085fb440296c311df56a6a8f719b new file mode 100644 index 0000000..d6fdca5 Binary files /dev/null and b/RockOS/.git-backup/objects/0a/0cf58b33dc085fb440296c311df56a6a8f719b differ diff --git a/RockOS/.git-backup/objects/0a/4b7d43b4eb5453f9eb6b065a5405cb8876dd21 b/RockOS/.git-backup/objects/0a/4b7d43b4eb5453f9eb6b065a5405cb8876dd21 new file mode 100644 index 0000000..c395dbe Binary files /dev/null and b/RockOS/.git-backup/objects/0a/4b7d43b4eb5453f9eb6b065a5405cb8876dd21 differ diff --git a/RockOS/.git-backup/objects/0a/51a5e8bccfdb5e3d99438eb738a5e56ac37590 b/RockOS/.git-backup/objects/0a/51a5e8bccfdb5e3d99438eb738a5e56ac37590 new file mode 100644 index 0000000..8f2989a Binary files /dev/null and b/RockOS/.git-backup/objects/0a/51a5e8bccfdb5e3d99438eb738a5e56ac37590 differ diff --git a/RockOS/.git-backup/objects/0a/71eeef95b408c38e8beff3bfeb5bdc42a6e8bb b/RockOS/.git-backup/objects/0a/71eeef95b408c38e8beff3bfeb5bdc42a6e8bb new file mode 100644 index 0000000..7764554 Binary files /dev/null and b/RockOS/.git-backup/objects/0a/71eeef95b408c38e8beff3bfeb5bdc42a6e8bb differ diff --git a/RockOS/.git-backup/objects/0a/819518972b20c6d5df82de2bea8253cee85fd9 b/RockOS/.git-backup/objects/0a/819518972b20c6d5df82de2bea8253cee85fd9 new file mode 100644 index 0000000..89b4c4e Binary files /dev/null and b/RockOS/.git-backup/objects/0a/819518972b20c6d5df82de2bea8253cee85fd9 differ diff --git a/RockOS/.git-backup/objects/0a/9ae5da83d22b248aca1290b4e0f834ae1ea5dc b/RockOS/.git-backup/objects/0a/9ae5da83d22b248aca1290b4e0f834ae1ea5dc new file mode 100644 index 0000000..2d1b4b4 Binary files /dev/null and b/RockOS/.git-backup/objects/0a/9ae5da83d22b248aca1290b4e0f834ae1ea5dc differ diff --git a/RockOS/.git-backup/objects/0a/d7525d28d6cf3533d9ca1dba8a2cb4bd267edd b/RockOS/.git-backup/objects/0a/d7525d28d6cf3533d9ca1dba8a2cb4bd267edd new file mode 100644 index 0000000..69de725 Binary files /dev/null and b/RockOS/.git-backup/objects/0a/d7525d28d6cf3533d9ca1dba8a2cb4bd267edd differ diff --git a/RockOS/.git-backup/objects/0a/e1a07f645183addfdb9fa4400225c582e29756 b/RockOS/.git-backup/objects/0a/e1a07f645183addfdb9fa4400225c582e29756 new file mode 100644 index 0000000..182e16a Binary files /dev/null and b/RockOS/.git-backup/objects/0a/e1a07f645183addfdb9fa4400225c582e29756 differ diff --git a/RockOS/.git-backup/objects/0b/98ac0273731d958307bd0a1cf4705ccd64d13d b/RockOS/.git-backup/objects/0b/98ac0273731d958307bd0a1cf4705ccd64d13d new file mode 100644 index 0000000..200df06 Binary files /dev/null and b/RockOS/.git-backup/objects/0b/98ac0273731d958307bd0a1cf4705ccd64d13d differ diff --git a/RockOS/.git-backup/objects/0b/e401df47284344bc97eb8551fa9e8dc5a4ad0f b/RockOS/.git-backup/objects/0b/e401df47284344bc97eb8551fa9e8dc5a4ad0f new file mode 100644 index 0000000..ea71d95 Binary files /dev/null and b/RockOS/.git-backup/objects/0b/e401df47284344bc97eb8551fa9e8dc5a4ad0f differ diff --git a/RockOS/.git-backup/objects/0b/e6b789e50e9d2b657bf56de53867cde5c916be b/RockOS/.git-backup/objects/0b/e6b789e50e9d2b657bf56de53867cde5c916be new file mode 100644 index 0000000..b546555 Binary files /dev/null and b/RockOS/.git-backup/objects/0b/e6b789e50e9d2b657bf56de53867cde5c916be differ diff --git a/RockOS/.git-backup/objects/0c/1844600599460bda07a2ca73d0ca41087a0a00 b/RockOS/.git-backup/objects/0c/1844600599460bda07a2ca73d0ca41087a0a00 new file mode 100644 index 0000000..f6d308e Binary files /dev/null and b/RockOS/.git-backup/objects/0c/1844600599460bda07a2ca73d0ca41087a0a00 differ diff --git a/RockOS/.git-backup/objects/0c/1bb42c852d51e5ad94afc3c1cfa1e1ae19e51a b/RockOS/.git-backup/objects/0c/1bb42c852d51e5ad94afc3c1cfa1e1ae19e51a new file mode 100644 index 0000000..bb1d4c1 Binary files /dev/null and b/RockOS/.git-backup/objects/0c/1bb42c852d51e5ad94afc3c1cfa1e1ae19e51a differ diff --git a/RockOS/.git-backup/objects/0c/721f5a3f81ec00255f469934b726e0fec58889 b/RockOS/.git-backup/objects/0c/721f5a3f81ec00255f469934b726e0fec58889 new file mode 100644 index 0000000..f8fcd3d --- /dev/null +++ b/RockOS/.git-backup/objects/0c/721f5a3f81ec00255f469934b726e0fec58889 @@ -0,0 +1,5 @@ +xU +0D=+zREP SӤd׊~i杍;<]Yx*" R[qD47"V^{{sZAlc,1N +eOE' ,B[X +EM.=4=uVb֠0f^#Z[^"] +'?[ c7m \ No newline at end of file diff --git a/RockOS/.git-backup/objects/0c/a899e8c468feaab5c412eb17ac63ee073e923b b/RockOS/.git-backup/objects/0c/a899e8c468feaab5c412eb17ac63ee073e923b new file mode 100644 index 0000000..3182d8b Binary files /dev/null and b/RockOS/.git-backup/objects/0c/a899e8c468feaab5c412eb17ac63ee073e923b differ diff --git a/RockOS/.git-backup/objects/0c/b7311911cc37bfa99efeddaaca706d9b8490f6 b/RockOS/.git-backup/objects/0c/b7311911cc37bfa99efeddaaca706d9b8490f6 new file mode 100644 index 0000000..c4c0ada Binary files /dev/null and b/RockOS/.git-backup/objects/0c/b7311911cc37bfa99efeddaaca706d9b8490f6 differ diff --git a/RockOS/.git-backup/objects/0c/c991b02f0a81db433c910dd4a7f52cb32f579d b/RockOS/.git-backup/objects/0c/c991b02f0a81db433c910dd4a7f52cb32f579d new file mode 100644 index 0000000..c5bc880 Binary files /dev/null and b/RockOS/.git-backup/objects/0c/c991b02f0a81db433c910dd4a7f52cb32f579d differ diff --git a/RockOS/.git-backup/objects/0c/d97ab126ba2124f4b2bbbc6da479e8d64bf8ee b/RockOS/.git-backup/objects/0c/d97ab126ba2124f4b2bbbc6da479e8d64bf8ee new file mode 100644 index 0000000..4f5eaaa Binary files /dev/null and b/RockOS/.git-backup/objects/0c/d97ab126ba2124f4b2bbbc6da479e8d64bf8ee differ diff --git a/RockOS/.git-backup/objects/0c/e43718569d1e586b56b422feeaef1b1f4152bd b/RockOS/.git-backup/objects/0c/e43718569d1e586b56b422feeaef1b1f4152bd new file mode 100644 index 0000000..5bcc503 Binary files /dev/null and b/RockOS/.git-backup/objects/0c/e43718569d1e586b56b422feeaef1b1f4152bd differ diff --git a/RockOS/.git-backup/objects/0d/3aa65b00d0056910409bedb9de26a8ce1c10ca b/RockOS/.git-backup/objects/0d/3aa65b00d0056910409bedb9de26a8ce1c10ca new file mode 100644 index 0000000..eea0264 Binary files /dev/null and b/RockOS/.git-backup/objects/0d/3aa65b00d0056910409bedb9de26a8ce1c10ca differ diff --git a/RockOS/.git-backup/objects/0d/8e4bf278684da1b072dd408c0aaf238552f59b b/RockOS/.git-backup/objects/0d/8e4bf278684da1b072dd408c0aaf238552f59b new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/0d/bbd48977257c6940d38511957aeb2ac63d6cda b/RockOS/.git-backup/objects/0d/bbd48977257c6940d38511957aeb2ac63d6cda new file mode 100644 index 0000000..f416d9b Binary files /dev/null and b/RockOS/.git-backup/objects/0d/bbd48977257c6940d38511957aeb2ac63d6cda differ diff --git a/RockOS/.git-backup/objects/0d/e8320019b171458c7ac432bcecf09ca029ba9c b/RockOS/.git-backup/objects/0d/e8320019b171458c7ac432bcecf09ca029ba9c new file mode 100644 index 0000000..1079098 Binary files /dev/null and b/RockOS/.git-backup/objects/0d/e8320019b171458c7ac432bcecf09ca029ba9c differ diff --git a/RockOS/.git-backup/objects/0e/21fe32f2a52aa0d9871f88322c587cacca0cfe b/RockOS/.git-backup/objects/0e/21fe32f2a52aa0d9871f88322c587cacca0cfe new file mode 100644 index 0000000..3ae8036 Binary files /dev/null and b/RockOS/.git-backup/objects/0e/21fe32f2a52aa0d9871f88322c587cacca0cfe differ diff --git a/RockOS/.git-backup/objects/0e/2dcba0d79b5a5dc8025dce970bf451d1f6d2d2 b/RockOS/.git-backup/objects/0e/2dcba0d79b5a5dc8025dce970bf451d1f6d2d2 new file mode 100644 index 0000000..3b2e071 Binary files /dev/null and b/RockOS/.git-backup/objects/0e/2dcba0d79b5a5dc8025dce970bf451d1f6d2d2 differ diff --git a/RockOS/.git-backup/objects/0e/41fab0dcd89a3fc4284b967023048b4245b579 b/RockOS/.git-backup/objects/0e/41fab0dcd89a3fc4284b967023048b4245b579 new file mode 100644 index 0000000..455d7dc Binary files /dev/null and b/RockOS/.git-backup/objects/0e/41fab0dcd89a3fc4284b967023048b4245b579 differ diff --git a/RockOS/.git-backup/objects/0e/5bc83e59fcf3b3341e53930a2f06a087fbab79 b/RockOS/.git-backup/objects/0e/5bc83e59fcf3b3341e53930a2f06a087fbab79 new file mode 100644 index 0000000..16cc783 Binary files /dev/null and b/RockOS/.git-backup/objects/0e/5bc83e59fcf3b3341e53930a2f06a087fbab79 differ diff --git a/RockOS/.git-backup/objects/0e/9f2485a621475d9dea907b1a4ac7fcc8a36317 b/RockOS/.git-backup/objects/0e/9f2485a621475d9dea907b1a4ac7fcc8a36317 new file mode 100644 index 0000000..3c3eb5d Binary files /dev/null and b/RockOS/.git-backup/objects/0e/9f2485a621475d9dea907b1a4ac7fcc8a36317 differ diff --git a/RockOS/.git-backup/objects/0e/bd0d3d2695c998170be0c1c5066af6c3af0272 b/RockOS/.git-backup/objects/0e/bd0d3d2695c998170be0c1c5066af6c3af0272 new file mode 100644 index 0000000..a1fc1e2 Binary files /dev/null and b/RockOS/.git-backup/objects/0e/bd0d3d2695c998170be0c1c5066af6c3af0272 differ diff --git a/RockOS/.git-backup/objects/0f/465a02e0aa49eba6aaac86ce50b6919e55ea14 b/RockOS/.git-backup/objects/0f/465a02e0aa49eba6aaac86ce50b6919e55ea14 new file mode 100644 index 0000000..28cbfbe Binary files /dev/null and b/RockOS/.git-backup/objects/0f/465a02e0aa49eba6aaac86ce50b6919e55ea14 differ diff --git a/RockOS/.git-backup/objects/0f/51944fac77df4e4111da70617ace732d5354b8 b/RockOS/.git-backup/objects/0f/51944fac77df4e4111da70617ace732d5354b8 new file mode 100644 index 0000000..16095b0 Binary files /dev/null and b/RockOS/.git-backup/objects/0f/51944fac77df4e4111da70617ace732d5354b8 differ diff --git a/RockOS/.git-backup/objects/0f/84acde302a1f01e52a9d504a188b14ed4819a2 b/RockOS/.git-backup/objects/0f/84acde302a1f01e52a9d504a188b14ed4819a2 new file mode 100644 index 0000000..cdeaf4a Binary files /dev/null and b/RockOS/.git-backup/objects/0f/84acde302a1f01e52a9d504a188b14ed4819a2 differ diff --git a/RockOS/.git-backup/objects/0f/907c75a13f92a019fb41a234c02845d61c95a2 b/RockOS/.git-backup/objects/0f/907c75a13f92a019fb41a234c02845d61c95a2 new file mode 100644 index 0000000..a225d1f --- /dev/null +++ b/RockOS/.git-backup/objects/0f/907c75a13f92a019fb41a234c02845d61c95a2 @@ -0,0 +1 @@ +x+)JMU022g040031QH-Iҹy)zYy m7^vշgʯ2@/fhdːn;+g|]UZ| yj1l>\*MKf$we~])+g$*SӀNcO z?S/ ^Hs-'TMqeqrbNРA_n.ɽhҥs\Z \ No newline at end of file diff --git a/RockOS/.git-backup/objects/10/4747b76ba7d8cf8ddaf740ec0f108ce2071679 b/RockOS/.git-backup/objects/10/4747b76ba7d8cf8ddaf740ec0f108ce2071679 new file mode 100644 index 0000000..993f290 Binary files /dev/null and b/RockOS/.git-backup/objects/10/4747b76ba7d8cf8ddaf740ec0f108ce2071679 differ diff --git a/RockOS/.git-backup/objects/10/48b2b7c1f19ea8b29ecc84ed7f9ac96b88695c b/RockOS/.git-backup/objects/10/48b2b7c1f19ea8b29ecc84ed7f9ac96b88695c new file mode 100644 index 0000000..02a6e0a Binary files /dev/null and b/RockOS/.git-backup/objects/10/48b2b7c1f19ea8b29ecc84ed7f9ac96b88695c differ diff --git a/RockOS/.git-backup/objects/10/d8a8b45a4030942bbe78f4ec49a64c97e31e4d b/RockOS/.git-backup/objects/10/d8a8b45a4030942bbe78f4ec49a64c97e31e4d new file mode 100644 index 0000000..7060751 Binary files /dev/null and b/RockOS/.git-backup/objects/10/d8a8b45a4030942bbe78f4ec49a64c97e31e4d differ diff --git a/RockOS/.git-backup/objects/10/fff88e826234cbc6055063c32fd58b7c5edb67 b/RockOS/.git-backup/objects/10/fff88e826234cbc6055063c32fd58b7c5edb67 new file mode 100644 index 0000000..b5cfae1 Binary files /dev/null and b/RockOS/.git-backup/objects/10/fff88e826234cbc6055063c32fd58b7c5edb67 differ diff --git a/RockOS/.git-backup/objects/11/80bb0509f76735721db1d45402e318836cfdcc b/RockOS/.git-backup/objects/11/80bb0509f76735721db1d45402e318836cfdcc new file mode 100644 index 0000000..0586007 Binary files /dev/null and b/RockOS/.git-backup/objects/11/80bb0509f76735721db1d45402e318836cfdcc differ diff --git a/RockOS/.git-backup/objects/11/93adf709ee01f13b33ee919e4db281b4786b64 b/RockOS/.git-backup/objects/11/93adf709ee01f13b33ee919e4db281b4786b64 new file mode 100644 index 0000000..9c753cb Binary files /dev/null and b/RockOS/.git-backup/objects/11/93adf709ee01f13b33ee919e4db281b4786b64 differ diff --git a/RockOS/.git-backup/objects/11/abdb29905d70fe26d42befb125e53029231521 b/RockOS/.git-backup/objects/11/abdb29905d70fe26d42befb125e53029231521 new file mode 100644 index 0000000..2f325c0 Binary files /dev/null and b/RockOS/.git-backup/objects/11/abdb29905d70fe26d42befb125e53029231521 differ diff --git a/RockOS/.git-backup/objects/11/b04b3fb452a9227ff8f421fd1a03a5892f0d3c b/RockOS/.git-backup/objects/11/b04b3fb452a9227ff8f421fd1a03a5892f0d3c new file mode 100644 index 0000000..04aa5d3 Binary files /dev/null and b/RockOS/.git-backup/objects/11/b04b3fb452a9227ff8f421fd1a03a5892f0d3c differ diff --git a/RockOS/.git-backup/objects/11/f7f2dbca3c20b205adf59113a7fe9739b527b8 b/RockOS/.git-backup/objects/11/f7f2dbca3c20b205adf59113a7fe9739b527b8 new file mode 100644 index 0000000..183d4d3 --- /dev/null +++ b/RockOS/.git-backup/objects/11/f7f2dbca3c20b205adf59113a7fe9739b527b8 @@ -0,0 +1,3 @@ +x] +0E]+QQTAEQn\6bL"nwܼHFa~;i*, +6XG,F^!)mw0F7[4waCrbϓٱ[r3Y*9(#4kU^Wx(VGU! 94®D U:hm&Ϩ:_W< b9 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/12/550b7ee2fade3ef7de7636bb2a1b6e1e9de192 b/RockOS/.git-backup/objects/12/550b7ee2fade3ef7de7636bb2a1b6e1e9de192 new file mode 100644 index 0000000..4bdbe7c Binary files /dev/null and b/RockOS/.git-backup/objects/12/550b7ee2fade3ef7de7636bb2a1b6e1e9de192 differ diff --git a/RockOS/.git-backup/objects/12/c112ba80b1c7506a8fb60f3fc551504ec7e5ba b/RockOS/.git-backup/objects/12/c112ba80b1c7506a8fb60f3fc551504ec7e5ba new file mode 100644 index 0000000..ce362e4 Binary files /dev/null and b/RockOS/.git-backup/objects/12/c112ba80b1c7506a8fb60f3fc551504ec7e5ba differ diff --git a/RockOS/.git-backup/objects/12/d8ce02dd994ed2ffa55b313b43b89996e5fe52 b/RockOS/.git-backup/objects/12/d8ce02dd994ed2ffa55b313b43b89996e5fe52 new file mode 100644 index 0000000..d5a4102 --- /dev/null +++ b/RockOS/.git-backup/objects/12/d8ce02dd994ed2ffa55b313b43b89996e5fe52 @@ -0,0 +1,4 @@ +xSˎ@̙u[~q6xQfu<=3Z+^rzꪮ81>|͠UF$)]L>:h;e湉`)a^_a,acxd}{{N2JqQkhRQH8u q ƖgY -/VY(pOl 1_,YdT4BKkh)|?,wtKw~K~̂txlRUڷ/ +3Eƒ39m55)O[ +nâ) 3.|.X +:6ڸ4&YVP(1EΞnxl0 e/{.A(Jx"k45=7Rn{{puʄ&oB!Ixbri\PV"[Uq%RT|i4Q2WPX#G ž}V뮚Or \ No newline at end of file diff --git a/RockOS/.git-backup/objects/13/be220b6a96f349566730c44395d9448bd6ed03 b/RockOS/.git-backup/objects/13/be220b6a96f349566730c44395d9448bd6ed03 new file mode 100644 index 0000000..07a4351 Binary files /dev/null and b/RockOS/.git-backup/objects/13/be220b6a96f349566730c44395d9448bd6ed03 differ diff --git a/RockOS/.git-backup/objects/13/cfa2d023b8a7d3e1466a878298a0f066d3ce53 b/RockOS/.git-backup/objects/13/cfa2d023b8a7d3e1466a878298a0f066d3ce53 new file mode 100644 index 0000000..3e7b8f5 Binary files /dev/null and b/RockOS/.git-backup/objects/13/cfa2d023b8a7d3e1466a878298a0f066d3ce53 differ diff --git a/RockOS/.git-backup/objects/14/0a2cf1a13840d6680e97314d3f37d2daedd7b7 b/RockOS/.git-backup/objects/14/0a2cf1a13840d6680e97314d3f37d2daedd7b7 new file mode 100644 index 0000000..b54e7d0 Binary files /dev/null and b/RockOS/.git-backup/objects/14/0a2cf1a13840d6680e97314d3f37d2daedd7b7 differ diff --git a/RockOS/.git-backup/objects/14/5fcdd9bce96e24eb5bbcc1c7bc865d511a5982 b/RockOS/.git-backup/objects/14/5fcdd9bce96e24eb5bbcc1c7bc865d511a5982 new file mode 100644 index 0000000..ae47644 Binary files /dev/null and b/RockOS/.git-backup/objects/14/5fcdd9bce96e24eb5bbcc1c7bc865d511a5982 differ diff --git a/RockOS/.git-backup/objects/14/60f59bfd9ec6b712dfd18e95653b8c58249d78 b/RockOS/.git-backup/objects/14/60f59bfd9ec6b712dfd18e95653b8c58249d78 new file mode 100644 index 0000000..347ff13 Binary files /dev/null and b/RockOS/.git-backup/objects/14/60f59bfd9ec6b712dfd18e95653b8c58249d78 differ diff --git a/RockOS/.git-backup/objects/14/7298c0b9ec1705b641eaf3b6bf6264b688666a b/RockOS/.git-backup/objects/14/7298c0b9ec1705b641eaf3b6bf6264b688666a new file mode 100644 index 0000000..0699e28 Binary files /dev/null and b/RockOS/.git-backup/objects/14/7298c0b9ec1705b641eaf3b6bf6264b688666a differ diff --git a/RockOS/.git-backup/objects/14/bc51b3e7aae5ef783f5481f8dde233612371bc b/RockOS/.git-backup/objects/14/bc51b3e7aae5ef783f5481f8dde233612371bc new file mode 100644 index 0000000..cd4b1d2 --- /dev/null +++ b/RockOS/.git-backup/objects/14/bc51b3e7aae5ef783f5481f8dde233612371bc @@ -0,0 +1 @@ +xPj0Y_kL/(V(P'HDX^|}ײ'vfgv8ǫvdyS@Kxƨ’v{X7KN,pO=qh8M>^NXS+HкKp zs޵*aNg-/>bsHg$YNӜ&`p*"\{lȲӷy[^w5cJU/E \ No newline at end of file diff --git a/RockOS/.git-backup/objects/14/e037845a24bbb064266c81e767be05c00ce81c b/RockOS/.git-backup/objects/14/e037845a24bbb064266c81e767be05c00ce81c new file mode 100644 index 0000000..54ffbe0 Binary files /dev/null and b/RockOS/.git-backup/objects/14/e037845a24bbb064266c81e767be05c00ce81c differ diff --git a/RockOS/.git-backup/objects/15/3d380d763ff23f3d95514d7ca1b98da8e75287 b/RockOS/.git-backup/objects/15/3d380d763ff23f3d95514d7ca1b98da8e75287 new file mode 100644 index 0000000..3391921 --- /dev/null +++ b/RockOS/.git-backup/objects/15/3d380d763ff23f3d95514d7ca1b98da8e75287 @@ -0,0 +1,2 @@ +xm]K0ίfC*2v~&E=ۨamLF3Kd2Ηb 6"I^@'JB iL5d<;7]&!pk:`1|gȇm~-s".dGrR\H㓫AmβW isph-(BYì +-qKJF%>՗3Y=5:P4w~ ^M9e_zm%8 BzQ˭rjבW \ No newline at end of file diff --git a/RockOS/.git-backup/objects/17/ce907e20e1000a94365d512cc5a321ca52589b b/RockOS/.git-backup/objects/17/ce907e20e1000a94365d512cc5a321ca52589b new file mode 100644 index 0000000..9fe27ed Binary files /dev/null and b/RockOS/.git-backup/objects/17/ce907e20e1000a94365d512cc5a321ca52589b differ diff --git a/RockOS/.git-backup/objects/18/14e83a0bf972011b4b647feb6043247b08684d b/RockOS/.git-backup/objects/18/14e83a0bf972011b4b647feb6043247b08684d new file mode 100644 index 0000000..c79dfe8 Binary files /dev/null and b/RockOS/.git-backup/objects/18/14e83a0bf972011b4b647feb6043247b08684d differ diff --git a/RockOS/.git-backup/objects/18/f1e9a0d69cd4f5455339d26c206d15a7b79aba b/RockOS/.git-backup/objects/18/f1e9a0d69cd4f5455339d26c206d15a7b79aba new file mode 100644 index 0000000..34c542c Binary files /dev/null and b/RockOS/.git-backup/objects/18/f1e9a0d69cd4f5455339d26c206d15a7b79aba differ diff --git a/RockOS/.git-backup/objects/19/057062c0dfff5dd6315ea07fe5d245e53d18ba b/RockOS/.git-backup/objects/19/057062c0dfff5dd6315ea07fe5d245e53d18ba new file mode 100644 index 0000000..2ae129b Binary files /dev/null and b/RockOS/.git-backup/objects/19/057062c0dfff5dd6315ea07fe5d245e53d18ba differ diff --git a/RockOS/.git-backup/objects/1a/1e6a42bf9688c4ab354e25a3047efda5601e05 b/RockOS/.git-backup/objects/1a/1e6a42bf9688c4ab354e25a3047efda5601e05 new file mode 100644 index 0000000..b005c40 Binary files /dev/null and b/RockOS/.git-backup/objects/1a/1e6a42bf9688c4ab354e25a3047efda5601e05 differ diff --git a/RockOS/.git-backup/objects/1a/4f77bf372488dec3f838260ce4fdc95f200f8b b/RockOS/.git-backup/objects/1a/4f77bf372488dec3f838260ce4fdc95f200f8b new file mode 100644 index 0000000..ae2bfb8 Binary files /dev/null and b/RockOS/.git-backup/objects/1a/4f77bf372488dec3f838260ce4fdc95f200f8b differ diff --git a/RockOS/.git-backup/objects/1a/656d6ef46398de91674b823a2030753067dac2 b/RockOS/.git-backup/objects/1a/656d6ef46398de91674b823a2030753067dac2 new file mode 100644 index 0000000..a0ee672 Binary files /dev/null and b/RockOS/.git-backup/objects/1a/656d6ef46398de91674b823a2030753067dac2 differ diff --git a/RockOS/.git-backup/objects/1a/a8749aef63cf2b3f12667fd111bc28c35174ae b/RockOS/.git-backup/objects/1a/a8749aef63cf2b3f12667fd111bc28c35174ae new file mode 100644 index 0000000..f3a6c11 Binary files /dev/null and b/RockOS/.git-backup/objects/1a/a8749aef63cf2b3f12667fd111bc28c35174ae differ diff --git a/RockOS/.git-backup/objects/1a/d3c66099edae6ae2a4b14d0a1cebbda2a177b2 b/RockOS/.git-backup/objects/1a/d3c66099edae6ae2a4b14d0a1cebbda2a177b2 new file mode 100644 index 0000000..b40ef80 Binary files /dev/null and b/RockOS/.git-backup/objects/1a/d3c66099edae6ae2a4b14d0a1cebbda2a177b2 differ diff --git a/RockOS/.git-backup/objects/1b/02fb12e7257c1befe6d54f7aac87bf493ab939 b/RockOS/.git-backup/objects/1b/02fb12e7257c1befe6d54f7aac87bf493ab939 new file mode 100644 index 0000000..bd502c3 Binary files /dev/null and b/RockOS/.git-backup/objects/1b/02fb12e7257c1befe6d54f7aac87bf493ab939 differ diff --git a/RockOS/.git-backup/objects/1b/10b302af6a6d9c6d207e98b110f40dd6d94921 b/RockOS/.git-backup/objects/1b/10b302af6a6d9c6d207e98b110f40dd6d94921 new file mode 100644 index 0000000..65b5882 Binary files /dev/null and b/RockOS/.git-backup/objects/1b/10b302af6a6d9c6d207e98b110f40dd6d94921 differ diff --git a/RockOS/.git-backup/objects/1b/18673a674495947b764d0954077f7b9e83bc3a b/RockOS/.git-backup/objects/1b/18673a674495947b764d0954077f7b9e83bc3a new file mode 100644 index 0000000..b26ea20 Binary files /dev/null and b/RockOS/.git-backup/objects/1b/18673a674495947b764d0954077f7b9e83bc3a differ diff --git a/RockOS/.git-backup/objects/1b/714f7f4dd22a36390c9aab82ff64e3a21575ba b/RockOS/.git-backup/objects/1b/714f7f4dd22a36390c9aab82ff64e3a21575ba new file mode 100644 index 0000000..ba2dc76 Binary files /dev/null and b/RockOS/.git-backup/objects/1b/714f7f4dd22a36390c9aab82ff64e3a21575ba differ diff --git a/RockOS/.git-backup/objects/1b/9d5f5c73306cf8b9ed220d7919c8828820d05e b/RockOS/.git-backup/objects/1b/9d5f5c73306cf8b9ed220d7919c8828820d05e new file mode 100644 index 0000000..1c209af Binary files /dev/null and b/RockOS/.git-backup/objects/1b/9d5f5c73306cf8b9ed220d7919c8828820d05e differ diff --git a/RockOS/.git-backup/objects/1b/bddc1422e640f543a16f29634e031404f7de51 b/RockOS/.git-backup/objects/1b/bddc1422e640f543a16f29634e031404f7de51 new file mode 100644 index 0000000..23e7aca Binary files /dev/null and b/RockOS/.git-backup/objects/1b/bddc1422e640f543a16f29634e031404f7de51 differ diff --git a/RockOS/.git-backup/objects/1b/c23d04aece6ae5dcca1b4df761661b3c852512 b/RockOS/.git-backup/objects/1b/c23d04aece6ae5dcca1b4df761661b3c852512 new file mode 100644 index 0000000..5498d29 Binary files /dev/null and b/RockOS/.git-backup/objects/1b/c23d04aece6ae5dcca1b4df761661b3c852512 differ diff --git a/RockOS/.git-backup/objects/1b/dde86b030af623ef5674b322355adc60631f5b b/RockOS/.git-backup/objects/1b/dde86b030af623ef5674b322355adc60631f5b new file mode 100644 index 0000000..0b840ad Binary files /dev/null and b/RockOS/.git-backup/objects/1b/dde86b030af623ef5674b322355adc60631f5b differ diff --git a/RockOS/.git-backup/objects/1c/1659cf3967e2291a56991c13f35326e2f86e54 b/RockOS/.git-backup/objects/1c/1659cf3967e2291a56991c13f35326e2f86e54 new file mode 100644 index 0000000..29e2143 Binary files /dev/null and b/RockOS/.git-backup/objects/1c/1659cf3967e2291a56991c13f35326e2f86e54 differ diff --git a/RockOS/.git-backup/objects/1c/4b4b8fac9961ae73424221c1cac1e620c60417 b/RockOS/.git-backup/objects/1c/4b4b8fac9961ae73424221c1cac1e620c60417 new file mode 100644 index 0000000..8cbdc5c Binary files /dev/null and b/RockOS/.git-backup/objects/1c/4b4b8fac9961ae73424221c1cac1e620c60417 differ diff --git a/RockOS/.git-backup/objects/1c/5a58c1723276c9b1d4ae1674b8b9316778f78e b/RockOS/.git-backup/objects/1c/5a58c1723276c9b1d4ae1674b8b9316778f78e new file mode 100644 index 0000000..64d9933 Binary files /dev/null and b/RockOS/.git-backup/objects/1c/5a58c1723276c9b1d4ae1674b8b9316778f78e differ diff --git a/RockOS/.git-backup/objects/1c/748d05c91cacb4e0c07982e80520f53e28a40a b/RockOS/.git-backup/objects/1c/748d05c91cacb4e0c07982e80520f53e28a40a new file mode 100644 index 0000000..d07bea3 Binary files /dev/null and b/RockOS/.git-backup/objects/1c/748d05c91cacb4e0c07982e80520f53e28a40a differ diff --git a/RockOS/.git-backup/objects/1c/85238bda5feeefe2ba5ce19fb54dfc8f4f8a6a b/RockOS/.git-backup/objects/1c/85238bda5feeefe2ba5ce19fb54dfc8f4f8a6a new file mode 100644 index 0000000..935b408 Binary files /dev/null and b/RockOS/.git-backup/objects/1c/85238bda5feeefe2ba5ce19fb54dfc8f4f8a6a differ diff --git a/RockOS/.git-backup/objects/1c/d8759975378788846b4d8b361b250c4866713a b/RockOS/.git-backup/objects/1c/d8759975378788846b4d8b361b250c4866713a new file mode 100644 index 0000000..1b0bd09 Binary files /dev/null and b/RockOS/.git-backup/objects/1c/d8759975378788846b4d8b361b250c4866713a differ diff --git a/RockOS/.git-backup/objects/1c/e64fa56085da7c1cdc6a785b931834cd7ff702 b/RockOS/.git-backup/objects/1c/e64fa56085da7c1cdc6a785b931834cd7ff702 new file mode 100644 index 0000000..31bcb38 --- /dev/null +++ b/RockOS/.git-backup/objects/1c/e64fa56085da7c1cdc6a785b931834cd7ff702 @@ -0,0 +1,2 @@ +x10Fap3^G +*_\6Hۙv@&QC\Xj\{Y>2n \ No newline at end of file diff --git a/RockOS/.git-backup/objects/1d/03d11042910caf7346544959e06e53dc33bacf b/RockOS/.git-backup/objects/1d/03d11042910caf7346544959e06e53dc33bacf new file mode 100644 index 0000000..6314d73 Binary files /dev/null and b/RockOS/.git-backup/objects/1d/03d11042910caf7346544959e06e53dc33bacf differ diff --git a/RockOS/.git-backup/objects/1d/08ffacdfc701a5e8adec7f57936786cd8d55f5 b/RockOS/.git-backup/objects/1d/08ffacdfc701a5e8adec7f57936786cd8d55f5 new file mode 100644 index 0000000..0cc0574 Binary files /dev/null and b/RockOS/.git-backup/objects/1d/08ffacdfc701a5e8adec7f57936786cd8d55f5 differ diff --git a/RockOS/.git-backup/objects/1d/a70c208ed0ceb98256d14f9eb5f13ff2b074b2 b/RockOS/.git-backup/objects/1d/a70c208ed0ceb98256d14f9eb5f13ff2b074b2 new file mode 100644 index 0000000..ce17e35 Binary files /dev/null and b/RockOS/.git-backup/objects/1d/a70c208ed0ceb98256d14f9eb5f13ff2b074b2 differ diff --git a/RockOS/.git-backup/objects/1d/a74173e983df153a122c0f9d686c04f4ab6923 b/RockOS/.git-backup/objects/1d/a74173e983df153a122c0f9d686c04f4ab6923 new file mode 100644 index 0000000..fe125e7 Binary files /dev/null and b/RockOS/.git-backup/objects/1d/a74173e983df153a122c0f9d686c04f4ab6923 differ diff --git a/RockOS/.git-backup/objects/1d/c0da919c72eb2f07603e14fff4cd06a51130b0 b/RockOS/.git-backup/objects/1d/c0da919c72eb2f07603e14fff4cd06a51130b0 new file mode 100644 index 0000000..3298999 --- /dev/null +++ b/RockOS/.git-backup/objects/1d/c0da919c72eb2f07603e14fff4cd06a51130b0 @@ -0,0 +1 @@ +xK0}_qTQdm 6=\0M%I7{Ib_\|"hoTs)p~hC OK%@}2]M PbT(J ĥlgz=ɝwA=WvS8N4gyV_!QTz7>mEao.p G{Vg~(xgNk4GѴ8@Ҫ9^lRqÜ, -68du!)ghHYȘXp0Vk XWf aM=Ŭ, Z\ݏ'mDU߼Vg6u , \ No newline at end of file diff --git a/RockOS/.git-backup/objects/1e/18b2d687204867e4923ca8809a915c9f34aa2f b/RockOS/.git-backup/objects/1e/18b2d687204867e4923ca8809a915c9f34aa2f new file mode 100644 index 0000000..79eaca7 Binary files /dev/null and b/RockOS/.git-backup/objects/1e/18b2d687204867e4923ca8809a915c9f34aa2f differ diff --git a/RockOS/.git-backup/objects/1e/2d0f8bc8b447f9e47ec9823691b973aee46a1b b/RockOS/.git-backup/objects/1e/2d0f8bc8b447f9e47ec9823691b973aee46a1b new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/1f/679ecafbf6af93713ab3a453e12bf5293e1436 b/RockOS/.git-backup/objects/1f/679ecafbf6af93713ab3a453e12bf5293e1436 new file mode 100644 index 0000000..3d61a84 Binary files /dev/null and b/RockOS/.git-backup/objects/1f/679ecafbf6af93713ab3a453e12bf5293e1436 differ diff --git a/RockOS/.git-backup/objects/1f/f4d32c8991fd602e14ddcd5ea9823b4f65cb67 b/RockOS/.git-backup/objects/1f/f4d32c8991fd602e14ddcd5ea9823b4f65cb67 new file mode 100644 index 0000000..fa2a964 Binary files /dev/null and b/RockOS/.git-backup/objects/1f/f4d32c8991fd602e14ddcd5ea9823b4f65cb67 differ diff --git a/RockOS/.git-backup/objects/20/16675c02393343bdaf815de1f35fb2a20523bb b/RockOS/.git-backup/objects/20/16675c02393343bdaf815de1f35fb2a20523bb new file mode 100644 index 0000000..66bb2e9 --- /dev/null +++ b/RockOS/.git-backup/objects/20/16675c02393343bdaf815de1f35fb2a20523bb @@ -0,0 +1,2 @@ +xm +0{ާC -DX_FhBb߾Yb6.Xyy=6Ti4hlj'[ΓV!`{w/&sUQf'lUPoxn5OৢQZ hTQ]6O!/QrޣB]\ω8O,U;1ԎQ`Y%8THֵI֫am:^pC Q)渵v-6Z𝽸t٫ޙK+/WYKFxPQ5ك7$<]}w0ܧ;܏k>e1kZϬwrF8;ܡ;}Iz~,<{Qxe\m!ҌOkKy@bn&ZRj͖b>z/*^: \ No newline at end of file diff --git a/RockOS/.git-backup/objects/20/616d0dd4baab593f2acdc607ac9ee48bef1f76 b/RockOS/.git-backup/objects/20/616d0dd4baab593f2acdc607ac9ee48bef1f76 new file mode 100644 index 0000000..a3530bf --- /dev/null +++ b/RockOS/.git-backup/objects/20/616d0dd4baab593f2acdc607ac9ee48bef1f76 @@ -0,0 +1,3 @@ +xU +0T)*PIq5cZoo8p~.@1_M۞,E Y"!Lε +ϛ(_ hkKe!xt1<wͫz|t'4uaP $h5OX \ No newline at end of file diff --git a/RockOS/.git-backup/objects/20/9a9775faf7ee63469c9b345ecb84be53864908 b/RockOS/.git-backup/objects/20/9a9775faf7ee63469c9b345ecb84be53864908 new file mode 100644 index 0000000..5d791e3 Binary files /dev/null and b/RockOS/.git-backup/objects/20/9a9775faf7ee63469c9b345ecb84be53864908 differ diff --git a/RockOS/.git-backup/objects/21/2b4f3a0505e226fc55d4a53cd46aff3c881414 b/RockOS/.git-backup/objects/21/2b4f3a0505e226fc55d4a53cd46aff3c881414 new file mode 100644 index 0000000..3cbd83e Binary files /dev/null and b/RockOS/.git-backup/objects/21/2b4f3a0505e226fc55d4a53cd46aff3c881414 differ diff --git a/RockOS/.git-backup/objects/21/303ab73196575f2262d078b1b1af52350781d9 b/RockOS/.git-backup/objects/21/303ab73196575f2262d078b1b1af52350781d9 new file mode 100644 index 0000000..d8757d6 Binary files /dev/null and b/RockOS/.git-backup/objects/21/303ab73196575f2262d078b1b1af52350781d9 differ diff --git a/RockOS/.git-backup/objects/21/d3c5f50210d98055214f07e609412afa306ba4 b/RockOS/.git-backup/objects/21/d3c5f50210d98055214f07e609412afa306ba4 new file mode 100644 index 0000000..27338ba Binary files /dev/null and b/RockOS/.git-backup/objects/21/d3c5f50210d98055214f07e609412afa306ba4 differ diff --git a/RockOS/.git-backup/objects/21/db4f58d89f9302756dcd569bbb9247427c7b7e b/RockOS/.git-backup/objects/21/db4f58d89f9302756dcd569bbb9247427c7b7e new file mode 100644 index 0000000..9458968 --- /dev/null +++ b/RockOS/.git-backup/objects/21/db4f58d89f9302756dcd569bbb9247427c7b7e @@ -0,0 +1,9 @@ +xUmo0s)(ZִMcCEn;hmDӳ{|wzѳReyDF*rq 'P<Zfq4*=Lx*ygGk Vkvz<M:Sed*Cz\vAXZ&%+S^opZ2Z؛n#N1ancI3cfB"MΦ0 xu͘J a- +{=w0?(/pQӸNA-nIЋ06ډIU6F1*\Utϱ vvVt b_&>f +|  |ȯu @> +d`0 )&!$$lo}' +ΨFжVf1l;Y;vSFj2α +kz3[`\QngfЅv?DLOO`| O>)u_ K*,ؓ%CO/wav M80^fڧ\`[Hvk_]7d)~ذtDJ) +R*@r%E:g^`I>@[\\+z%^PJlGxF:ġA{K[#^Ѓv< +z nF5 I/F?R +p3odLsaKR ?r5S裄z#Zp&ד8Tj99jrc r>$Wl;Gg \ No newline at end of file diff --git a/RockOS/.git-backup/objects/22/24fc4587fc93e32e92ebd41f6b69878b553ea0 b/RockOS/.git-backup/objects/22/24fc4587fc93e32e92ebd41f6b69878b553ea0 new file mode 100644 index 0000000..7e10287 Binary files /dev/null and b/RockOS/.git-backup/objects/22/24fc4587fc93e32e92ebd41f6b69878b553ea0 differ diff --git a/RockOS/.git-backup/objects/22/605b093cd5af16fdc472bb10a51acc3b2e1676 b/RockOS/.git-backup/objects/22/605b093cd5af16fdc472bb10a51acc3b2e1676 new file mode 100644 index 0000000..be38595 --- /dev/null +++ b/RockOS/.git-backup/objects/22/605b093cd5af16fdc472bb10a51acc3b2e1676 @@ -0,0 +1,4 @@ +xMQk0enܖ0B_Bȶbk|%gZqMwν(7cq}.*`>'u<FW RTvFyP'+櫋Ki]{<#Ls-u`/tcjc@C= B֙sjVAjDWՐLtj0*xBeTSFZ<3d+|Md \ No newline at end of file diff --git a/RockOS/.git-backup/objects/25/bde9984826a90c88a40005b7aa846c0a2e368a b/RockOS/.git-backup/objects/25/bde9984826a90c88a40005b7aa846c0a2e368a new file mode 100644 index 0000000..5a72ec0 Binary files /dev/null and b/RockOS/.git-backup/objects/25/bde9984826a90c88a40005b7aa846c0a2e368a differ diff --git a/RockOS/.git-backup/objects/25/cbdbcca4be7ceff2fd25ab2807c3803ff5fa3c b/RockOS/.git-backup/objects/25/cbdbcca4be7ceff2fd25ab2807c3803ff5fa3c new file mode 100644 index 0000000..7f64fe0 Binary files /dev/null and b/RockOS/.git-backup/objects/25/cbdbcca4be7ceff2fd25ab2807c3803ff5fa3c differ diff --git a/RockOS/.git-backup/objects/25/da0f6a71c2ce4aba86f32d375d97562a1650e3 b/RockOS/.git-backup/objects/25/da0f6a71c2ce4aba86f32d375d97562a1650e3 new file mode 100644 index 0000000..5842b8f Binary files /dev/null and b/RockOS/.git-backup/objects/25/da0f6a71c2ce4aba86f32d375d97562a1650e3 differ diff --git a/RockOS/.git-backup/objects/25/dd2c638a94782d15723c56a214f1b898c8d6fb b/RockOS/.git-backup/objects/25/dd2c638a94782d15723c56a214f1b898c8d6fb new file mode 100644 index 0000000..d2accb3 Binary files /dev/null and b/RockOS/.git-backup/objects/25/dd2c638a94782d15723c56a214f1b898c8d6fb differ diff --git a/RockOS/.git-backup/objects/26/4978e2a08b12e234c5fe34adf88589c89c8e2c b/RockOS/.git-backup/objects/26/4978e2a08b12e234c5fe34adf88589c89c8e2c new file mode 100644 index 0000000..dc998cf Binary files /dev/null and b/RockOS/.git-backup/objects/26/4978e2a08b12e234c5fe34adf88589c89c8e2c differ diff --git a/RockOS/.git-backup/objects/26/72d891661234dae6adda148a81ba577e31d1e5 b/RockOS/.git-backup/objects/26/72d891661234dae6adda148a81ba577e31d1e5 new file mode 100644 index 0000000..fc6288a Binary files /dev/null and b/RockOS/.git-backup/objects/26/72d891661234dae6adda148a81ba577e31d1e5 differ diff --git a/RockOS/.git-backup/objects/26/d9521f2ec77cade733af26447a768659ccd892 b/RockOS/.git-backup/objects/26/d9521f2ec77cade733af26447a768659ccd892 new file mode 100644 index 0000000..5bad8d4 Binary files /dev/null and b/RockOS/.git-backup/objects/26/d9521f2ec77cade733af26447a768659ccd892 differ diff --git a/RockOS/.git-backup/objects/26/e9f2e072a813834cb6b029b1642a3430f7968a b/RockOS/.git-backup/objects/26/e9f2e072a813834cb6b029b1642a3430f7968a new file mode 100644 index 0000000..1276352 Binary files /dev/null and b/RockOS/.git-backup/objects/26/e9f2e072a813834cb6b029b1642a3430f7968a differ diff --git a/RockOS/.git-backup/objects/27/921dc22cd6b61ea59bbd1ef2812b29ec4357dc b/RockOS/.git-backup/objects/27/921dc22cd6b61ea59bbd1ef2812b29ec4357dc new file mode 100644 index 0000000..317e9b3 Binary files /dev/null and b/RockOS/.git-backup/objects/27/921dc22cd6b61ea59bbd1ef2812b29ec4357dc differ diff --git a/RockOS/.git-backup/objects/27/b2e7ee0dd46f76c7b451e0e9b4b8b166770f72 b/RockOS/.git-backup/objects/27/b2e7ee0dd46f76c7b451e0e9b4b8b166770f72 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/27/c7d745a668d7fcccc2950acab33990de39135c b/RockOS/.git-backup/objects/27/c7d745a668d7fcccc2950acab33990de39135c new file mode 100644 index 0000000..b44601f Binary files /dev/null and b/RockOS/.git-backup/objects/27/c7d745a668d7fcccc2950acab33990de39135c differ diff --git a/RockOS/.git-backup/objects/27/e6ed94bb643fcf5d8147a188d9c90b4e66e92a b/RockOS/.git-backup/objects/27/e6ed94bb643fcf5d8147a188d9c90b4e66e92a new file mode 100644 index 0000000..fb98256 Binary files /dev/null and b/RockOS/.git-backup/objects/27/e6ed94bb643fcf5d8147a188d9c90b4e66e92a differ diff --git a/RockOS/.git-backup/objects/28/1d87a433e399be74109a6b85ae01c81e96a62b b/RockOS/.git-backup/objects/28/1d87a433e399be74109a6b85ae01c81e96a62b new file mode 100644 index 0000000..8caa2c5 Binary files /dev/null and b/RockOS/.git-backup/objects/28/1d87a433e399be74109a6b85ae01c81e96a62b differ diff --git a/RockOS/.git-backup/objects/28/4c9fb32b7b1f82bf12089e649f6d8e907b748e b/RockOS/.git-backup/objects/28/4c9fb32b7b1f82bf12089e649f6d8e907b748e new file mode 100644 index 0000000..b56508b Binary files /dev/null and b/RockOS/.git-backup/objects/28/4c9fb32b7b1f82bf12089e649f6d8e907b748e differ diff --git a/RockOS/.git-backup/objects/28/7061eea595e25967a02d5a65f54f7c39a51805 b/RockOS/.git-backup/objects/28/7061eea595e25967a02d5a65f54f7c39a51805 new file mode 100644 index 0000000..79fe0af Binary files /dev/null and b/RockOS/.git-backup/objects/28/7061eea595e25967a02d5a65f54f7c39a51805 differ diff --git a/RockOS/.git-backup/objects/28/8137055e37ff2905dc7a0d1a30bc11f650b946 b/RockOS/.git-backup/objects/28/8137055e37ff2905dc7a0d1a30bc11f650b946 new file mode 100644 index 0000000..e910a75 Binary files /dev/null and b/RockOS/.git-backup/objects/28/8137055e37ff2905dc7a0d1a30bc11f650b946 differ diff --git a/RockOS/.git-backup/objects/28/a791b192df5cd51e4d3acc994ff9252e4d63ba b/RockOS/.git-backup/objects/28/a791b192df5cd51e4d3acc994ff9252e4d63ba new file mode 100644 index 0000000..06f5d48 Binary files /dev/null and b/RockOS/.git-backup/objects/28/a791b192df5cd51e4d3acc994ff9252e4d63ba differ diff --git a/RockOS/.git-backup/objects/28/eaf5b952c3f9d2f9fc3f8f5214826912fe8a2e b/RockOS/.git-backup/objects/28/eaf5b952c3f9d2f9fc3f8f5214826912fe8a2e new file mode 100644 index 0000000..f27a99f Binary files /dev/null and b/RockOS/.git-backup/objects/28/eaf5b952c3f9d2f9fc3f8f5214826912fe8a2e differ diff --git a/RockOS/.git-backup/objects/29/0285bb7b0c3611e926081d82b3be68174948bc b/RockOS/.git-backup/objects/29/0285bb7b0c3611e926081d82b3be68174948bc new file mode 100644 index 0000000..09bc04d Binary files /dev/null and b/RockOS/.git-backup/objects/29/0285bb7b0c3611e926081d82b3be68174948bc differ diff --git a/RockOS/.git-backup/objects/29/24fe220509d485f016cc1a54f1a7e57143990e b/RockOS/.git-backup/objects/29/24fe220509d485f016cc1a54f1a7e57143990e new file mode 100644 index 0000000..4f110e8 Binary files /dev/null and b/RockOS/.git-backup/objects/29/24fe220509d485f016cc1a54f1a7e57143990e differ diff --git a/RockOS/.git-backup/objects/29/917ac7e774fd925f52f9e64f0eb99f45bd9126 b/RockOS/.git-backup/objects/29/917ac7e774fd925f52f9e64f0eb99f45bd9126 new file mode 100644 index 0000000..77c2990 Binary files /dev/null and b/RockOS/.git-backup/objects/29/917ac7e774fd925f52f9e64f0eb99f45bd9126 differ diff --git a/RockOS/.git-backup/objects/29/9a4df8089818fc2907b532aa7cd4593dada7e0 b/RockOS/.git-backup/objects/29/9a4df8089818fc2907b532aa7cd4593dada7e0 new file mode 100644 index 0000000..a4133d4 Binary files /dev/null and b/RockOS/.git-backup/objects/29/9a4df8089818fc2907b532aa7cd4593dada7e0 differ diff --git a/RockOS/.git-backup/objects/2a/17d1fe25f009fa5635f19e36b4ec47429b93ff b/RockOS/.git-backup/objects/2a/17d1fe25f009fa5635f19e36b4ec47429b93ff new file mode 100644 index 0000000..4e0e7b1 Binary files /dev/null and b/RockOS/.git-backup/objects/2a/17d1fe25f009fa5635f19e36b4ec47429b93ff differ diff --git a/RockOS/.git-backup/objects/2b/1b563348553a399095bfb17778e15528eadaec b/RockOS/.git-backup/objects/2b/1b563348553a399095bfb17778e15528eadaec new file mode 100644 index 0000000..600b1d1 Binary files /dev/null and b/RockOS/.git-backup/objects/2b/1b563348553a399095bfb17778e15528eadaec differ diff --git a/RockOS/.git-backup/objects/2b/1cb5f3d5e7dbb403780bce145ec192d654f17c b/RockOS/.git-backup/objects/2b/1cb5f3d5e7dbb403780bce145ec192d654f17c new file mode 100644 index 0000000..fbb0322 Binary files /dev/null and b/RockOS/.git-backup/objects/2b/1cb5f3d5e7dbb403780bce145ec192d654f17c differ diff --git a/RockOS/.git-backup/objects/2b/597779db19102c1cc9ef05e43290d2ff2818fb b/RockOS/.git-backup/objects/2b/597779db19102c1cc9ef05e43290d2ff2818fb new file mode 100644 index 0000000..11e6b4b Binary files /dev/null and b/RockOS/.git-backup/objects/2b/597779db19102c1cc9ef05e43290d2ff2818fb differ diff --git a/RockOS/.git-backup/objects/2c/3ed1d4556e987d9d293ad0c69649d452b0bce0 b/RockOS/.git-backup/objects/2c/3ed1d4556e987d9d293ad0c69649d452b0bce0 new file mode 100644 index 0000000..bc42bc3 Binary files /dev/null and b/RockOS/.git-backup/objects/2c/3ed1d4556e987d9d293ad0c69649d452b0bce0 differ diff --git a/RockOS/.git-backup/objects/2c/9a18f671cae7bcb73426d27e1559d6dfaca425 b/RockOS/.git-backup/objects/2c/9a18f671cae7bcb73426d27e1559d6dfaca425 new file mode 100644 index 0000000..431ebe8 Binary files /dev/null and b/RockOS/.git-backup/objects/2c/9a18f671cae7bcb73426d27e1559d6dfaca425 differ diff --git a/RockOS/.git-backup/objects/2c/9fdfe1391c55a81e53123bba85c802337628b7 b/RockOS/.git-backup/objects/2c/9fdfe1391c55a81e53123bba85c802337628b7 new file mode 100644 index 0000000..4a1e1f6 Binary files /dev/null and b/RockOS/.git-backup/objects/2c/9fdfe1391c55a81e53123bba85c802337628b7 differ diff --git a/RockOS/.git-backup/objects/2c/d47654bd31cf7fb612e250e62c3c34a8468b3f b/RockOS/.git-backup/objects/2c/d47654bd31cf7fb612e250e62c3c34a8468b3f new file mode 100644 index 0000000..bb122f7 Binary files /dev/null and b/RockOS/.git-backup/objects/2c/d47654bd31cf7fb612e250e62c3c34a8468b3f differ diff --git a/RockOS/.git-backup/objects/2c/e815cb75e7f7f50335038767eba8db41c2f885 b/RockOS/.git-backup/objects/2c/e815cb75e7f7f50335038767eba8db41c2f885 new file mode 100644 index 0000000..dc0e54a Binary files /dev/null and b/RockOS/.git-backup/objects/2c/e815cb75e7f7f50335038767eba8db41c2f885 differ diff --git a/RockOS/.git-backup/objects/2d/31211f2acbd960eae591a53ff12fd25c45c173 b/RockOS/.git-backup/objects/2d/31211f2acbd960eae591a53ff12fd25c45c173 new file mode 100644 index 0000000..71b944e Binary files /dev/null and b/RockOS/.git-backup/objects/2d/31211f2acbd960eae591a53ff12fd25c45c173 differ diff --git a/RockOS/.git-backup/objects/2d/3c17547dad95dd2c7d11126043d76b98af55b8 b/RockOS/.git-backup/objects/2d/3c17547dad95dd2c7d11126043d76b98af55b8 new file mode 100644 index 0000000..fd0c5c4 Binary files /dev/null and b/RockOS/.git-backup/objects/2d/3c17547dad95dd2c7d11126043d76b98af55b8 differ diff --git a/RockOS/.git-backup/objects/2d/e6d53c314f061b0425338556cbef2caa6cd8b8 b/RockOS/.git-backup/objects/2d/e6d53c314f061b0425338556cbef2caa6cd8b8 new file mode 100644 index 0000000..eca35ca --- /dev/null +++ b/RockOS/.git-backup/objects/2d/e6d53c314f061b0425338556cbef2caa6cd8b8 @@ -0,0 +1 @@ +xuPI0 W@%@BH;FlJII |=f(E.b+!\E[kb@њ2-d a2LqYRW0SHWzVYSr7!u2 h-?z6\5VO-D&YObǕFdh-lBEiq75Df$ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/2e/2c62232b9607cdbbd0831f95355465fe89e685 b/RockOS/.git-backup/objects/2e/2c62232b9607cdbbd0831f95355465fe89e685 new file mode 100644 index 0000000..b912608 Binary files /dev/null and b/RockOS/.git-backup/objects/2e/2c62232b9607cdbbd0831f95355465fe89e685 differ diff --git a/RockOS/.git-backup/objects/2e/b664644fc2291074a5ef671114c94765825889 b/RockOS/.git-backup/objects/2e/b664644fc2291074a5ef671114c94765825889 new file mode 100644 index 0000000..25ec9af --- /dev/null +++ b/RockOS/.git-backup/objects/2e/b664644fc2291074a5ef671114c94765825889 @@ -0,0 +1,3 @@ +xEJ@ Sz."d!t58?e +ΌuUrX,:gzy81$ @ WbռMDF5ݔ~1a/R[Oh#|c@0ġDQ +C0 Y?4/AtI93S1Mڗm<>M--=>P/7ɮBɌ>i \ No newline at end of file diff --git a/RockOS/.git-backup/objects/2f/c3ca53bd146c25a62f9c856906b70feb1bb848 b/RockOS/.git-backup/objects/2f/c3ca53bd146c25a62f9c856906b70feb1bb848 new file mode 100644 index 0000000..e2a3c82 Binary files /dev/null and b/RockOS/.git-backup/objects/2f/c3ca53bd146c25a62f9c856906b70feb1bb848 differ diff --git a/RockOS/.git-backup/objects/2f/f1cea7b2571a7cfcc2d873b881853d5345e95b b/RockOS/.git-backup/objects/2f/f1cea7b2571a7cfcc2d873b881853d5345e95b new file mode 100644 index 0000000..ce9d970 Binary files /dev/null and b/RockOS/.git-backup/objects/2f/f1cea7b2571a7cfcc2d873b881853d5345e95b differ diff --git a/RockOS/.git-backup/objects/30/0316e85e2d8b772834f9c3f73395dcba67cc7a b/RockOS/.git-backup/objects/30/0316e85e2d8b772834f9c3f73395dcba67cc7a new file mode 100644 index 0000000..26187f2 Binary files /dev/null and b/RockOS/.git-backup/objects/30/0316e85e2d8b772834f9c3f73395dcba67cc7a differ diff --git a/RockOS/.git-backup/objects/30/a3cd8ed6e2217d211a91bb6dd3bfc6c683da7c b/RockOS/.git-backup/objects/30/a3cd8ed6e2217d211a91bb6dd3bfc6c683da7c new file mode 100644 index 0000000..7d68f99 Binary files /dev/null and b/RockOS/.git-backup/objects/30/a3cd8ed6e2217d211a91bb6dd3bfc6c683da7c differ diff --git a/RockOS/.git-backup/objects/31/2ac43ec3802840ff419acb952ce10b7d87cc7c b/RockOS/.git-backup/objects/31/2ac43ec3802840ff419acb952ce10b7d87cc7c new file mode 100644 index 0000000..f7fd32e --- /dev/null +++ b/RockOS/.git-backup/objects/31/2ac43ec3802840ff419acb952ce10b7d87cc7c @@ -0,0 +1,4 @@ +xSMO0 _a60q+&qpei瓶Y :!Qi/{īT(.9$7Bco?o~).(~1QěC`%u瞀{m. +:I0g=r <~/y +y bii ZB@fy4 +.q{7cO2e_NX^ ފIs7蠑̈́)j;m3EȓkAbASAAE D A"7za^3kPJg8~Fʛ4l]0UBt"r`A T?I OlK0av:Ϋԙ3`L,\=T*| Zs!ک !! w+pGh+M`0-xXpLDk vbTd-a#%>ZzARa_[6½u4wjto \ No newline at end of file diff --git a/RockOS/.git-backup/objects/32/745b06c359def33255ace19ab1ebbaad0c706a b/RockOS/.git-backup/objects/32/745b06c359def33255ace19ab1ebbaad0c706a new file mode 100644 index 0000000..6b9cc60 Binary files /dev/null and b/RockOS/.git-backup/objects/32/745b06c359def33255ace19ab1ebbaad0c706a differ diff --git a/RockOS/.git-backup/objects/32/bef4b5571d6b10507362ea2edf0cffa2c34c60 b/RockOS/.git-backup/objects/32/bef4b5571d6b10507362ea2edf0cffa2c34c60 new file mode 100644 index 0000000..79ef050 --- /dev/null +++ b/RockOS/.git-backup/objects/32/bef4b5571d6b10507362ea2edf0cffa2c34c60 @@ -0,0 +1,2 @@ +x]K0x0;N/:[U#]d$sݤۤʰ=IL18蟀[N 2>H<@TFA(^e aZ2L2!1)UZßN \%iMRJa9D)2b}DC*(60$+ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/32/eb3ed22fa71390526ea772d9dfa6c6026262e4 b/RockOS/.git-backup/objects/32/eb3ed22fa71390526ea772d9dfa6c6026262e4 new file mode 100644 index 0000000..f1cda9f Binary files /dev/null and b/RockOS/.git-backup/objects/32/eb3ed22fa71390526ea772d9dfa6c6026262e4 differ diff --git a/RockOS/.git-backup/objects/33/5f06420a4027d4c26f22e2ab3e6e007f99ce76 b/RockOS/.git-backup/objects/33/5f06420a4027d4c26f22e2ab3e6e007f99ce76 new file mode 100644 index 0000000..f8b63e6 Binary files /dev/null and b/RockOS/.git-backup/objects/33/5f06420a4027d4c26f22e2ab3e6e007f99ce76 differ diff --git a/RockOS/.git-backup/objects/33/b65494c6894a71cfc04a337ee8ed849d459baf b/RockOS/.git-backup/objects/33/b65494c6894a71cfc04a337ee8ed849d459baf new file mode 100644 index 0000000..b14912b --- /dev/null +++ b/RockOS/.git-backup/objects/33/b65494c6894a71cfc04a337ee8ed849d459baf @@ -0,0 +1,2 @@ +xRJ0ܯ9ێi<6͔I +.⿛.FoE{dfޛqwW/Ro*@>fz!ApOcn\W\Pvh|k} <rHQLFuu~y \ No newline at end of file diff --git a/RockOS/.git-backup/objects/34/f8b52a97ec4fa08a8b9700f7169c379f81b883 b/RockOS/.git-backup/objects/34/f8b52a97ec4fa08a8b9700f7169c379f81b883 new file mode 100644 index 0000000..9f2db32 Binary files /dev/null and b/RockOS/.git-backup/objects/34/f8b52a97ec4fa08a8b9700f7169c379f81b883 differ diff --git a/RockOS/.git-backup/objects/35/11df8724f90f55c7b2075705d4d9aae414f4ee b/RockOS/.git-backup/objects/35/11df8724f90f55c7b2075705d4d9aae414f4ee new file mode 100644 index 0000000..a701e5d Binary files /dev/null and b/RockOS/.git-backup/objects/35/11df8724f90f55c7b2075705d4d9aae414f4ee differ diff --git a/RockOS/.git-backup/objects/35/2ca8d1dcef8100e241f7a435b6390594a18cb4 b/RockOS/.git-backup/objects/35/2ca8d1dcef8100e241f7a435b6390594a18cb4 new file mode 100644 index 0000000..2471061 Binary files /dev/null and b/RockOS/.git-backup/objects/35/2ca8d1dcef8100e241f7a435b6390594a18cb4 differ diff --git a/RockOS/.git-backup/objects/35/2da7e5390324d9321c102923b4503259e0b7c3 b/RockOS/.git-backup/objects/35/2da7e5390324d9321c102923b4503259e0b7c3 new file mode 100644 index 0000000..f6bf877 Binary files /dev/null and b/RockOS/.git-backup/objects/35/2da7e5390324d9321c102923b4503259e0b7c3 differ diff --git a/RockOS/.git-backup/objects/35/53e82377e20381f483260deac04f829e811dc1 b/RockOS/.git-backup/objects/35/53e82377e20381f483260deac04f829e811dc1 new file mode 100644 index 0000000..3874028 Binary files /dev/null and b/RockOS/.git-backup/objects/35/53e82377e20381f483260deac04f829e811dc1 differ diff --git a/RockOS/.git-backup/objects/35/55342517dd0a5e004f2abda17781e3c66dabb4 b/RockOS/.git-backup/objects/35/55342517dd0a5e004f2abda17781e3c66dabb4 new file mode 100644 index 0000000..7c529ce Binary files /dev/null and b/RockOS/.git-backup/objects/35/55342517dd0a5e004f2abda17781e3c66dabb4 differ diff --git a/RockOS/.git-backup/objects/35/5d50d98e2fce654c5f0840aacd8f69ef08a574 b/RockOS/.git-backup/objects/35/5d50d98e2fce654c5f0840aacd8f69ef08a574 new file mode 100644 index 0000000..607d104 Binary files /dev/null and b/RockOS/.git-backup/objects/35/5d50d98e2fce654c5f0840aacd8f69ef08a574 differ diff --git a/RockOS/.git-backup/objects/35/8d7f0ec13d41e83299255f48c032de37e56978 b/RockOS/.git-backup/objects/35/8d7f0ec13d41e83299255f48c032de37e56978 new file mode 100644 index 0000000..53ced61 Binary files /dev/null and b/RockOS/.git-backup/objects/35/8d7f0ec13d41e83299255f48c032de37e56978 differ diff --git a/RockOS/.git-backup/objects/35/ce2bb759f03aa2db72f5f7ac1ef777f1a75d3c b/RockOS/.git-backup/objects/35/ce2bb759f03aa2db72f5f7ac1ef777f1a75d3c new file mode 100644 index 0000000..df05e7e Binary files /dev/null and b/RockOS/.git-backup/objects/35/ce2bb759f03aa2db72f5f7ac1ef777f1a75d3c differ diff --git a/RockOS/.git-backup/objects/36/5345343ed8ef2b11b047c4d529aec8995e7dba b/RockOS/.git-backup/objects/36/5345343ed8ef2b11b047c4d529aec8995e7dba new file mode 100644 index 0000000..6d7e4d1 --- /dev/null +++ b/RockOS/.git-backup/objects/36/5345343ed8ef2b11b047c4d529aec8995e7dba @@ -0,0 +1 @@ +x}PMO0_/P/" ec{Iךw$<> nËAnj|0U$T, Ka$Jz(dJgH1TP,%m%a >sĞ)ý6)'ve]~X~*S*GLƸjC8r+F&*K5%nX[Nd-#ôΩ-N]۲R\KJ[iK6AUq]Fz=M_o~/׸Mh@kXh/]xzu \ No newline at end of file diff --git a/RockOS/.git-backup/objects/36/5e8e7ae7e7e5bb3fe7b9eca03b316dba0edfaa b/RockOS/.git-backup/objects/36/5e8e7ae7e7e5bb3fe7b9eca03b316dba0edfaa new file mode 100644 index 0000000..ce7b513 Binary files /dev/null and b/RockOS/.git-backup/objects/36/5e8e7ae7e7e5bb3fe7b9eca03b316dba0edfaa differ diff --git a/RockOS/.git-backup/objects/36/63c5bd0bb30cc24068e6b198846474da2392a9 b/RockOS/.git-backup/objects/36/63c5bd0bb30cc24068e6b198846474da2392a9 new file mode 100644 index 0000000..f2f51d3 --- /dev/null +++ b/RockOS/.git-backup/objects/36/63c5bd0bb30cc24068e6b198846474da2392a9 @@ -0,0 +1,2 @@ +x]K0 DY^;2M,Z4QRP=NQWhzv=ԵS^ c2)UY; + xTM4g1ea>+ O\VeP]ŕ5=;?~B \ No newline at end of file diff --git a/RockOS/.git-backup/objects/36/b45d8db59b21780b8032bc9ede8427fbfd6275 b/RockOS/.git-backup/objects/36/b45d8db59b21780b8032bc9ede8427fbfd6275 new file mode 100644 index 0000000..a9e03a2 Binary files /dev/null and b/RockOS/.git-backup/objects/36/b45d8db59b21780b8032bc9ede8427fbfd6275 differ diff --git a/RockOS/.git-backup/objects/36/ce9f3b3eeea50c3719816ab8162b9274270ae4 b/RockOS/.git-backup/objects/36/ce9f3b3eeea50c3719816ab8162b9274270ae4 new file mode 100644 index 0000000..6f5db1f Binary files /dev/null and b/RockOS/.git-backup/objects/36/ce9f3b3eeea50c3719816ab8162b9274270ae4 differ diff --git a/RockOS/.git-backup/objects/36/e9951ec10687bd83d451a3ca42ab294d0ca68b b/RockOS/.git-backup/objects/36/e9951ec10687bd83d451a3ca42ab294d0ca68b new file mode 100644 index 0000000..5a1e8e2 Binary files /dev/null and b/RockOS/.git-backup/objects/36/e9951ec10687bd83d451a3ca42ab294d0ca68b differ diff --git a/RockOS/.git-backup/objects/37/1314d898ba333118524a76cd75806e977fb30b b/RockOS/.git-backup/objects/37/1314d898ba333118524a76cd75806e977fb30b new file mode 100644 index 0000000..271c44d --- /dev/null +++ b/RockOS/.git-backup/objects/37/1314d898ba333118524a76cd75806e977fb30b @@ -0,0 +1 @@ +xQK0}ί8Np혝>2]Qae"R6]Y2TnL-{wͅqyu~4*V5O+bE`k/0UK%BxnӰ{뎙^rc}Uh bJ^CPYbYɍ'Y@OV9it\{\ȵ’[YԞ{Je0IT |b~}O.[}R *q3Of(U-<6 "Wt]MwATlWP]^4̾c"Yb蛖*;MCO,4l"“=hj#>j7:3>sx~=EҢ$[#訫>tv-s ?7gzmN>)wsIB ]_5e7 5 lU 7|vm7 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/3b/8f6452ec5b0f992e623069de5014837d092a09 b/RockOS/.git-backup/objects/3b/8f6452ec5b0f992e623069de5014837d092a09 new file mode 100644 index 0000000..574982b Binary files /dev/null and b/RockOS/.git-backup/objects/3b/8f6452ec5b0f992e623069de5014837d092a09 differ diff --git a/RockOS/.git-backup/objects/3b/c29ea1411c046b5041b4f3e549f12eaa5f13e4 b/RockOS/.git-backup/objects/3b/c29ea1411c046b5041b4f3e549f12eaa5f13e4 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/3b/ca1c275d314900d2f73236e06a45174b2af267 b/RockOS/.git-backup/objects/3b/ca1c275d314900d2f73236e06a45174b2af267 new file mode 100644 index 0000000..74e2324 Binary files /dev/null and b/RockOS/.git-backup/objects/3b/ca1c275d314900d2f73236e06a45174b2af267 differ diff --git a/RockOS/.git-backup/objects/3c/539d9b54fd2c80f529543cf0c6c7ccac44590d b/RockOS/.git-backup/objects/3c/539d9b54fd2c80f529543cf0c6c7ccac44590d new file mode 100644 index 0000000..a488805 Binary files /dev/null and b/RockOS/.git-backup/objects/3c/539d9b54fd2c80f529543cf0c6c7ccac44590d differ diff --git a/RockOS/.git-backup/objects/3c/6fd8cb651389de9cc425b6893c5512f9447ed3 b/RockOS/.git-backup/objects/3c/6fd8cb651389de9cc425b6893c5512f9447ed3 new file mode 100644 index 0000000..b2a2cb1 --- /dev/null +++ b/RockOS/.git-backup/objects/3c/6fd8cb651389de9cc425b6893c5512f9447ed3 @@ -0,0 +1,2 @@ +x[ EUzU@3VԔiiA Mv?\JI$گى`3BimUs22Zq^ ۍ Epu1n")V*8V.faT"2R \ No newline at end of file diff --git a/RockOS/.git-backup/objects/3c/7683ab80f2b4fca1b66642a5a2cfdc8890e643 b/RockOS/.git-backup/objects/3c/7683ab80f2b4fca1b66642a5a2cfdc8890e643 new file mode 100644 index 0000000..62bc734 Binary files /dev/null and b/RockOS/.git-backup/objects/3c/7683ab80f2b4fca1b66642a5a2cfdc8890e643 differ diff --git a/RockOS/.git-backup/objects/3c/a959fbed99ebae378fdc592e4c335b0d552d7f b/RockOS/.git-backup/objects/3c/a959fbed99ebae378fdc592e4c335b0d552d7f new file mode 100644 index 0000000..5d57cf1 Binary files /dev/null and b/RockOS/.git-backup/objects/3c/a959fbed99ebae378fdc592e4c335b0d552d7f differ diff --git a/RockOS/.git-backup/objects/3d/082b3213db4162f37972f9da160afe9eb1e74e b/RockOS/.git-backup/objects/3d/082b3213db4162f37972f9da160afe9eb1e74e new file mode 100644 index 0000000..142b451 Binary files /dev/null and b/RockOS/.git-backup/objects/3d/082b3213db4162f37972f9da160afe9eb1e74e differ diff --git a/RockOS/.git-backup/objects/3d/1c376b2ecf5508f03f064c7c25d299a0bb5623 b/RockOS/.git-backup/objects/3d/1c376b2ecf5508f03f064c7c25d299a0bb5623 new file mode 100644 index 0000000..23352b4 Binary files /dev/null and b/RockOS/.git-backup/objects/3d/1c376b2ecf5508f03f064c7c25d299a0bb5623 differ diff --git a/RockOS/.git-backup/objects/3d/d028e761ace90d6b1b5d55ad12c90857db1e2f b/RockOS/.git-backup/objects/3d/d028e761ace90d6b1b5d55ad12c90857db1e2f new file mode 100644 index 0000000..73291d2 --- /dev/null +++ b/RockOS/.git-backup/objects/3d/d028e761ace90d6b1b5d55ad12c90857db1e2f @@ -0,0 +1,3 @@ +xmPN0쯰K+!D[8% (rdeP!7]Z[-:M,q_HCl +τ.j^7>oG@1~Wc%J! P`U][\cѽt+'1Op +YȐ3yW'>2Hn/}!K(c\^싚紞O \ No newline at end of file diff --git a/RockOS/.git-backup/objects/3d/d636e4fb1c3e5c08f479bae87e28690750d551 b/RockOS/.git-backup/objects/3d/d636e4fb1c3e5c08f479bae87e28690750d551 new file mode 100644 index 0000000..c654e63 Binary files /dev/null and b/RockOS/.git-backup/objects/3d/d636e4fb1c3e5c08f479bae87e28690750d551 differ diff --git a/RockOS/.git-backup/objects/3d/e51b14d0fa801e4ce52868775e9bd1754aa9fc b/RockOS/.git-backup/objects/3d/e51b14d0fa801e4ce52868775e9bd1754aa9fc new file mode 100644 index 0000000..fe0de63 Binary files /dev/null and b/RockOS/.git-backup/objects/3d/e51b14d0fa801e4ce52868775e9bd1754aa9fc differ diff --git a/RockOS/.git-backup/objects/3e/32c191f38aea6a32bf022b67cc0418d25c3a44 b/RockOS/.git-backup/objects/3e/32c191f38aea6a32bf022b67cc0418d25c3a44 new file mode 100644 index 0000000..f43d231 Binary files /dev/null and b/RockOS/.git-backup/objects/3e/32c191f38aea6a32bf022b67cc0418d25c3a44 differ diff --git a/RockOS/.git-backup/objects/3e/593021d2055fc60d52052909ee83eb9f1ffb12 b/RockOS/.git-backup/objects/3e/593021d2055fc60d52052909ee83eb9f1ffb12 new file mode 100644 index 0000000..e0346c6 Binary files /dev/null and b/RockOS/.git-backup/objects/3e/593021d2055fc60d52052909ee83eb9f1ffb12 differ diff --git a/RockOS/.git-backup/objects/3e/98ae8e6219dca9f420ed2102a6cd7bda5ae511 b/RockOS/.git-backup/objects/3e/98ae8e6219dca9f420ed2102a6cd7bda5ae511 new file mode 100644 index 0000000..c598d28 --- /dev/null +++ b/RockOS/.git-backup/objects/3e/98ae8e6219dca9f420ed2102a6cd7bda5ae511 @@ -0,0 +1,2 @@ +xPj0 _!% a``n;VZGڱ~knzOs~ꮰ}jT%bTaIAxa1᰹e[z)' +8:gl||0JcS#$mFpjݭQE=٨mW5?ƔŗZl*"4 -z-}e.?{业?Էy[w5cJU/ꖉ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/3e/b9dc9f76f37c32d3ddb866fa744e53e0524c36 b/RockOS/.git-backup/objects/3e/b9dc9f76f37c32d3ddb866fa744e53e0524c36 new file mode 100644 index 0000000..9d18318 Binary files /dev/null and b/RockOS/.git-backup/objects/3e/b9dc9f76f37c32d3ddb866fa744e53e0524c36 differ diff --git a/RockOS/.git-backup/objects/3f/1780ab95e201b04c8a2398e0e4da9a52d197b1 b/RockOS/.git-backup/objects/3f/1780ab95e201b04c8a2398e0e4da9a52d197b1 new file mode 100644 index 0000000..accc745 Binary files /dev/null and b/RockOS/.git-backup/objects/3f/1780ab95e201b04c8a2398e0e4da9a52d197b1 differ diff --git a/RockOS/.git-backup/objects/3f/558dfe87e46bd74a7f75f52fd41b781f2979b5 b/RockOS/.git-backup/objects/3f/558dfe87e46bd74a7f75f52fd41b781f2979b5 new file mode 100644 index 0000000..5fe2608 Binary files /dev/null and b/RockOS/.git-backup/objects/3f/558dfe87e46bd74a7f75f52fd41b781f2979b5 differ diff --git a/RockOS/.git-backup/objects/3f/a4ecb3019ea7763f0df5f9feffa0b030a058d0 b/RockOS/.git-backup/objects/3f/a4ecb3019ea7763f0df5f9feffa0b030a058d0 new file mode 100644 index 0000000..ac9b5e7 Binary files /dev/null and b/RockOS/.git-backup/objects/3f/a4ecb3019ea7763f0df5f9feffa0b030a058d0 differ diff --git a/RockOS/.git-backup/objects/40/21774aa39cc53aee7d062bae73eb45f657c6d8 b/RockOS/.git-backup/objects/40/21774aa39cc53aee7d062bae73eb45f657c6d8 new file mode 100644 index 0000000..12bdc00 Binary files /dev/null and b/RockOS/.git-backup/objects/40/21774aa39cc53aee7d062bae73eb45f657c6d8 differ diff --git a/RockOS/.git-backup/objects/40/397ad7d5562213371687f458ce06d665e75161 b/RockOS/.git-backup/objects/40/397ad7d5562213371687f458ce06d665e75161 new file mode 100644 index 0000000..7b8bb4e Binary files /dev/null and b/RockOS/.git-backup/objects/40/397ad7d5562213371687f458ce06d665e75161 differ diff --git a/RockOS/.git-backup/objects/40/3f135694dfa2a0c56d405b97723264ed63139b b/RockOS/.git-backup/objects/40/3f135694dfa2a0c56d405b97723264ed63139b new file mode 100644 index 0000000..6f8fb5a --- /dev/null +++ b/RockOS/.git-backup/objects/40/3f135694dfa2a0c56d405b97723264ed63139b @@ -0,0 +1,4 @@ +x +0=)r""APA'dcFDz?3ԭ\/',p,d +Ihvf/D@1b +tSuE#"qX*EQ 00BZGxѦ<Yc% ' Vl \ No newline at end of file diff --git a/RockOS/.git-backup/objects/40/4413a7a5c76ee72a9f1d98492f0b0c3c51be52 b/RockOS/.git-backup/objects/40/4413a7a5c76ee72a9f1d98492f0b0c3c51be52 new file mode 100644 index 0000000..56a1d11 Binary files /dev/null and b/RockOS/.git-backup/objects/40/4413a7a5c76ee72a9f1d98492f0b0c3c51be52 differ diff --git a/RockOS/.git-backup/objects/40/e6a563a2230968b6dd1161d86ff29c7b59e497 b/RockOS/.git-backup/objects/40/e6a563a2230968b6dd1161d86ff29c7b59e497 new file mode 100644 index 0000000..61c6339 Binary files /dev/null and b/RockOS/.git-backup/objects/40/e6a563a2230968b6dd1161d86ff29c7b59e497 differ diff --git a/RockOS/.git-backup/objects/41/0fb50975c395762abecfe8f5871b7c8c9c6215 b/RockOS/.git-backup/objects/41/0fb50975c395762abecfe8f5871b7c8c9c6215 new file mode 100644 index 0000000..4f5713c Binary files /dev/null and b/RockOS/.git-backup/objects/41/0fb50975c395762abecfe8f5871b7c8c9c6215 differ diff --git a/RockOS/.git-backup/objects/41/12176dd1e66ef9aa1033e8e125f416ee231b7e b/RockOS/.git-backup/objects/41/12176dd1e66ef9aa1033e8e125f416ee231b7e new file mode 100644 index 0000000..dcab917 Binary files /dev/null and b/RockOS/.git-backup/objects/41/12176dd1e66ef9aa1033e8e125f416ee231b7e differ diff --git a/RockOS/.git-backup/objects/41/1345060dd4c0bef249f56bb480f45888620565 b/RockOS/.git-backup/objects/41/1345060dd4c0bef249f56bb480f45888620565 new file mode 100644 index 0000000..d101701 Binary files /dev/null and b/RockOS/.git-backup/objects/41/1345060dd4c0bef249f56bb480f45888620565 differ diff --git a/RockOS/.git-backup/objects/41/4375cf2e6c6f5647f95c5810724cd55e34cb58 b/RockOS/.git-backup/objects/41/4375cf2e6c6f5647f95c5810724cd55e34cb58 new file mode 100644 index 0000000..8bbae55 Binary files /dev/null and b/RockOS/.git-backup/objects/41/4375cf2e6c6f5647f95c5810724cd55e34cb58 differ diff --git a/RockOS/.git-backup/objects/41/7bc3094dd23dd2ba024bbec2431d9b75ac2d7d b/RockOS/.git-backup/objects/41/7bc3094dd23dd2ba024bbec2431d9b75ac2d7d new file mode 100644 index 0000000..89648e2 Binary files /dev/null and b/RockOS/.git-backup/objects/41/7bc3094dd23dd2ba024bbec2431d9b75ac2d7d differ diff --git a/RockOS/.git-backup/objects/41/88c02e6d93a0015e4e4ef0ba5e27449e8c4de6 b/RockOS/.git-backup/objects/41/88c02e6d93a0015e4e4ef0ba5e27449e8c4de6 new file mode 100644 index 0000000..e8ee9d4 Binary files /dev/null and b/RockOS/.git-backup/objects/41/88c02e6d93a0015e4e4ef0ba5e27449e8c4de6 differ diff --git a/RockOS/.git-backup/objects/41/a18a7b8f5b0ae5c8103dd248a325b7ae238ffc b/RockOS/.git-backup/objects/41/a18a7b8f5b0ae5c8103dd248a325b7ae238ffc new file mode 100644 index 0000000..5171a95 --- /dev/null +++ b/RockOS/.git-backup/objects/41/a18a7b8f5b0ae5c8103dd248a325b7ae238ffc @@ -0,0 +1,2 @@ +xRj1z"dA+.$Ir%P4)EsܜHCMeg·ɢ>%vhAy +v'I[MCn]GY.CG/2`֡w7K 87T1 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/43/bc0df81a8755b46f7062263c6063319353d5f1 b/RockOS/.git-backup/objects/43/bc0df81a8755b46f7062263c6063319353d5f1 new file mode 100644 index 0000000..3f0ac4c Binary files /dev/null and b/RockOS/.git-backup/objects/43/bc0df81a8755b46f7062263c6063319353d5f1 differ diff --git a/RockOS/.git-backup/objects/44/4456d1312889cd0d2e7b67818834f656f547ff b/RockOS/.git-backup/objects/44/4456d1312889cd0d2e7b67818834f656f547ff new file mode 100644 index 0000000..ba50014 --- /dev/null +++ b/RockOS/.git-backup/objects/44/4456d1312889cd0d2e7b67818834f656f547ff @@ -0,0 +1,2 @@ +x5 +0S|b'(\mk\?MXWl|x-6OY8Oo[`L\ lF5j$DPÆ1rwB81dJ7=x<tAL*8_̍$ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/44/51bbf1973099cd098825c9f4ba87c15657bc36 b/RockOS/.git-backup/objects/44/51bbf1973099cd098825c9f4ba87c15657bc36 new file mode 100644 index 0000000..3eb6b6b Binary files /dev/null and b/RockOS/.git-backup/objects/44/51bbf1973099cd098825c9f4ba87c15657bc36 differ diff --git a/RockOS/.git-backup/objects/44/5da067cc9bd587322d2a66b47d076e68f43150 b/RockOS/.git-backup/objects/44/5da067cc9bd587322d2a66b47d076e68f43150 new file mode 100644 index 0000000..b4dc88d Binary files /dev/null and b/RockOS/.git-backup/objects/44/5da067cc9bd587322d2a66b47d076e68f43150 differ diff --git a/RockOS/.git-backup/objects/44/fbbcc91df1192e883997185337641933ef1606 b/RockOS/.git-backup/objects/44/fbbcc91df1192e883997185337641933ef1606 new file mode 100644 index 0000000..430a3a4 Binary files /dev/null and b/RockOS/.git-backup/objects/44/fbbcc91df1192e883997185337641933ef1606 differ diff --git a/RockOS/.git-backup/objects/45/30658ce786a47309a704fc74d39dd44eb1ac2a b/RockOS/.git-backup/objects/45/30658ce786a47309a704fc74d39dd44eb1ac2a new file mode 100644 index 0000000..f08a996 Binary files /dev/null and b/RockOS/.git-backup/objects/45/30658ce786a47309a704fc74d39dd44eb1ac2a differ diff --git a/RockOS/.git-backup/objects/45/4de8feed8e1ff633dd40a31317d4500f4b1221 b/RockOS/.git-backup/objects/45/4de8feed8e1ff633dd40a31317d4500f4b1221 new file mode 100644 index 0000000..e5a89c3 --- /dev/null +++ b/RockOS/.git-backup/objects/45/4de8feed8e1ff633dd40a31317d4500f4b1221 @@ -0,0 +1 @@ +xAj0@Ѯu@HD2z5ҌkbYEQ)}#tϭmet.6.r,f%8r^Z1_1rPaf"KNXfE'ʄɝbTنȤ:=sMv]֚}ʭ #) "!>4?c`WPڊOi2MW \ No newline at end of file diff --git a/RockOS/.git-backup/objects/45/6d8c2187f895c0a5747ac6547495e06728a570 b/RockOS/.git-backup/objects/45/6d8c2187f895c0a5747ac6547495e06728a570 new file mode 100644 index 0000000..b7eb944 Binary files /dev/null and b/RockOS/.git-backup/objects/45/6d8c2187f895c0a5747ac6547495e06728a570 differ diff --git a/RockOS/.git-backup/objects/45/8772b5c2dc185a5f4cfc827f1f462b937896fa b/RockOS/.git-backup/objects/45/8772b5c2dc185a5f4cfc827f1f462b937896fa new file mode 100644 index 0000000..4b8ffe6 Binary files /dev/null and b/RockOS/.git-backup/objects/45/8772b5c2dc185a5f4cfc827f1f462b937896fa differ diff --git a/RockOS/.git-backup/objects/45/e11dce678c50d73dfedc695255949dbc3e47cc b/RockOS/.git-backup/objects/45/e11dce678c50d73dfedc695255949dbc3e47cc new file mode 100644 index 0000000..f6601ca Binary files /dev/null and b/RockOS/.git-backup/objects/45/e11dce678c50d73dfedc695255949dbc3e47cc differ diff --git a/RockOS/.git-backup/objects/45/ed218623dcdea9834f2f91a1801bfd4295e924 b/RockOS/.git-backup/objects/45/ed218623dcdea9834f2f91a1801bfd4295e924 new file mode 100644 index 0000000..9c35569 --- /dev/null +++ b/RockOS/.git-backup/objects/45/ed218623dcdea9834f2f91a1801bfd4295e924 @@ -0,0 +1,2 @@ +xmA +0E]nZ֝ƍ GdBII&P]7;߫td٠U[4Y>Gb!YN]2.Q k<afB$ym ?Uu,@zVc:&͎xkA7j)b(KЉ @Q()pȑ +TA \ No newline at end of file diff --git a/RockOS/.git-backup/objects/46/0a21610bf67fe3ed3328e52cbf45352f3bc670 b/RockOS/.git-backup/objects/46/0a21610bf67fe3ed3328e52cbf45352f3bc670 new file mode 100644 index 0000000..c99bf51 Binary files /dev/null and b/RockOS/.git-backup/objects/46/0a21610bf67fe3ed3328e52cbf45352f3bc670 differ diff --git a/RockOS/.git-backup/objects/46/6901c3996391766fc8459bf50b385fe0b4fed7 b/RockOS/.git-backup/objects/46/6901c3996391766fc8459bf50b385fe0b4fed7 new file mode 100644 index 0000000..2d8b4ec Binary files /dev/null and b/RockOS/.git-backup/objects/46/6901c3996391766fc8459bf50b385fe0b4fed7 differ diff --git a/RockOS/.git-backup/objects/46/d98e734727b6dbedd4d873a1fe97fb58fb79f8 b/RockOS/.git-backup/objects/46/d98e734727b6dbedd4d873a1fe97fb58fb79f8 new file mode 100644 index 0000000..f0f6a7d Binary files /dev/null and b/RockOS/.git-backup/objects/46/d98e734727b6dbedd4d873a1fe97fb58fb79f8 differ diff --git a/RockOS/.git-backup/objects/47/1f792e3b601ec735b6d4935dff842622e730ac b/RockOS/.git-backup/objects/47/1f792e3b601ec735b6d4935dff842622e730ac new file mode 100644 index 0000000..cdb390d Binary files /dev/null and b/RockOS/.git-backup/objects/47/1f792e3b601ec735b6d4935dff842622e730ac differ diff --git a/RockOS/.git-backup/objects/47/273f2f0c1cec87c9517073f2a2fcd3915acb9e b/RockOS/.git-backup/objects/47/273f2f0c1cec87c9517073f2a2fcd3915acb9e new file mode 100644 index 0000000..a255055 --- /dev/null +++ b/RockOS/.git-backup/objects/47/273f2f0c1cec87c9517073f2a2fcd3915acb9e @@ -0,0 +1 @@ +x+)JMU06e040031Q(,H-`p]?w-7O% \ No newline at end of file diff --git a/RockOS/.git-backup/objects/48/6a55b23406198d13224c822010c9e296ff0004 b/RockOS/.git-backup/objects/48/6a55b23406198d13224c822010c9e296ff0004 new file mode 100644 index 0000000..0081f06 --- /dev/null +++ b/RockOS/.git-backup/objects/48/6a55b23406198d13224c822010c9e296ff0004 @@ -0,0 +1 @@ +xTO0y}( 1|0~%F11l3'ӕ;X27KEB^wc$e"9bTY4 $I |Aoag߅ev%6jL @qL^gyq#pNC[_%r=p<erU%2-$|4m+s5} *EVMGs6Pus8xFCȺnZu#>iyJX* lJeTO׸eKn/Û|:xo@_e9=(Ѝ6*y8h,MDaTg2X[iʔ4L܏/Le"Sk_[m /n67zeA M{Ǻ"> i:~l5/9QtQW`'Q<Uc/{a*O7l \ No newline at end of file diff --git a/RockOS/.git-backup/objects/48/708d012fe50e01840fde491a20c83a623690c3 b/RockOS/.git-backup/objects/48/708d012fe50e01840fde491a20c83a623690c3 new file mode 100644 index 0000000..67b03a4 Binary files /dev/null and b/RockOS/.git-backup/objects/48/708d012fe50e01840fde491a20c83a623690c3 differ diff --git a/RockOS/.git-backup/objects/48/712466c6a872ad8af176f3dd9ab42d863bf7c2 b/RockOS/.git-backup/objects/48/712466c6a872ad8af176f3dd9ab42d863bf7c2 new file mode 100644 index 0000000..1d6ab9a --- /dev/null +++ b/RockOS/.git-backup/objects/48/712466c6a872ad8af176f3dd9ab42d863bf7c2 @@ -0,0 +1 @@ +x]K0ίxnD9Aaͫ!h~7uC6Esprs&IT2zxR"CBHˆ7Y %WP9l1RQU,$FDf~\W$/u,-`jCT*kXfAih cHj[<철ؾiYgt/⒂x|<3RBQ&w4b)HikXao' 3\ёc)XP#4-Bs[kIDY(!!ND^]G-:bkfw^֫Ӷ%j668?A1| 0S{4ĉ~G0Y{|La2}w, \ No newline at end of file diff --git a/RockOS/.git-backup/objects/48/c1ad8bb97067eb971bd3aed1a4b2a9457995ff b/RockOS/.git-backup/objects/48/c1ad8bb97067eb971bd3aed1a4b2a9457995ff new file mode 100644 index 0000000..09b5ad4 Binary files /dev/null and b/RockOS/.git-backup/objects/48/c1ad8bb97067eb971bd3aed1a4b2a9457995ff differ diff --git a/RockOS/.git-backup/objects/48/df965268e6f964bc608bd3ec3cab97e38ea4aa b/RockOS/.git-backup/objects/48/df965268e6f964bc608bd3ec3cab97e38ea4aa new file mode 100644 index 0000000..f6a4037 --- /dev/null +++ b/RockOS/.git-backup/objects/48/df965268e6f964bc608bd3ec3cab97e38ea4aa @@ -0,0 +1,2 @@ +xQj E*fDFneƌvt ;\8Z)i̠ڲE^T4+:*ƄES+uYfúl+HJ-SD^uge |TpjQ0OSMKx,fYĽ}os +WM1cb0x^Ow5 ;dO8Z6 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/49/2d57740cb9917dbad3da9eaa15684661a49110 b/RockOS/.git-backup/objects/49/2d57740cb9917dbad3da9eaa15684661a49110 new file mode 100644 index 0000000..48244aa Binary files /dev/null and b/RockOS/.git-backup/objects/49/2d57740cb9917dbad3da9eaa15684661a49110 differ diff --git a/RockOS/.git-backup/objects/49/33f0ed21ec2800c8fdd33fdcb6bc90cb596dd6 b/RockOS/.git-backup/objects/49/33f0ed21ec2800c8fdd33fdcb6bc90cb596dd6 new file mode 100644 index 0000000..7977323 Binary files /dev/null and b/RockOS/.git-backup/objects/49/33f0ed21ec2800c8fdd33fdcb6bc90cb596dd6 differ diff --git a/RockOS/.git-backup/objects/49/4e1c58b74f066f71f5de97b32310a8c6053781 b/RockOS/.git-backup/objects/49/4e1c58b74f066f71f5de97b32310a8c6053781 new file mode 100644 index 0000000..33315ff Binary files /dev/null and b/RockOS/.git-backup/objects/49/4e1c58b74f066f71f5de97b32310a8c6053781 differ diff --git a/RockOS/.git-backup/objects/49/5162c193201cb3c36787ff23f6fd47f69755e5 b/RockOS/.git-backup/objects/49/5162c193201cb3c36787ff23f6fd47f69755e5 new file mode 100644 index 0000000..257245a Binary files /dev/null and b/RockOS/.git-backup/objects/49/5162c193201cb3c36787ff23f6fd47f69755e5 differ diff --git a/RockOS/.git-backup/objects/49/712d72a0e63239bd1d2287b96346939b8ef3a6 b/RockOS/.git-backup/objects/49/712d72a0e63239bd1d2287b96346939b8ef3a6 new file mode 100644 index 0000000..c94c1f4 Binary files /dev/null and b/RockOS/.git-backup/objects/49/712d72a0e63239bd1d2287b96346939b8ef3a6 differ diff --git a/RockOS/.git-backup/objects/49/74d3d08980539a874ec700830a2625a1cfc51f b/RockOS/.git-backup/objects/49/74d3d08980539a874ec700830a2625a1cfc51f new file mode 100644 index 0000000..64e8f9a Binary files /dev/null and b/RockOS/.git-backup/objects/49/74d3d08980539a874ec700830a2625a1cfc51f differ diff --git a/RockOS/.git-backup/objects/49/b7a2512c6302a3962164b3d2a7206dc246768a b/RockOS/.git-backup/objects/49/b7a2512c6302a3962164b3d2a7206dc246768a new file mode 100644 index 0000000..2826a24 Binary files /dev/null and b/RockOS/.git-backup/objects/49/b7a2512c6302a3962164b3d2a7206dc246768a differ diff --git a/RockOS/.git-backup/objects/49/cb2205d0217c5a3d40a9d7b0a81e9e385a49a9 b/RockOS/.git-backup/objects/49/cb2205d0217c5a3d40a9d7b0a81e9e385a49a9 new file mode 100644 index 0000000..2fdefe7 Binary files /dev/null and b/RockOS/.git-backup/objects/49/cb2205d0217c5a3d40a9d7b0a81e9e385a49a9 differ diff --git a/RockOS/.git-backup/objects/49/d5d2e91ab4ab830832b298b6dfeeccaf1c773e b/RockOS/.git-backup/objects/49/d5d2e91ab4ab830832b298b6dfeeccaf1c773e new file mode 100644 index 0000000..350df34 Binary files /dev/null and b/RockOS/.git-backup/objects/49/d5d2e91ab4ab830832b298b6dfeeccaf1c773e differ diff --git a/RockOS/.git-backup/objects/4a/073813e00e19b781e98918c89409052817714b b/RockOS/.git-backup/objects/4a/073813e00e19b781e98918c89409052817714b new file mode 100644 index 0000000..712e7eb Binary files /dev/null and b/RockOS/.git-backup/objects/4a/073813e00e19b781e98918c89409052817714b differ diff --git a/RockOS/.git-backup/objects/4a/12ca187d443d37f99d177ec839a52ab78dff98 b/RockOS/.git-backup/objects/4a/12ca187d443d37f99d177ec839a52ab78dff98 new file mode 100644 index 0000000..9bc3571 Binary files /dev/null and b/RockOS/.git-backup/objects/4a/12ca187d443d37f99d177ec839a52ab78dff98 differ diff --git a/RockOS/.git-backup/objects/4a/1c4f8cc2edf4f95558a23846ce4947ea481f1b b/RockOS/.git-backup/objects/4a/1c4f8cc2edf4f95558a23846ce4947ea481f1b new file mode 100644 index 0000000..cb0aabe Binary files /dev/null and b/RockOS/.git-backup/objects/4a/1c4f8cc2edf4f95558a23846ce4947ea481f1b differ diff --git a/RockOS/.git-backup/objects/4a/2893175992db18ab85a55dd50966b60ad51433 b/RockOS/.git-backup/objects/4a/2893175992db18ab85a55dd50966b60ad51433 new file mode 100644 index 0000000..8474a50 Binary files /dev/null and b/RockOS/.git-backup/objects/4a/2893175992db18ab85a55dd50966b60ad51433 differ diff --git a/RockOS/.git-backup/objects/4a/567c25612ca887665ff2b25b49af7c90bab688 b/RockOS/.git-backup/objects/4a/567c25612ca887665ff2b25b49af7c90bab688 new file mode 100644 index 0000000..dd17358 --- /dev/null +++ b/RockOS/.git-backup/objects/4a/567c25612ca887665ff2b25b49af7c90bab688 @@ -0,0 +1 @@ +x+)JMU03c040031QLIKfl]gܶk$ \kT; 7=g :7DGӄKqIzY$t8̵_;.6@7O'vPo-'}-2U*J9QB^p<"#tN\5 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/51/05aa220e621d15a2094519ec3810e28f9758f9 b/RockOS/.git-backup/objects/51/05aa220e621d15a2094519ec3810e28f9758f9 new file mode 100644 index 0000000..d4b52d8 Binary files /dev/null and b/RockOS/.git-backup/objects/51/05aa220e621d15a2094519ec3810e28f9758f9 differ diff --git a/RockOS/.git-backup/objects/51/585afdb3d4d8de785f4bfa6cdbe798de6c1fd8 b/RockOS/.git-backup/objects/51/585afdb3d4d8de785f4bfa6cdbe798de6c1fd8 new file mode 100644 index 0000000..1322bf0 Binary files /dev/null and b/RockOS/.git-backup/objects/51/585afdb3d4d8de785f4bfa6cdbe798de6c1fd8 differ diff --git a/RockOS/.git-backup/objects/51/a4cb8c77770ff368c68a121296fb268730e362 b/RockOS/.git-backup/objects/51/a4cb8c77770ff368c68a121296fb268730e362 new file mode 100644 index 0000000..f4ecc22 Binary files /dev/null and b/RockOS/.git-backup/objects/51/a4cb8c77770ff368c68a121296fb268730e362 differ diff --git a/RockOS/.git-backup/objects/52/2f161caf19b692a4cc89d2ab129889dcc3936f b/RockOS/.git-backup/objects/52/2f161caf19b692a4cc89d2ab129889dcc3936f new file mode 100644 index 0000000..d4bec83 --- /dev/null +++ b/RockOS/.git-backup/objects/52/2f161caf19b692a4cc89d2ab129889dcc3936f @@ -0,0 +1,4 @@ +xmA0{ίxe/ BaO-(ja{LbKljUדt{<|oN9w)*erG^rK4MDczHR`ߜ*cmj4Vة~ +${ak2-^3ԦPu a,(V/=~J<Ϋ|9-?5eH +ԅ8lE{!w{0*qQ[c:V!",c*o5=_0??+gU2нF \[/ I.(EX_Vɖ(->ǚ o!+-ibkLon҃sZN-7 D38򮵄K<zKs?}> Bu̴L#d(=K`=VǑ0'8Bi&RgL1_w9b96'+`m=qF`+HRKL\ +5/zXl39ۅŘ^V xڷ KI & \ No newline at end of file diff --git a/RockOS/.git-backup/objects/57/0eefd1041f2542762b968ba27594cdca244676 b/RockOS/.git-backup/objects/57/0eefd1041f2542762b968ba27594cdca244676 new file mode 100644 index 0000000..7555dde Binary files /dev/null and b/RockOS/.git-backup/objects/57/0eefd1041f2542762b968ba27594cdca244676 differ diff --git a/RockOS/.git-backup/objects/57/14aea25816586ff28458733f4683fcff9e3b09 b/RockOS/.git-backup/objects/57/14aea25816586ff28458733f4683fcff9e3b09 new file mode 100644 index 0000000..2400613 Binary files /dev/null and b/RockOS/.git-backup/objects/57/14aea25816586ff28458733f4683fcff9e3b09 differ diff --git a/RockOS/.git-backup/objects/57/35e048fd6b1dd8268337ac233800dcabba34ba b/RockOS/.git-backup/objects/57/35e048fd6b1dd8268337ac233800dcabba34ba new file mode 100644 index 0000000..7acc84a Binary files /dev/null and b/RockOS/.git-backup/objects/57/35e048fd6b1dd8268337ac233800dcabba34ba differ diff --git a/RockOS/.git-backup/objects/57/d7d34c6d797b9ceef5de13091eeb56ff8e2eac b/RockOS/.git-backup/objects/57/d7d34c6d797b9ceef5de13091eeb56ff8e2eac new file mode 100644 index 0000000..9ca3925 --- /dev/null +++ b/RockOS/.git-backup/objects/57/d7d34c6d797b9ceef5de13091eeb56ff8e2eac @@ -0,0 +1 @@ +xA! @QלP1^eN;Wp[8G Q1XNH'kJY͛W]0YLxVX(IJDʓ 6ϾV%k[_s=n!:!ђfi}UZ{m|J1?>G \ No newline at end of file diff --git a/RockOS/.git-backup/objects/57/e48054139c2bd7bd0bf8591e95d701759e9570 b/RockOS/.git-backup/objects/57/e48054139c2bd7bd0bf8591e95d701759e9570 new file mode 100644 index 0000000..e10ea2a Binary files /dev/null and b/RockOS/.git-backup/objects/57/e48054139c2bd7bd0bf8591e95d701759e9570 differ diff --git a/RockOS/.git-backup/objects/57/f6256626bbacd4ec3460ebfa71abff161a3fd1 b/RockOS/.git-backup/objects/57/f6256626bbacd4ec3460ebfa71abff161a3fd1 new file mode 100644 index 0000000..c69ab30 Binary files /dev/null and b/RockOS/.git-backup/objects/57/f6256626bbacd4ec3460ebfa71abff161a3fd1 differ diff --git a/RockOS/.git-backup/objects/58/38a1b2a0fb9a6be0c1922cb44663f16b452163 b/RockOS/.git-backup/objects/58/38a1b2a0fb9a6be0c1922cb44663f16b452163 new file mode 100644 index 0000000..3cb6e9b Binary files /dev/null and b/RockOS/.git-backup/objects/58/38a1b2a0fb9a6be0c1922cb44663f16b452163 differ diff --git a/RockOS/.git-backup/objects/58/7e6da2111daf161a8feeee7279ecbe1abbd94a b/RockOS/.git-backup/objects/58/7e6da2111daf161a8feeee7279ecbe1abbd94a new file mode 100644 index 0000000..6203c02 Binary files /dev/null and b/RockOS/.git-backup/objects/58/7e6da2111daf161a8feeee7279ecbe1abbd94a differ diff --git a/RockOS/.git-backup/objects/58/fa469e44ed80e440907d20b62e31d737c4d9de b/RockOS/.git-backup/objects/58/fa469e44ed80e440907d20b62e31d737c4d9de new file mode 100644 index 0000000..30485c7 Binary files /dev/null and b/RockOS/.git-backup/objects/58/fa469e44ed80e440907d20b62e31d737c4d9de differ diff --git a/RockOS/.git-backup/objects/59/b6299c2e3c6e622c9de9e02a8e55221399ce50 b/RockOS/.git-backup/objects/59/b6299c2e3c6e622c9de9e02a8e55221399ce50 new file mode 100644 index 0000000..3aa7f67 Binary files /dev/null and b/RockOS/.git-backup/objects/59/b6299c2e3c6e622c9de9e02a8e55221399ce50 differ diff --git a/RockOS/.git-backup/objects/59/d7b8f36793a15f6c3b22ca5494d5b86942fc37 b/RockOS/.git-backup/objects/59/d7b8f36793a15f6c3b22ca5494d5b86942fc37 new file mode 100644 index 0000000..1cfd5cf Binary files /dev/null and b/RockOS/.git-backup/objects/59/d7b8f36793a15f6c3b22ca5494d5b86942fc37 differ diff --git a/RockOS/.git-backup/objects/59/f6303b450fe85cd4c2600f3fa2a2cfba3cd3ca b/RockOS/.git-backup/objects/59/f6303b450fe85cd4c2600f3fa2a2cfba3cd3ca new file mode 100644 index 0000000..cff3a07 Binary files /dev/null and b/RockOS/.git-backup/objects/59/f6303b450fe85cd4c2600f3fa2a2cfba3cd3ca differ diff --git a/RockOS/.git-backup/objects/5a/1db77097ab4fbbd1d7a47553e211b4a1ce3b64 b/RockOS/.git-backup/objects/5a/1db77097ab4fbbd1d7a47553e211b4a1ce3b64 new file mode 100644 index 0000000..803c977 Binary files /dev/null and b/RockOS/.git-backup/objects/5a/1db77097ab4fbbd1d7a47553e211b4a1ce3b64 differ diff --git a/RockOS/.git-backup/objects/5a/2511ee412c8f2b93f2547eb0c755480f2cd04f b/RockOS/.git-backup/objects/5a/2511ee412c8f2b93f2547eb0c755480f2cd04f new file mode 100644 index 0000000..3dac6af Binary files /dev/null and b/RockOS/.git-backup/objects/5a/2511ee412c8f2b93f2547eb0c755480f2cd04f differ diff --git a/RockOS/.git-backup/objects/5a/65882a74a209f54787e917fd0f61e307a30cef b/RockOS/.git-backup/objects/5a/65882a74a209f54787e917fd0f61e307a30cef new file mode 100644 index 0000000..ffe83a8 Binary files /dev/null and b/RockOS/.git-backup/objects/5a/65882a74a209f54787e917fd0f61e307a30cef differ diff --git a/RockOS/.git-backup/objects/5a/7e9d5d84f9faf5b4a0894064de7af3e95a9ce8 b/RockOS/.git-backup/objects/5a/7e9d5d84f9faf5b4a0894064de7af3e95a9ce8 new file mode 100644 index 0000000..78d9467 Binary files /dev/null and b/RockOS/.git-backup/objects/5a/7e9d5d84f9faf5b4a0894064de7af3e95a9ce8 differ diff --git a/RockOS/.git-backup/objects/5a/8dc6cc431235ac2a80d748f09a2f835c7c6569 b/RockOS/.git-backup/objects/5a/8dc6cc431235ac2a80d748f09a2f835c7c6569 new file mode 100644 index 0000000..9ad0925 Binary files /dev/null and b/RockOS/.git-backup/objects/5a/8dc6cc431235ac2a80d748f09a2f835c7c6569 differ diff --git a/RockOS/.git-backup/objects/5a/9d42fee8fcdf41746560ee573d27065043b5c2 b/RockOS/.git-backup/objects/5a/9d42fee8fcdf41746560ee573d27065043b5c2 new file mode 100644 index 0000000..276cbb5 Binary files /dev/null and b/RockOS/.git-backup/objects/5a/9d42fee8fcdf41746560ee573d27065043b5c2 differ diff --git a/RockOS/.git-backup/objects/5c/235119138ac921d86731c213ef46a543dda212 b/RockOS/.git-backup/objects/5c/235119138ac921d86731c213ef46a543dda212 new file mode 100644 index 0000000..556824c Binary files /dev/null and b/RockOS/.git-backup/objects/5c/235119138ac921d86731c213ef46a543dda212 differ diff --git a/RockOS/.git-backup/objects/5c/332afd25fdc37f42447e462c84fa48d6d3b61c b/RockOS/.git-backup/objects/5c/332afd25fdc37f42447e462c84fa48d6d3b61c new file mode 100644 index 0000000..f1523b6 Binary files /dev/null and b/RockOS/.git-backup/objects/5c/332afd25fdc37f42447e462c84fa48d6d3b61c differ diff --git a/RockOS/.git-backup/objects/5c/7febbbf0de9ca0d3f02efb50a2688f14b17d75 b/RockOS/.git-backup/objects/5c/7febbbf0de9ca0d3f02efb50a2688f14b17d75 new file mode 100644 index 0000000..ac21e1c Binary files /dev/null and b/RockOS/.git-backup/objects/5c/7febbbf0de9ca0d3f02efb50a2688f14b17d75 differ diff --git a/RockOS/.git-backup/objects/5c/d869028e4804cfe988b122ebf8c77716e4b587 b/RockOS/.git-backup/objects/5c/d869028e4804cfe988b122ebf8c77716e4b587 new file mode 100644 index 0000000..6d63353 Binary files /dev/null and b/RockOS/.git-backup/objects/5c/d869028e4804cfe988b122ebf8c77716e4b587 differ diff --git a/RockOS/.git-backup/objects/5c/f5f3d08797184e924fb835c05fdd8419c8c8f7 b/RockOS/.git-backup/objects/5c/f5f3d08797184e924fb835c05fdd8419c8c8f7 new file mode 100644 index 0000000..f356834 Binary files /dev/null and b/RockOS/.git-backup/objects/5c/f5f3d08797184e924fb835c05fdd8419c8c8f7 differ diff --git a/RockOS/.git-backup/objects/5d/0c2fbd70090b8f9fd1f8c71dff11de51aec5fe b/RockOS/.git-backup/objects/5d/0c2fbd70090b8f9fd1f8c71dff11de51aec5fe new file mode 100644 index 0000000..462fe77 Binary files /dev/null and b/RockOS/.git-backup/objects/5d/0c2fbd70090b8f9fd1f8c71dff11de51aec5fe differ diff --git a/RockOS/.git-backup/objects/5d/3e795722de85ce1112f2071d6495e44179c808 b/RockOS/.git-backup/objects/5d/3e795722de85ce1112f2071d6495e44179c808 new file mode 100644 index 0000000..45daa59 Binary files /dev/null and b/RockOS/.git-backup/objects/5d/3e795722de85ce1112f2071d6495e44179c808 differ diff --git a/RockOS/.git-backup/objects/5d/502c8df69b88cc7a1edb101252dc770ad018fe b/RockOS/.git-backup/objects/5d/502c8df69b88cc7a1edb101252dc770ad018fe new file mode 100644 index 0000000..ac8082c Binary files /dev/null and b/RockOS/.git-backup/objects/5d/502c8df69b88cc7a1edb101252dc770ad018fe differ diff --git a/RockOS/.git-backup/objects/5d/50ee8ae7e9c45789711a679ddba1c6cce836a3 b/RockOS/.git-backup/objects/5d/50ee8ae7e9c45789711a679ddba1c6cce836a3 new file mode 100644 index 0000000..ac9f569 Binary files /dev/null and b/RockOS/.git-backup/objects/5d/50ee8ae7e9c45789711a679ddba1c6cce836a3 differ diff --git a/RockOS/.git-backup/objects/5d/608d067ca11e1467622b9021fc66fadc2eb794 b/RockOS/.git-backup/objects/5d/608d067ca11e1467622b9021fc66fadc2eb794 new file mode 100644 index 0000000..566cd9d Binary files /dev/null and b/RockOS/.git-backup/objects/5d/608d067ca11e1467622b9021fc66fadc2eb794 differ diff --git a/RockOS/.git-backup/objects/5d/69eb643f595daf731b5d0b605be7e55c120f85 b/RockOS/.git-backup/objects/5d/69eb643f595daf731b5d0b605be7e55c120f85 new file mode 100644 index 0000000..6546c6d Binary files /dev/null and b/RockOS/.git-backup/objects/5d/69eb643f595daf731b5d0b605be7e55c120f85 differ diff --git a/RockOS/.git-backup/objects/5d/b0a453803d116661f741b56a7660535ed4b774 b/RockOS/.git-backup/objects/5d/b0a453803d116661f741b56a7660535ed4b774 new file mode 100644 index 0000000..1239fca Binary files /dev/null and b/RockOS/.git-backup/objects/5d/b0a453803d116661f741b56a7660535ed4b774 differ diff --git a/RockOS/.git-backup/objects/5e/0186c7825d5142006dcd69845e111d70702a45 b/RockOS/.git-backup/objects/5e/0186c7825d5142006dcd69845e111d70702a45 new file mode 100644 index 0000000..2182623 Binary files /dev/null and b/RockOS/.git-backup/objects/5e/0186c7825d5142006dcd69845e111d70702a45 differ diff --git a/RockOS/.git-backup/objects/5e/7e0cc6faaea164a35eb43334d5f5aee426b279 b/RockOS/.git-backup/objects/5e/7e0cc6faaea164a35eb43334d5f5aee426b279 new file mode 100644 index 0000000..e1e70fc Binary files /dev/null and b/RockOS/.git-backup/objects/5e/7e0cc6faaea164a35eb43334d5f5aee426b279 differ diff --git a/RockOS/.git-backup/objects/5e/8d589665d0fbc9e06b54c359d93636d3f5d33f b/RockOS/.git-backup/objects/5e/8d589665d0fbc9e06b54c359d93636d3f5d33f new file mode 100644 index 0000000..c48f6f6 Binary files /dev/null and b/RockOS/.git-backup/objects/5e/8d589665d0fbc9e06b54c359d93636d3f5d33f differ diff --git a/RockOS/.git-backup/objects/5e/f21ecf44a32f8734dd1a4d6c2bd4cd326e3618 b/RockOS/.git-backup/objects/5e/f21ecf44a32f8734dd1a4d6c2bd4cd326e3618 new file mode 100644 index 0000000..58c6871 Binary files /dev/null and b/RockOS/.git-backup/objects/5e/f21ecf44a32f8734dd1a4d6c2bd4cd326e3618 differ diff --git a/RockOS/.git-backup/objects/5f/2e3f3ef9d68379a940feb2a760e4e0570e1143 b/RockOS/.git-backup/objects/5f/2e3f3ef9d68379a940feb2a760e4e0570e1143 new file mode 100644 index 0000000..4c0269e Binary files /dev/null and b/RockOS/.git-backup/objects/5f/2e3f3ef9d68379a940feb2a760e4e0570e1143 differ diff --git a/RockOS/.git-backup/objects/5f/35b1b23b4cbde213636c593c220cc03b614182 b/RockOS/.git-backup/objects/5f/35b1b23b4cbde213636c593c220cc03b614182 new file mode 100644 index 0000000..349c9d5 Binary files /dev/null and b/RockOS/.git-backup/objects/5f/35b1b23b4cbde213636c593c220cc03b614182 differ diff --git a/RockOS/.git-backup/objects/5f/81f8d144b4d3b0370d405b4da3e2c8b921c7d2 b/RockOS/.git-backup/objects/5f/81f8d144b4d3b0370d405b4da3e2c8b921c7d2 new file mode 100644 index 0000000..435b083 Binary files /dev/null and b/RockOS/.git-backup/objects/5f/81f8d144b4d3b0370d405b4da3e2c8b921c7d2 differ diff --git a/RockOS/.git-backup/objects/5f/87486b27cbf2118b499162b49ef3713c5811db b/RockOS/.git-backup/objects/5f/87486b27cbf2118b499162b49ef3713c5811db new file mode 100644 index 0000000..b545ad2 Binary files /dev/null and b/RockOS/.git-backup/objects/5f/87486b27cbf2118b499162b49ef3713c5811db differ diff --git a/RockOS/.git-backup/objects/5f/9df7dbd7ab0a34098f9f4d1144f8c09e8ee734 b/RockOS/.git-backup/objects/5f/9df7dbd7ab0a34098f9f4d1144f8c09e8ee734 new file mode 100644 index 0000000..9419348 Binary files /dev/null and b/RockOS/.git-backup/objects/5f/9df7dbd7ab0a34098f9f4d1144f8c09e8ee734 differ diff --git a/RockOS/.git-backup/objects/60/209522ccdf3009eb95cfb3c28f99523c0f77fe b/RockOS/.git-backup/objects/60/209522ccdf3009eb95cfb3c28f99523c0f77fe new file mode 100644 index 0000000..2cb73b3 Binary files /dev/null and b/RockOS/.git-backup/objects/60/209522ccdf3009eb95cfb3c28f99523c0f77fe differ diff --git a/RockOS/.git-backup/objects/60/68ba20c4e1e814efc222127eec69ea434b03ad b/RockOS/.git-backup/objects/60/68ba20c4e1e814efc222127eec69ea434b03ad new file mode 100644 index 0000000..de0b2f3 Binary files /dev/null and b/RockOS/.git-backup/objects/60/68ba20c4e1e814efc222127eec69ea434b03ad differ diff --git a/RockOS/.git-backup/objects/60/7cf64ec837f94561fb3a08594f7045ed6201f2 b/RockOS/.git-backup/objects/60/7cf64ec837f94561fb3a08594f7045ed6201f2 new file mode 100644 index 0000000..562e9ae Binary files /dev/null and b/RockOS/.git-backup/objects/60/7cf64ec837f94561fb3a08594f7045ed6201f2 differ diff --git a/RockOS/.git-backup/objects/60/7d61e1dd225d54b811d0f5a02864f0c17aa0cd b/RockOS/.git-backup/objects/60/7d61e1dd225d54b811d0f5a02864f0c17aa0cd new file mode 100644 index 0000000..4f2c9a8 --- /dev/null +++ b/RockOS/.git-backup/objects/60/7d61e1dd225d54b811d0f5a02864f0c17aa0cd @@ -0,0 +1,3 @@ +xSMo@ٿbHRC{"A#$ +']^'Eom VCyvޛyT)|n8z1}&MF3s~SP)x R[?6PV`Q%e]BS}k;PBU)iot"aJ`r*7Hd!98F 1xqIfe W&'oGV\8XƎC"?r'XT廭~uA/ p<`c#6.U&1u\FxEOQ8?jٔu1[< {e[E8ф"ޟ VLwԄ̌]b%/Юl7>Hk㝬'5 Zzz=Oû3s$v]ZZK#mwߺ0icnNws]hrfcfīNWmY+/f 2,8H(lgUƶ: +??E \ No newline at end of file diff --git a/RockOS/.git-backup/objects/60/cf61bb71f760aa80ebd5c8bd84ed93d5fe7138 b/RockOS/.git-backup/objects/60/cf61bb71f760aa80ebd5c8bd84ed93d5fe7138 new file mode 100644 index 0000000..e43965c Binary files /dev/null and b/RockOS/.git-backup/objects/60/cf61bb71f760aa80ebd5c8bd84ed93d5fe7138 differ diff --git a/RockOS/.git-backup/objects/60/f1523db327b7eedc7d8c84a02bfa0fd272ab58 b/RockOS/.git-backup/objects/60/f1523db327b7eedc7d8c84a02bfa0fd272ab58 new file mode 100644 index 0000000..bda8d32 Binary files /dev/null and b/RockOS/.git-backup/objects/60/f1523db327b7eedc7d8c84a02bfa0fd272ab58 differ diff --git a/RockOS/.git-backup/objects/61/0cbf880930a6c6b59c22e6b5165e76ee6693f1 b/RockOS/.git-backup/objects/61/0cbf880930a6c6b59c22e6b5165e76ee6693f1 new file mode 100644 index 0000000..3d10c1d Binary files /dev/null and b/RockOS/.git-backup/objects/61/0cbf880930a6c6b59c22e6b5165e76ee6693f1 differ diff --git a/RockOS/.git-backup/objects/61/3c6a4cee0adb2a457222c19b5f12d966934d8b b/RockOS/.git-backup/objects/61/3c6a4cee0adb2a457222c19b5f12d966934d8b new file mode 100644 index 0000000..834138d Binary files /dev/null and b/RockOS/.git-backup/objects/61/3c6a4cee0adb2a457222c19b5f12d966934d8b differ diff --git a/RockOS/.git-backup/objects/61/49f73c3640a4368320bfdc96db9983887bf5e1 b/RockOS/.git-backup/objects/61/49f73c3640a4368320bfdc96db9983887bf5e1 new file mode 100644 index 0000000..e278579 Binary files /dev/null and b/RockOS/.git-backup/objects/61/49f73c3640a4368320bfdc96db9983887bf5e1 differ diff --git a/RockOS/.git-backup/objects/61/6c2d4b9e3ea56079fab0e6379c67c02b4168ec b/RockOS/.git-backup/objects/61/6c2d4b9e3ea56079fab0e6379c67c02b4168ec new file mode 100644 index 0000000..a23864a Binary files /dev/null and b/RockOS/.git-backup/objects/61/6c2d4b9e3ea56079fab0e6379c67c02b4168ec differ diff --git a/RockOS/.git-backup/objects/62/2c0a8e7d6f8cdfb16469dc9d8ee04af82496bd b/RockOS/.git-backup/objects/62/2c0a8e7d6f8cdfb16469dc9d8ee04af82496bd new file mode 100644 index 0000000..62c1c70 Binary files /dev/null and b/RockOS/.git-backup/objects/62/2c0a8e7d6f8cdfb16469dc9d8ee04af82496bd differ diff --git a/RockOS/.git-backup/objects/62/56e25b90d765fc218f41b584a2c3dc6184c5fe b/RockOS/.git-backup/objects/62/56e25b90d765fc218f41b584a2c3dc6184c5fe new file mode 100644 index 0000000..4ae8198 Binary files /dev/null and b/RockOS/.git-backup/objects/62/56e25b90d765fc218f41b584a2c3dc6184c5fe differ diff --git a/RockOS/.git-backup/objects/62/61376c53ac9b26efcf1165331155a2f5d08c17 b/RockOS/.git-backup/objects/62/61376c53ac9b26efcf1165331155a2f5d08c17 new file mode 100644 index 0000000..ce3d3c5 Binary files /dev/null and b/RockOS/.git-backup/objects/62/61376c53ac9b26efcf1165331155a2f5d08c17 differ diff --git a/RockOS/.git-backup/objects/62/83e46f22968e62257a7fbad365cc545c408884 b/RockOS/.git-backup/objects/62/83e46f22968e62257a7fbad365cc545c408884 new file mode 100644 index 0000000..609487a --- /dev/null +++ b/RockOS/.git-backup/objects/62/83e46f22968e62257a7fbad365cc545c408884 @@ -0,0 +1,2 @@ +xU =zƘz4h_C +Y~.wovg&'8iᐝImH"һ@j=D=[{ 藐zyzb\EGxUә@ZQ/5W[>) >o \ No newline at end of file diff --git a/RockOS/.git-backup/objects/63/025e70a89f3fe8025743983f9458ab3c6e5a44 b/RockOS/.git-backup/objects/63/025e70a89f3fe8025743983f9458ab3c6e5a44 new file mode 100644 index 0000000..84aa754 Binary files /dev/null and b/RockOS/.git-backup/objects/63/025e70a89f3fe8025743983f9458ab3c6e5a44 differ diff --git a/RockOS/.git-backup/objects/63/209b9e06b664407e83e93c52dff2dcd02e36cb b/RockOS/.git-backup/objects/63/209b9e06b664407e83e93c52dff2dcd02e36cb new file mode 100644 index 0000000..f45f070 Binary files /dev/null and b/RockOS/.git-backup/objects/63/209b9e06b664407e83e93c52dff2dcd02e36cb differ diff --git a/RockOS/.git-backup/objects/63/31d9d35e24c0d090892337bc4ef2637909a3e7 b/RockOS/.git-backup/objects/63/31d9d35e24c0d090892337bc4ef2637909a3e7 new file mode 100644 index 0000000..46784d6 Binary files /dev/null and b/RockOS/.git-backup/objects/63/31d9d35e24c0d090892337bc4ef2637909a3e7 differ diff --git a/RockOS/.git-backup/objects/63/4d8b9dca46e197150de2fe84c7f65c5ec8efb2 b/RockOS/.git-backup/objects/63/4d8b9dca46e197150de2fe84c7f65c5ec8efb2 new file mode 100644 index 0000000..fcdc79c Binary files /dev/null and b/RockOS/.git-backup/objects/63/4d8b9dca46e197150de2fe84c7f65c5ec8efb2 differ diff --git a/RockOS/.git-backup/objects/63/4dc0edee3bdc11d234be77107c5202be09f76f b/RockOS/.git-backup/objects/63/4dc0edee3bdc11d234be77107c5202be09f76f new file mode 100644 index 0000000..beb252b Binary files /dev/null and b/RockOS/.git-backup/objects/63/4dc0edee3bdc11d234be77107c5202be09f76f differ diff --git a/RockOS/.git-backup/objects/63/755fe9518aa4ce9a8170d560f6e49e0701c5e0 b/RockOS/.git-backup/objects/63/755fe9518aa4ce9a8170d560f6e49e0701c5e0 new file mode 100644 index 0000000..b718613 Binary files /dev/null and b/RockOS/.git-backup/objects/63/755fe9518aa4ce9a8170d560f6e49e0701c5e0 differ diff --git a/RockOS/.git-backup/objects/63/8493a8ef4d7c52758c49832b780a1e1977ca37 b/RockOS/.git-backup/objects/63/8493a8ef4d7c52758c49832b780a1e1977ca37 new file mode 100644 index 0000000..8cf8577 Binary files /dev/null and b/RockOS/.git-backup/objects/63/8493a8ef4d7c52758c49832b780a1e1977ca37 differ diff --git a/RockOS/.git-backup/objects/63/86dfb1d1dc06c1c63af6dbcca27c6d1fa9f49d b/RockOS/.git-backup/objects/63/86dfb1d1dc06c1c63af6dbcca27c6d1fa9f49d new file mode 100644 index 0000000..5c83bf8 Binary files /dev/null and b/RockOS/.git-backup/objects/63/86dfb1d1dc06c1c63af6dbcca27c6d1fa9f49d differ diff --git a/RockOS/.git-backup/objects/63/cf55fa64b20dabf179d2ea62ad360ce94818e1 b/RockOS/.git-backup/objects/63/cf55fa64b20dabf179d2ea62ad360ce94818e1 new file mode 100644 index 0000000..f76a8ab Binary files /dev/null and b/RockOS/.git-backup/objects/63/cf55fa64b20dabf179d2ea62ad360ce94818e1 differ diff --git a/RockOS/.git-backup/objects/64/1446f7a5fe1301be62b5f2f021d3e5d9736162 b/RockOS/.git-backup/objects/64/1446f7a5fe1301be62b5f2f021d3e5d9736162 new file mode 100644 index 0000000..a41209f --- /dev/null +++ b/RockOS/.git-backup/objects/64/1446f7a5fe1301be62b5f2f021d3e5d9736162 @@ -0,0 +1,4 @@ +xTmo0k+NKV1!uR;!ʀYyq$lMwv:Ej{GKV.p-UUX1,I%hX 6T~`7E>~A .Ya +a)/ Ҕ +&R.,Q.eL= +sR$IU%=!dF#Rڦ}d`Fà=f%Qd`*Τ]G'xoj(0?'蜢ij|4rFg=nI֛zyT!wASM~y"՗g?l>>,o?tң%=$F_Lʰ mUU/j7z[\Cޒ!; FZqNCAd,J^ͳ^c Lߖ* RPeUvbw;\ k8ܠ `(UAcsJ; uRE:@16|83%؝|_VY9@g!Fa&Qe"COoIҠeJR^*2ÏxLQJRjWN7.OSIc'~2f3(oN*<ȨިE!7`E \ No newline at end of file diff --git a/RockOS/.git-backup/objects/64/1983f2ca4d869f0b717b345c2e7030d208884a b/RockOS/.git-backup/objects/64/1983f2ca4d869f0b717b345c2e7030d208884a new file mode 100644 index 0000000..28fe7c0 Binary files /dev/null and b/RockOS/.git-backup/objects/64/1983f2ca4d869f0b717b345c2e7030d208884a differ diff --git a/RockOS/.git-backup/objects/64/1f0d86b7ac5ea95bbd61729b1780105210cebd b/RockOS/.git-backup/objects/64/1f0d86b7ac5ea95bbd61729b1780105210cebd new file mode 100644 index 0000000..d42e980 Binary files /dev/null and b/RockOS/.git-backup/objects/64/1f0d86b7ac5ea95bbd61729b1780105210cebd differ diff --git a/RockOS/.git-backup/objects/64/f2751c431753ee967ac8f19cfdb848d1636da0 b/RockOS/.git-backup/objects/64/f2751c431753ee967ac8f19cfdb848d1636da0 new file mode 100644 index 0000000..d88aa5c --- /dev/null +++ b/RockOS/.git-backup/objects/64/f2751c431753ee967ac8f19cfdb848d1636da0 @@ -0,0 +1,3 @@ +xuNK +0uS $?*!m:&I*"MA g-ޯPr]o(Y w|h+!,pFt2Ltm +{,9jfr*#ט͆02qʐEocJG1.Ge o*IO \ No newline at end of file diff --git a/RockOS/.git-backup/objects/65/3f89ea72b3d8780af0621f1942d2df2be8973b b/RockOS/.git-backup/objects/65/3f89ea72b3d8780af0621f1942d2df2be8973b new file mode 100644 index 0000000..3254557 Binary files /dev/null and b/RockOS/.git-backup/objects/65/3f89ea72b3d8780af0621f1942d2df2be8973b differ diff --git a/RockOS/.git-backup/objects/65/5f862f4f08676bc0f912f14add1eb22ff5d314 b/RockOS/.git-backup/objects/65/5f862f4f08676bc0f912f14add1eb22ff5d314 new file mode 100644 index 0000000..0ec88d3 --- /dev/null +++ b/RockOS/.git-backup/objects/65/5f862f4f08676bc0f912f14add1eb22ff5d314 @@ -0,0 +1,3 @@ +xU + D{ޯK P3ei-%W7 6y;^mOY^d- @D3s OdY(Ք"n`Ge +5FՄC;!Ῥ~*Pg/J \ No newline at end of file diff --git a/RockOS/.git-backup/objects/65/7a45995b1cd7e2502d2dc157b822998e13b73f b/RockOS/.git-backup/objects/65/7a45995b1cd7e2502d2dc157b822998e13b73f new file mode 100644 index 0000000..ea0b4fc Binary files /dev/null and b/RockOS/.git-backup/objects/65/7a45995b1cd7e2502d2dc157b822998e13b73f differ diff --git a/RockOS/.git-backup/objects/65/e808478d52967ea19ebc3d8f005217c26da623 b/RockOS/.git-backup/objects/65/e808478d52967ea19ebc3d8f005217c26da623 new file mode 100644 index 0000000..acec8a3 Binary files /dev/null and b/RockOS/.git-backup/objects/65/e808478d52967ea19ebc3d8f005217c26da623 differ diff --git a/RockOS/.git-backup/objects/65/e997e831772e380a1defd748e8fc802e0c9728 b/RockOS/.git-backup/objects/65/e997e831772e380a1defd748e8fc802e0c9728 new file mode 100644 index 0000000..45f0170 Binary files /dev/null and b/RockOS/.git-backup/objects/65/e997e831772e380a1defd748e8fc802e0c9728 differ diff --git a/RockOS/.git-backup/objects/65/fe48dbe29801bc04a40de2ac35070cd30ae96c b/RockOS/.git-backup/objects/65/fe48dbe29801bc04a40de2ac35070cd30ae96c new file mode 100644 index 0000000..4f74890 Binary files /dev/null and b/RockOS/.git-backup/objects/65/fe48dbe29801bc04a40de2ac35070cd30ae96c differ diff --git a/RockOS/.git-backup/objects/66/4cdc3b335a0389f7ec88207df9aa1bb3b000e5 b/RockOS/.git-backup/objects/66/4cdc3b335a0389f7ec88207df9aa1bb3b000e5 new file mode 100644 index 0000000..b943e5c --- /dev/null +++ b/RockOS/.git-backup/objects/66/4cdc3b335a0389f7ec88207df9aa1bb3b000e5 @@ -0,0 +1,3 @@ +xS]@⸛l@k5cYɐeۛL+;wJ +ƨ1s9s㬈~Ypz;|tOݻƲKw׎`R2 \GJHSigm(U2=FOZQYR3^E@UJBP!(TjEq%"ʲ;%% ٜˬk(7S^8yl{,-6bTZO6<־2 ܽ 5χ O u ~SRWXw``u#0 ]StlVt{>?piNJ=Զ8FM60ΫV㽖ϐZffe]:9VÖ~Pagi[O őb +RŕUcR9H6\i?۞ni< HF~`{O\<_e#ҩovL֚FrVSx7}g[(bT \ No newline at end of file diff --git a/RockOS/.git-backup/objects/66/7b8af1b237eb79d43a8ff5f8347126854f73aa b/RockOS/.git-backup/objects/66/7b8af1b237eb79d43a8ff5f8347126854f73aa new file mode 100644 index 0000000..2552b55 Binary files /dev/null and b/RockOS/.git-backup/objects/66/7b8af1b237eb79d43a8ff5f8347126854f73aa differ diff --git a/RockOS/.git-backup/objects/66/b74a2d3d78dfcd62337a591afa16d75f02b8f0 b/RockOS/.git-backup/objects/66/b74a2d3d78dfcd62337a591afa16d75f02b8f0 new file mode 100644 index 0000000..18a601e Binary files /dev/null and b/RockOS/.git-backup/objects/66/b74a2d3d78dfcd62337a591afa16d75f02b8f0 differ diff --git a/RockOS/.git-backup/objects/66/c3eddd6c8c894e02a3a34018a2bac09c8fd84e b/RockOS/.git-backup/objects/66/c3eddd6c8c894e02a3a34018a2bac09c8fd84e new file mode 100644 index 0000000..cf89742 Binary files /dev/null and b/RockOS/.git-backup/objects/66/c3eddd6c8c894e02a3a34018a2bac09c8fd84e differ diff --git a/RockOS/.git-backup/objects/66/d16ee5ff2c1ddc878f80c6ed29b8b8b90e046b b/RockOS/.git-backup/objects/66/d16ee5ff2c1ddc878f80c6ed29b8b8b90e046b new file mode 100644 index 0000000..2988ca2 Binary files /dev/null and b/RockOS/.git-backup/objects/66/d16ee5ff2c1ddc878f80c6ed29b8b8b90e046b differ diff --git a/RockOS/.git-backup/objects/67/663c0d57bd30acfc4b6b2f8fb3313c0787c8bc b/RockOS/.git-backup/objects/67/663c0d57bd30acfc4b6b2f8fb3313c0787c8bc new file mode 100644 index 0000000..c5353e2 Binary files /dev/null and b/RockOS/.git-backup/objects/67/663c0d57bd30acfc4b6b2f8fb3313c0787c8bc differ diff --git a/RockOS/.git-backup/objects/67/bab1e7c7035077538eb5bd37195da2f12ee1b3 b/RockOS/.git-backup/objects/67/bab1e7c7035077538eb5bd37195da2f12ee1b3 new file mode 100644 index 0000000..3f310e4 Binary files /dev/null and b/RockOS/.git-backup/objects/67/bab1e7c7035077538eb5bd37195da2f12ee1b3 differ diff --git a/RockOS/.git-backup/objects/68/44338ab2fc08829e0ea6ae65d95be6805ef585 b/RockOS/.git-backup/objects/68/44338ab2fc08829e0ea6ae65d95be6805ef585 new file mode 100644 index 0000000..7d0cb32 Binary files /dev/null and b/RockOS/.git-backup/objects/68/44338ab2fc08829e0ea6ae65d95be6805ef585 differ diff --git a/RockOS/.git-backup/objects/68/9f6918fc1c9fda77ccc770157aeca8ae2185ad b/RockOS/.git-backup/objects/68/9f6918fc1c9fda77ccc770157aeca8ae2185ad new file mode 100644 index 0000000..e8e6da1 Binary files /dev/null and b/RockOS/.git-backup/objects/68/9f6918fc1c9fda77ccc770157aeca8ae2185ad differ diff --git a/RockOS/.git-backup/objects/68/c52acd69871d638f579b380ba651ec253d9796 b/RockOS/.git-backup/objects/68/c52acd69871d638f579b380ba651ec253d9796 new file mode 100644 index 0000000..b63ea89 Binary files /dev/null and b/RockOS/.git-backup/objects/68/c52acd69871d638f579b380ba651ec253d9796 differ diff --git a/RockOS/.git-backup/objects/68/dbdbb2c8f4798af40df79d6afb037fa1c9af18 b/RockOS/.git-backup/objects/68/dbdbb2c8f4798af40df79d6afb037fa1c9af18 new file mode 100644 index 0000000..8be1917 Binary files /dev/null and b/RockOS/.git-backup/objects/68/dbdbb2c8f4798af40df79d6afb037fa1c9af18 differ diff --git a/RockOS/.git-backup/objects/68/f18d283f7a19ab93a351bb1f0639c53f9e6480 b/RockOS/.git-backup/objects/68/f18d283f7a19ab93a351bb1f0639c53f9e6480 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/69/422f919db6602182738e76d54b4f90deef6b34 b/RockOS/.git-backup/objects/69/422f919db6602182738e76d54b4f90deef6b34 new file mode 100644 index 0000000..8ad002f Binary files /dev/null and b/RockOS/.git-backup/objects/69/422f919db6602182738e76d54b4f90deef6b34 differ diff --git a/RockOS/.git-backup/objects/69/6890760244dcaea37941f098ee69b99b81bfde b/RockOS/.git-backup/objects/69/6890760244dcaea37941f098ee69b99b81bfde new file mode 100644 index 0000000..07e7bb0 Binary files /dev/null and b/RockOS/.git-backup/objects/69/6890760244dcaea37941f098ee69b99b81bfde differ diff --git a/RockOS/.git-backup/objects/69/8477df18fb45595673c18ed5199dbdbf89def8 b/RockOS/.git-backup/objects/69/8477df18fb45595673c18ed5199dbdbf89def8 new file mode 100644 index 0000000..d0ab8f4 Binary files /dev/null and b/RockOS/.git-backup/objects/69/8477df18fb45595673c18ed5199dbdbf89def8 differ diff --git a/RockOS/.git-backup/objects/69/8e0eb599e787ca93aa9049b1583befa0dbda87 b/RockOS/.git-backup/objects/69/8e0eb599e787ca93aa9049b1583befa0dbda87 new file mode 100644 index 0000000..b47aeaf Binary files /dev/null and b/RockOS/.git-backup/objects/69/8e0eb599e787ca93aa9049b1583befa0dbda87 differ diff --git a/RockOS/.git-backup/objects/69/a10d76bfd90977505d7630d256705255f5c28a b/RockOS/.git-backup/objects/69/a10d76bfd90977505d7630d256705255f5c28a new file mode 100644 index 0000000..32ebf72 Binary files /dev/null and b/RockOS/.git-backup/objects/69/a10d76bfd90977505d7630d256705255f5c28a differ diff --git a/RockOS/.git-backup/objects/69/d80845dd1cd75f5345abeac750dad1af752ff5 b/RockOS/.git-backup/objects/69/d80845dd1cd75f5345abeac750dad1af752ff5 new file mode 100644 index 0000000..dfc88d5 Binary files /dev/null and b/RockOS/.git-backup/objects/69/d80845dd1cd75f5345abeac750dad1af752ff5 differ diff --git a/RockOS/.git-backup/objects/69/f28ce5bcb7c838ca310fa215fe8512b9318ea7 b/RockOS/.git-backup/objects/69/f28ce5bcb7c838ca310fa215fe8512b9318ea7 new file mode 100644 index 0000000..fc03e67 --- /dev/null +++ b/RockOS/.git-backup/objects/69/f28ce5bcb7c838ca310fa215fe8512b9318ea7 @@ -0,0 +1,4 @@ +x}S]O0ٿb$F N* UmyعڕC';棔SQx3L 1;n"<<%3v1 +inSa Ra^grMJwH(s{C F|{&05|KWޢ+x"5cX$9^!x%G" qA&׵T$;*o0RXWSV暲q_du&գ\x}j&B9u +AS;u:t*y +#(H܏)_$r]6 }}?^<(|[2 cNDZzZF[YM[w$)_av0{m.j^U~ 2{9ΒʳgIG;Zf]/f˗dLT5 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/6a/5b477ca9f1849e311f6a738662539e723de2ca b/RockOS/.git-backup/objects/6a/5b477ca9f1849e311f6a738662539e723de2ca new file mode 100644 index 0000000..07432d6 Binary files /dev/null and b/RockOS/.git-backup/objects/6a/5b477ca9f1849e311f6a738662539e723de2ca differ diff --git a/RockOS/.git-backup/objects/6a/79a20cf6d7c4597050a6119a4b373ec09f9645 b/RockOS/.git-backup/objects/6a/79a20cf6d7c4597050a6119a4b373ec09f9645 new file mode 100644 index 0000000..410036f --- /dev/null +++ b/RockOS/.git-backup/objects/6a/79a20cf6d7c4597050a6119a4b373ec09f9645 @@ -0,0 +1,3 @@ +xQ +0 aw\@I U6Vo:u +dG}">g-DYD1dL#z^jjJD9;2dh52eU0UZC!q^˝.[>wK~EGZ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/6a/b6e20e75d71d93f75e6798dec3750b0a4d0fae b/RockOS/.git-backup/objects/6a/b6e20e75d71d93f75e6798dec3750b0a4d0fae new file mode 100644 index 0000000..b95d61c Binary files /dev/null and b/RockOS/.git-backup/objects/6a/b6e20e75d71d93f75e6798dec3750b0a4d0fae differ diff --git a/RockOS/.git-backup/objects/6a/d12dea00aabf1f151addd7f1e4c510c8c1a23e b/RockOS/.git-backup/objects/6a/d12dea00aabf1f151addd7f1e4c510c8c1a23e new file mode 100644 index 0000000..d77a1ed --- /dev/null +++ b/RockOS/.git-backup/objects/6a/d12dea00aabf1f151addd7f1e4c510c8c1a23e @@ -0,0 +1 @@ +xRN0 ܯr^ĘN퐦n1MIӴ_"H /Bn^2vRJ} ^Wn#lV8(-W]\/ g}ƹ4ď(&)?\R%qNxg9V;LtI6l!/b6S"?3w7Js>^A~OlZC&<_;46%, \ No newline at end of file diff --git a/RockOS/.git-backup/objects/6a/d6cce30be954c4b7ac2ceb3ef62baf5a8150ac b/RockOS/.git-backup/objects/6a/d6cce30be954c4b7ac2ceb3ef62baf5a8150ac new file mode 100644 index 0000000..edd18b0 Binary files /dev/null and b/RockOS/.git-backup/objects/6a/d6cce30be954c4b7ac2ceb3ef62baf5a8150ac differ diff --git a/RockOS/.git-backup/objects/6b/2aceee0ec584d71a66f366a0467f3f44e3a53c b/RockOS/.git-backup/objects/6b/2aceee0ec584d71a66f366a0467f3f44e3a53c new file mode 100644 index 0000000..8fc7d79 Binary files /dev/null and b/RockOS/.git-backup/objects/6b/2aceee0ec584d71a66f366a0467f3f44e3a53c differ diff --git a/RockOS/.git-backup/objects/6b/34b6cea12829410abbfec21db9ca71ae49025e b/RockOS/.git-backup/objects/6b/34b6cea12829410abbfec21db9ca71ae49025e new file mode 100644 index 0000000..91a63d9 Binary files /dev/null and b/RockOS/.git-backup/objects/6b/34b6cea12829410abbfec21db9ca71ae49025e differ diff --git a/RockOS/.git-backup/objects/6b/357638fa7df0e44cc62bae316de60595834bfb b/RockOS/.git-backup/objects/6b/357638fa7df0e44cc62bae316de60595834bfb new file mode 100644 index 0000000..7c0c377 Binary files /dev/null and b/RockOS/.git-backup/objects/6b/357638fa7df0e44cc62bae316de60595834bfb differ diff --git a/RockOS/.git-backup/objects/6c/13c81a25b33b10be354eb2c30ae7181b672307 b/RockOS/.git-backup/objects/6c/13c81a25b33b10be354eb2c30ae7181b672307 new file mode 100644 index 0000000..85997a6 Binary files /dev/null and b/RockOS/.git-backup/objects/6c/13c81a25b33b10be354eb2c30ae7181b672307 differ diff --git a/RockOS/.git-backup/objects/6c/32072876efd1afe09ae7b14ec2aece96c564c5 b/RockOS/.git-backup/objects/6c/32072876efd1afe09ae7b14ec2aece96c564c5 new file mode 100644 index 0000000..f7404ef --- /dev/null +++ b/RockOS/.git-backup/objects/6c/32072876efd1afe09ae7b14ec2aece96c564c5 @@ -0,0 +1,3 @@ +xT[o0s~7*M V:mBB +lP.vc)8v躭}$҇I ql,p}U +\THlf q4xu,C.Ree*(߅JcLh/GCZ^ +S֪\s  \Švyc NEn`D3**@𠲬5wtGw>IxC)b-3lzD7!݉9iCZd:P>x|3oW"-5*.I d5ඬz*Ef߂L^y"%&%KEXJd#ʝLLEJ;>JkbwGm J#ױ8 ^H: Ǟ"A0_k-*=A+5ET@!TFavOOV=ݞx]RaіiSFi_`WE!ڟNHu+,Єd=_ Tt<g%޻zpERRhP@%W g}40_pIeȐuU^JFs$pe2wf^z7^a \ No newline at end of file diff --git a/RockOS/.git-backup/objects/6d/2fa2f753fd2d1e067d929f33fa5d86990cb31f b/RockOS/.git-backup/objects/6d/2fa2f753fd2d1e067d929f33fa5d86990cb31f new file mode 100644 index 0000000..426efe5 --- /dev/null +++ b/RockOS/.git-backup/objects/6d/2fa2f753fd2d1e067d929f33fa5d86990cb31f @@ -0,0 +1,2 @@ +xmAn0E)F"B.RU&X!"=3OVӳ6줂cgt81ZS^̘6_5U ԞH-N d>st ̙N33{kFtW: +荼5t?= *_a@aBCq*BE_NDǓs8bAFX1ŰX$Y=S͖m<5FK5KXXz3cgLt\/NM ^#ޚj }W0<O_*zp!+^%Vuar|m؇'bTSG%' W\<&~̰9(?S(a7SͲA^Cռ'H+߶8&WH'3пkqy/BڄS-AwWܰkn.`r̅%1~m5)ersٔ\ n_ir LNp&=襾ƗI;58u& b˧ICEȅM^׈D* B߄=X +P޷*O \ No newline at end of file diff --git a/RockOS/.git-backup/objects/75/0d64d990646ee417ad7197ef7b3df5fbc763be b/RockOS/.git-backup/objects/75/0d64d990646ee417ad7197ef7b3df5fbc763be new file mode 100644 index 0000000..6fbf1f1 Binary files /dev/null and b/RockOS/.git-backup/objects/75/0d64d990646ee417ad7197ef7b3df5fbc763be differ diff --git a/RockOS/.git-backup/objects/75/2954588cb4517793716bc378b0d0f526c6bb3b b/RockOS/.git-backup/objects/75/2954588cb4517793716bc378b0d0f526c6bb3b new file mode 100644 index 0000000..e2d5bb0 Binary files /dev/null and b/RockOS/.git-backup/objects/75/2954588cb4517793716bc378b0d0f526c6bb3b differ diff --git a/RockOS/.git-backup/objects/75/39f61e8c4060b43fc40feec098534b95c4d428 b/RockOS/.git-backup/objects/75/39f61e8c4060b43fc40feec098534b95c4d428 new file mode 100644 index 0000000..ccd2b07 Binary files /dev/null and b/RockOS/.git-backup/objects/75/39f61e8c4060b43fc40feec098534b95c4d428 differ diff --git a/RockOS/.git-backup/objects/75/87531dae0c7f4c3afff2ed8abde1282ba21f96 b/RockOS/.git-backup/objects/75/87531dae0c7f4c3afff2ed8abde1282ba21f96 new file mode 100644 index 0000000..27eac85 Binary files /dev/null and b/RockOS/.git-backup/objects/75/87531dae0c7f4c3afff2ed8abde1282ba21f96 differ diff --git a/RockOS/.git-backup/objects/75/ebd887f693d0d51f5479cc3e861ba2e31580bf b/RockOS/.git-backup/objects/75/ebd887f693d0d51f5479cc3e861ba2e31580bf new file mode 100644 index 0000000..e517d34 Binary files /dev/null and b/RockOS/.git-backup/objects/75/ebd887f693d0d51f5479cc3e861ba2e31580bf differ diff --git a/RockOS/.git-backup/objects/75/f497facc5db41a5009c897e247076b4970548d b/RockOS/.git-backup/objects/75/f497facc5db41a5009c897e247076b4970548d new file mode 100644 index 0000000..36fa452 Binary files /dev/null and b/RockOS/.git-backup/objects/75/f497facc5db41a5009c897e247076b4970548d differ diff --git a/RockOS/.git-backup/objects/76/167505ccd01cfdd99987b44512d927990d9e66 b/RockOS/.git-backup/objects/76/167505ccd01cfdd99987b44512d927990d9e66 new file mode 100644 index 0000000..9aaf085 Binary files /dev/null and b/RockOS/.git-backup/objects/76/167505ccd01cfdd99987b44512d927990d9e66 differ diff --git a/RockOS/.git-backup/objects/76/2b2768de9ae5584f30f70899df5ea04877928e b/RockOS/.git-backup/objects/76/2b2768de9ae5584f30f70899df5ea04877928e new file mode 100644 index 0000000..52c24db --- /dev/null +++ b/RockOS/.git-backup/objects/76/2b2768de9ae5584f30f70899df5ea04877928e @@ -0,0 +1 @@ +xe0 =)zY&\/C1N[H~]DZړGGuLi@rB0^[Fk*nZhq3 ;kE, Y`BL[ Vwd,$QFN"MoyVu%ֿX|tXw \ No newline at end of file diff --git a/RockOS/.git-backup/objects/76/37e68e09becd79b5460594c9c676778cae448a b/RockOS/.git-backup/objects/76/37e68e09becd79b5460594c9c676778cae448a new file mode 100644 index 0000000..2a4de12 Binary files /dev/null and b/RockOS/.git-backup/objects/76/37e68e09becd79b5460594c9c676778cae448a differ diff --git a/RockOS/.git-backup/objects/76/4c38ecf61c4c1e5bf150a6347c57cad6898e88 b/RockOS/.git-backup/objects/76/4c38ecf61c4c1e5bf150a6347c57cad6898e88 new file mode 100644 index 0000000..14350f2 Binary files /dev/null and b/RockOS/.git-backup/objects/76/4c38ecf61c4c1e5bf150a6347c57cad6898e88 differ diff --git a/RockOS/.git-backup/objects/76/767fcb8ccc70bf78ee4b87e086191ebd516b84 b/RockOS/.git-backup/objects/76/767fcb8ccc70bf78ee4b87e086191ebd516b84 new file mode 100644 index 0000000..a4a67e2 Binary files /dev/null and b/RockOS/.git-backup/objects/76/767fcb8ccc70bf78ee4b87e086191ebd516b84 differ diff --git a/RockOS/.git-backup/objects/76/9102094f80a389516dc96635ce0a400633aa36 b/RockOS/.git-backup/objects/76/9102094f80a389516dc96635ce0a400633aa36 new file mode 100644 index 0000000..373928c --- /dev/null +++ b/RockOS/.git-backup/objects/76/9102094f80a389516dc96635ce0a400633aa36 @@ -0,0 +1 @@ +x_o0Oq[sbb|XB3i̚ dkϬFIH=N\S; Y"03V,n4HCZ}-Rfg(Oc!TM /fLR?H'aO(Kܫ'?QD3\# % Ge1<^ PP߁JyR=bR%7[oQ2FPPʬmmC9%5J gy-c벫n_%rK8jZ=+5*b\iи2;{Ÿu@M{R}_YMzTg1pNX7Xy[6o^ tu3F=g*V&롾vٱ׍Zں/XsІm~ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/77/41b707743f8ba480d1755c6e87c77cdd159ce1 b/RockOS/.git-backup/objects/77/41b707743f8ba480d1755c6e87c77cdd159ce1 new file mode 100644 index 0000000..6e807cc Binary files /dev/null and b/RockOS/.git-backup/objects/77/41b707743f8ba480d1755c6e87c77cdd159ce1 differ diff --git a/RockOS/.git-backup/objects/77/5417461fd83dc3384b2e0f33ef0575a6d41865 b/RockOS/.git-backup/objects/77/5417461fd83dc3384b2e0f33ef0575a6d41865 new file mode 100644 index 0000000..e6a52dd Binary files /dev/null and b/RockOS/.git-backup/objects/77/5417461fd83dc3384b2e0f33ef0575a6d41865 differ diff --git a/RockOS/.git-backup/objects/77/9da1ea89c54f373526461d597570e229510e48 b/RockOS/.git-backup/objects/77/9da1ea89c54f373526461d597570e229510e48 new file mode 100644 index 0000000..230022a --- /dev/null +++ b/RockOS/.git-backup/objects/77/9da1ea89c54f373526461d597570e229510e48 @@ -0,0 +1,4 @@ +xj@{8P$+z㸐: 5 +`~VyvWmҒw$;hW3|SM?8HǏr<@\EAq Raݤew i,$ j`,kevd-ZLj4VbWT<"9& :CiO7x[Y +:Wn_e{zt> +F[ry+K fۖ~33#`T4:{`F%&pt/_h5HJBvl~xna/ tb9d5՟L(:x'FNY7.OkCP*6̭TV7ڕ+e3ԷxﱗN%Pa1jTFؗ(x|Pۋ 1Vz{*l8+~) \ No newline at end of file diff --git a/RockOS/.git-backup/objects/78/f4b208cde57e164237eaae41b6b45e0042d57c b/RockOS/.git-backup/objects/78/f4b208cde57e164237eaae41b6b45e0042d57c new file mode 100644 index 0000000..39b9ca8 Binary files /dev/null and b/RockOS/.git-backup/objects/78/f4b208cde57e164237eaae41b6b45e0042d57c differ diff --git a/RockOS/.git-backup/objects/7a/634e3ab538c0ec08c00439b79c4438878d9a29 b/RockOS/.git-backup/objects/7a/634e3ab538c0ec08c00439b79c4438878d9a29 new file mode 100644 index 0000000..2d8e484 Binary files /dev/null and b/RockOS/.git-backup/objects/7a/634e3ab538c0ec08c00439b79c4438878d9a29 differ diff --git a/RockOS/.git-backup/objects/7a/ac83c67a120bf96d4917463b00c1ebfe8a9828 b/RockOS/.git-backup/objects/7a/ac83c67a120bf96d4917463b00c1ebfe8a9828 new file mode 100644 index 0000000..949798e Binary files /dev/null and b/RockOS/.git-backup/objects/7a/ac83c67a120bf96d4917463b00c1ebfe8a9828 differ diff --git a/RockOS/.git-backup/objects/7b/adac56cd83bb93382855ca2ab1933f874ca57c b/RockOS/.git-backup/objects/7b/adac56cd83bb93382855ca2ab1933f874ca57c new file mode 100644 index 0000000..3cf647f --- /dev/null +++ b/RockOS/.git-backup/objects/7b/adac56cd83bb93382855ca2ab1933f874ca57c @@ -0,0 +1 @@ +x+)JMU052e040031QH,N.MKf:ja;v!Nb2 53>>T=X}_kA%'g~ie_ҿ-vSzrtsP<SlB"Sa6[j67}/USΜtɝ9W(%3- j]-&[)2''.TUz.T|׀Glf.MH(_n}-%~F*9w{?>ḰT«jマf7 lޞQЮ[_D4\Uͬ*͆fDu"_xK-W jK`~̘PrgJ3eݸTz/f{0g4IEqAjr|zj 0v)qgMnpyMko؄ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/7b/fa711003dc7ac1ffc88a9654159db2b2d89ee3 b/RockOS/.git-backup/objects/7b/fa711003dc7ac1ffc88a9654159db2b2d89ee3 new file mode 100644 index 0000000..1ec24f0 Binary files /dev/null and b/RockOS/.git-backup/objects/7b/fa711003dc7ac1ffc88a9654159db2b2d89ee3 differ diff --git a/RockOS/.git-backup/objects/7c/2f10862b9913fb825dbf1240bd6edb33c4f234 b/RockOS/.git-backup/objects/7c/2f10862b9913fb825dbf1240bd6edb33c4f234 new file mode 100644 index 0000000..6addcaa Binary files /dev/null and b/RockOS/.git-backup/objects/7c/2f10862b9913fb825dbf1240bd6edb33c4f234 differ diff --git a/RockOS/.git-backup/objects/7c/51a46d97325b4b0b0a71f530b93d5b47518ddd b/RockOS/.git-backup/objects/7c/51a46d97325b4b0b0a71f530b93d5b47518ddd new file mode 100644 index 0000000..6819938 Binary files /dev/null and b/RockOS/.git-backup/objects/7c/51a46d97325b4b0b0a71f530b93d5b47518ddd differ diff --git a/RockOS/.git-backup/objects/7c/7f69c3b5bb0895d43ae5057fa351ceb3404e17 b/RockOS/.git-backup/objects/7c/7f69c3b5bb0895d43ae5057fa351ceb3404e17 new file mode 100644 index 0000000..7750e32 Binary files /dev/null and b/RockOS/.git-backup/objects/7c/7f69c3b5bb0895d43ae5057fa351ceb3404e17 differ diff --git a/RockOS/.git-backup/objects/7d/0387f3016cd4d47462acf06cf51f469b191ad5 b/RockOS/.git-backup/objects/7d/0387f3016cd4d47462acf06cf51f469b191ad5 new file mode 100644 index 0000000..4a64cb3 Binary files /dev/null and b/RockOS/.git-backup/objects/7d/0387f3016cd4d47462acf06cf51f469b191ad5 differ diff --git a/RockOS/.git-backup/objects/7d/03d0748b93d4a765e598263a981892a91790db b/RockOS/.git-backup/objects/7d/03d0748b93d4a765e598263a981892a91790db new file mode 100644 index 0000000..345c071 --- /dev/null +++ b/RockOS/.git-backup/objects/7d/03d0748b93d4a765e598263a981892a91790db @@ -0,0 +1,2 @@ +xuS]o0s~Ю@yMjihi^,'i&6Z::@P";\s /14ei4RʔV^{(ȕC +Ki=L櫸P FJckt!/z!{NTq`]4W:ER*^yxREы.QVfTN/Fg%jWqbjT%D,V.|={a 6itRRBk&|1AGZ!(%5a/o7 75 NfN7axcOI.-+۽̾Og75즱5"x6YțDeLuֹ(bjMnwfSMrJ~@L&%:pCv~㟋xk#Op<=װGqg3u%ܘGd;xI5D/%BUIEQ̃HtDrZu] G\,gkkg?B47PL]Ѽoi}(\XWH \ No newline at end of file diff --git a/RockOS/.git-backup/objects/7d/6250c99870b86fe84397ed6425cb21f27865a0 b/RockOS/.git-backup/objects/7d/6250c99870b86fe84397ed6425cb21f27865a0 new file mode 100644 index 0000000..db7517f Binary files /dev/null and b/RockOS/.git-backup/objects/7d/6250c99870b86fe84397ed6425cb21f27865a0 differ diff --git a/RockOS/.git-backup/objects/7d/73dfc5096d3e429e75bed4f2fda600134c49e5 b/RockOS/.git-backup/objects/7d/73dfc5096d3e429e75bed4f2fda600134c49e5 new file mode 100644 index 0000000..46ca601 --- /dev/null +++ b/RockOS/.git-backup/objects/7d/73dfc5096d3e429e75bed4f2fda600134c49e5 @@ -0,0 +1,2 @@ +x]K0}_qЗn92&:DHt K\džtZ)w_ߗT) !sxNE +[H{GBt~`)r \ No newline at end of file diff --git a/RockOS/.git-backup/objects/7e/de297d7a080511ceded72861aa7ee3fb9d32ad b/RockOS/.git-backup/objects/7e/de297d7a080511ceded72861aa7ee3fb9d32ad new file mode 100644 index 0000000..d770448 Binary files /dev/null and b/RockOS/.git-backup/objects/7e/de297d7a080511ceded72861aa7ee3fb9d32ad differ diff --git a/RockOS/.git-backup/objects/7f/220a1ab508ecd8a187c6c8b0b7981d67294287 b/RockOS/.git-backup/objects/7f/220a1ab508ecd8a187c6c8b0b7981d67294287 new file mode 100644 index 0000000..5105545 Binary files /dev/null and b/RockOS/.git-backup/objects/7f/220a1ab508ecd8a187c6c8b0b7981d67294287 differ diff --git a/RockOS/.git-backup/objects/7f/4ce6a52ef028b1c0733afe978983d0073e155b b/RockOS/.git-backup/objects/7f/4ce6a52ef028b1c0733afe978983d0073e155b new file mode 100644 index 0000000..7fbdf5f Binary files /dev/null and b/RockOS/.git-backup/objects/7f/4ce6a52ef028b1c0733afe978983d0073e155b differ diff --git a/RockOS/.git-backup/objects/7f/7d78d2926eb4536065da0d6a4110721026c9a7 b/RockOS/.git-backup/objects/7f/7d78d2926eb4536065da0d6a4110721026c9a7 new file mode 100644 index 0000000..bdba484 Binary files /dev/null and b/RockOS/.git-backup/objects/7f/7d78d2926eb4536065da0d6a4110721026c9a7 differ diff --git a/RockOS/.git-backup/objects/7f/e0f4c1133ed60db04cddef073dd4f2a04b685a b/RockOS/.git-backup/objects/7f/e0f4c1133ed60db04cddef073dd4f2a04b685a new file mode 100644 index 0000000..bbca562 Binary files /dev/null and b/RockOS/.git-backup/objects/7f/e0f4c1133ed60db04cddef073dd4f2a04b685a differ diff --git a/RockOS/.git-backup/objects/80/202f21228144f11bc54172560b251b15939635 b/RockOS/.git-backup/objects/80/202f21228144f11bc54172560b251b15939635 new file mode 100644 index 0000000..8642363 Binary files /dev/null and b/RockOS/.git-backup/objects/80/202f21228144f11bc54172560b251b15939635 differ diff --git a/RockOS/.git-backup/objects/80/adced21a756569badb40dfb15f7530bf16222a b/RockOS/.git-backup/objects/80/adced21a756569badb40dfb15f7530bf16222a new file mode 100644 index 0000000..7cfc042 Binary files /dev/null and b/RockOS/.git-backup/objects/80/adced21a756569badb40dfb15f7530bf16222a differ diff --git a/RockOS/.git-backup/objects/81/2cdeff0e830d04bc49c02a8295de12a156763d b/RockOS/.git-backup/objects/81/2cdeff0e830d04bc49c02a8295de12a156763d new file mode 100644 index 0000000..6e6ae62 Binary files /dev/null and b/RockOS/.git-backup/objects/81/2cdeff0e830d04bc49c02a8295de12a156763d differ diff --git a/RockOS/.git-backup/objects/81/7387a2dbedbc71b8dc0745f5bd62fb542f500f b/RockOS/.git-backup/objects/81/7387a2dbedbc71b8dc0745f5bd62fb542f500f new file mode 100644 index 0000000..30e1713 Binary files /dev/null and b/RockOS/.git-backup/objects/81/7387a2dbedbc71b8dc0745f5bd62fb542f500f differ diff --git a/RockOS/.git-backup/objects/82/0f5046608d8bb3eccadaf53b5ee3adf3150bfd b/RockOS/.git-backup/objects/82/0f5046608d8bb3eccadaf53b5ee3adf3150bfd new file mode 100644 index 0000000..6114d75 Binary files /dev/null and b/RockOS/.git-backup/objects/82/0f5046608d8bb3eccadaf53b5ee3adf3150bfd differ diff --git a/RockOS/.git-backup/objects/82/5e7829e665583fe75f417410ba035b36374e75 b/RockOS/.git-backup/objects/82/5e7829e665583fe75f417410ba035b36374e75 new file mode 100644 index 0000000..e605182 Binary files /dev/null and b/RockOS/.git-backup/objects/82/5e7829e665583fe75f417410ba035b36374e75 differ diff --git a/RockOS/.git-backup/objects/82/ee15bc77389169110478b33c4619e6bbbc7814 b/RockOS/.git-backup/objects/82/ee15bc77389169110478b33c4619e6bbbc7814 new file mode 100644 index 0000000..b3f5c82 Binary files /dev/null and b/RockOS/.git-backup/objects/82/ee15bc77389169110478b33c4619e6bbbc7814 differ diff --git a/RockOS/.git-backup/objects/83/181d5c1a03382397d84146232c55c24a0b4a31 b/RockOS/.git-backup/objects/83/181d5c1a03382397d84146232c55c24a0b4a31 new file mode 100644 index 0000000..d19cfc0 Binary files /dev/null and b/RockOS/.git-backup/objects/83/181d5c1a03382397d84146232c55c24a0b4a31 differ diff --git a/RockOS/.git-backup/objects/83/4d81d4355475665583bf21b8ce445a55fca77b b/RockOS/.git-backup/objects/83/4d81d4355475665583bf21b8ce445a55fca77b new file mode 100644 index 0000000..aa845fa Binary files /dev/null and b/RockOS/.git-backup/objects/83/4d81d4355475665583bf21b8ce445a55fca77b differ diff --git a/RockOS/.git-backup/objects/83/6d4cf51cbc2f0c3f7c68140563e5befd6d942f b/RockOS/.git-backup/objects/83/6d4cf51cbc2f0c3f7c68140563e5befd6d942f new file mode 100644 index 0000000..c60103e Binary files /dev/null and b/RockOS/.git-backup/objects/83/6d4cf51cbc2f0c3f7c68140563e5befd6d942f differ diff --git a/RockOS/.git-backup/objects/83/ca29a120c3212a7a567619a6488b151132af17 b/RockOS/.git-backup/objects/83/ca29a120c3212a7a567619a6488b151132af17 new file mode 100644 index 0000000..d8a73bf Binary files /dev/null and b/RockOS/.git-backup/objects/83/ca29a120c3212a7a567619a6488b151132af17 differ diff --git a/RockOS/.git-backup/objects/86/059c2e3f64054b10b8cef00488a7bcc6cda8b5 b/RockOS/.git-backup/objects/86/059c2e3f64054b10b8cef00488a7bcc6cda8b5 new file mode 100644 index 0000000..8c8eac0 --- /dev/null +++ b/RockOS/.git-backup/objects/86/059c2e3f64054b10b8cef00488a7bcc6cda8b5 @@ -0,0 +1,3 @@ +x_k0Oqp!iJJԌA!FZ,˱$ ߽WqZ&0A;MAxHzF;_R%h|ÔĬk%pg6\iLqrnJn?gns _[, '{ؘB.0PI南Ϫ,0vB*_]R< VяەA+< sӰw +&nxzJĝ%Y0ӟ7"_VjX1fs"5% +<-rn@S#QgnHvDݝfɸN ݃S31As:l/NJ?.๠;.Q{8Tlh<=r\]_/`R]e:KJfHi19ɇ{mԸy)s+5*]7?th kb v}+>t]/t[{K^^]~dm'T^J\`K<' o?1iG>c/< s +F8>|ΡD(Tlk[4AmT2 [9؍AM9.](ȱҶΐ2w->Pr&hqgji8 \eܑ9Ȟ@kJIְ#7(<'K7P7N;& ̰ _ǝg|E>ݵx~`{<4Uު 9̩{r~݉|y{t \ No newline at end of file diff --git a/RockOS/.git-backup/objects/87/40ef60b96955667331dff3722b283236474622 b/RockOS/.git-backup/objects/87/40ef60b96955667331dff3722b283236474622 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/87/f67ff034de98c1c86aaf8d700a7faa4b0721af b/RockOS/.git-backup/objects/87/f67ff034de98c1c86aaf8d700a7faa4b0721af new file mode 100644 index 0000000..833635d Binary files /dev/null and b/RockOS/.git-backup/objects/87/f67ff034de98c1c86aaf8d700a7faa4b0721af differ diff --git a/RockOS/.git-backup/objects/88/3fff2327d2161261c4464af12cd808d2b04e0c b/RockOS/.git-backup/objects/88/3fff2327d2161261c4464af12cd808d2b04e0c new file mode 100644 index 0000000..fc55b79 Binary files /dev/null and b/RockOS/.git-backup/objects/88/3fff2327d2161261c4464af12cd808d2b04e0c differ diff --git a/RockOS/.git-backup/objects/88/a43a04f05822f2ba5395e0cd7b571173baf07b b/RockOS/.git-backup/objects/88/a43a04f05822f2ba5395e0cd7b571173baf07b new file mode 100644 index 0000000..493ef31 Binary files /dev/null and b/RockOS/.git-backup/objects/88/a43a04f05822f2ba5395e0cd7b571173baf07b differ diff --git a/RockOS/.git-backup/objects/88/b661940dbe8ffbca3b26c0ea8e88e7f796b248 b/RockOS/.git-backup/objects/88/b661940dbe8ffbca3b26c0ea8e88e7f796b248 new file mode 100644 index 0000000..65d93ae Binary files /dev/null and b/RockOS/.git-backup/objects/88/b661940dbe8ffbca3b26c0ea8e88e7f796b248 differ diff --git a/RockOS/.git-backup/objects/88/e521c817ace3f07c15e9eeaa0a10e6c6fd4ef6 b/RockOS/.git-backup/objects/88/e521c817ace3f07c15e9eeaa0a10e6c6fd4ef6 new file mode 100644 index 0000000..0e0fd46 Binary files /dev/null and b/RockOS/.git-backup/objects/88/e521c817ace3f07c15e9eeaa0a10e6c6fd4ef6 differ diff --git a/RockOS/.git-backup/objects/88/fac703fee61569f10ede1ceb408946fc3f8c5e b/RockOS/.git-backup/objects/88/fac703fee61569f10ede1ceb408946fc3f8c5e new file mode 100644 index 0000000..1be45f8 Binary files /dev/null and b/RockOS/.git-backup/objects/88/fac703fee61569f10ede1ceb408946fc3f8c5e differ diff --git a/RockOS/.git-backup/objects/89/0328ff7de70253ce9b338642284439ac5d4128 b/RockOS/.git-backup/objects/89/0328ff7de70253ce9b338642284439ac5d4128 new file mode 100644 index 0000000..75560c5 Binary files /dev/null and b/RockOS/.git-backup/objects/89/0328ff7de70253ce9b338642284439ac5d4128 differ diff --git a/RockOS/.git-backup/objects/89/7753928b43a7ef927d5252086d6a2cdc8d24f0 b/RockOS/.git-backup/objects/89/7753928b43a7ef927d5252086d6a2cdc8d24f0 new file mode 100644 index 0000000..8f06245 Binary files /dev/null and b/RockOS/.git-backup/objects/89/7753928b43a7ef927d5252086d6a2cdc8d24f0 differ diff --git a/RockOS/.git-backup/objects/89/8e1f95a6b310e25ace8c18dc4a2d0473719df8 b/RockOS/.git-backup/objects/89/8e1f95a6b310e25ace8c18dc4a2d0473719df8 new file mode 100644 index 0000000..b2b9858 Binary files /dev/null and b/RockOS/.git-backup/objects/89/8e1f95a6b310e25ace8c18dc4a2d0473719df8 differ diff --git a/RockOS/.git-backup/objects/89/914e12e7c010a68fecdbfe73f47370e32ddf3f b/RockOS/.git-backup/objects/89/914e12e7c010a68fecdbfe73f47370e32ddf3f new file mode 100644 index 0000000..77b13cb Binary files /dev/null and b/RockOS/.git-backup/objects/89/914e12e7c010a68fecdbfe73f47370e32ddf3f differ diff --git a/RockOS/.git-backup/objects/89/a6d7b5788216b4aacc08c86d374606c49fd97c b/RockOS/.git-backup/objects/89/a6d7b5788216b4aacc08c86d374606c49fd97c new file mode 100644 index 0000000..02642b8 --- /dev/null +++ b/RockOS/.git-backup/objects/89/a6d7b5788216b4aacc08c86d374606c49fd97c @@ -0,0 +1,3 @@ +xeRj@}yM,PB0 +J'ie=*ݓЧ;ٝ)l[ofГ1JPK= a֔X{mn2d8 .w^; +ܢ t}[t *zxL`o q4֦j2SʸvSʚ"mb*q-R?[/֘b)=t`+LuJ~RjkEL?Ѵ]'Ѱ $R*i-(IW'DSC`;n.xQck*$@xCkq:=h˛;?NYj.LBq̽_69 .gO = R[5b?6mGJX^KfJ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/8a/407c77ee3434238aca4da3b2fbfb604433bbd7 b/RockOS/.git-backup/objects/8a/407c77ee3434238aca4da3b2fbfb604433bbd7 new file mode 100644 index 0000000..f348053 Binary files /dev/null and b/RockOS/.git-backup/objects/8a/407c77ee3434238aca4da3b2fbfb604433bbd7 differ diff --git a/RockOS/.git-backup/objects/8a/604cad5b440177fe0f79debcd492c0c575edcf b/RockOS/.git-backup/objects/8a/604cad5b440177fe0f79debcd492c0c575edcf new file mode 100644 index 0000000..ccff47b Binary files /dev/null and b/RockOS/.git-backup/objects/8a/604cad5b440177fe0f79debcd492c0c575edcf differ diff --git a/RockOS/.git-backup/objects/8a/6e27fec103b1f7608c511095409d1c153efaa8 b/RockOS/.git-backup/objects/8a/6e27fec103b1f7608c511095409d1c153efaa8 new file mode 100644 index 0000000..8fb3f02 Binary files /dev/null and b/RockOS/.git-backup/objects/8a/6e27fec103b1f7608c511095409d1c153efaa8 differ diff --git a/RockOS/.git-backup/objects/8a/9e607e34dc0c183b0559f000fe8c7b5522cea5 b/RockOS/.git-backup/objects/8a/9e607e34dc0c183b0559f000fe8c7b5522cea5 new file mode 100644 index 0000000..86de687 Binary files /dev/null and b/RockOS/.git-backup/objects/8a/9e607e34dc0c183b0559f000fe8c7b5522cea5 differ diff --git a/RockOS/.git-backup/objects/8b/26277b19c4f4a60600208f7c1e952a805b0a47 b/RockOS/.git-backup/objects/8b/26277b19c4f4a60600208f7c1e952a805b0a47 new file mode 100644 index 0000000..bad2cbf Binary files /dev/null and b/RockOS/.git-backup/objects/8b/26277b19c4f4a60600208f7c1e952a805b0a47 differ diff --git a/RockOS/.git-backup/objects/8b/f6c96a1ae9c292db9ab21d59a41f8b6bf30fa8 b/RockOS/.git-backup/objects/8b/f6c96a1ae9c292db9ab21d59a41f8b6bf30fa8 new file mode 100644 index 0000000..7ea53fd Binary files /dev/null and b/RockOS/.git-backup/objects/8b/f6c96a1ae9c292db9ab21d59a41f8b6bf30fa8 differ diff --git a/RockOS/.git-backup/objects/8c/1cd5114409dba9d43e3fdfd94a0fcae75a03c9 b/RockOS/.git-backup/objects/8c/1cd5114409dba9d43e3fdfd94a0fcae75a03c9 new file mode 100644 index 0000000..ca82a56 Binary files /dev/null and b/RockOS/.git-backup/objects/8c/1cd5114409dba9d43e3fdfd94a0fcae75a03c9 differ diff --git a/RockOS/.git-backup/objects/8c/61574f912eca4625bf6c4fe2a44c2070152b93 b/RockOS/.git-backup/objects/8c/61574f912eca4625bf6c4fe2a44c2070152b93 new file mode 100644 index 0000000..8c0324c Binary files /dev/null and b/RockOS/.git-backup/objects/8c/61574f912eca4625bf6c4fe2a44c2070152b93 differ diff --git a/RockOS/.git-backup/objects/8c/72caa8b24e3299eb0b994c4bbdcc97cd0fab68 b/RockOS/.git-backup/objects/8c/72caa8b24e3299eb0b994c4bbdcc97cd0fab68 new file mode 100644 index 0000000..c3d9b95 --- /dev/null +++ b/RockOS/.git-backup/objects/8c/72caa8b24e3299eb0b994c4bbdcc97cd0fab68 @@ -0,0 +1,2 @@ +xMMN1 YVYF` 9?(ܞ4l+rn +xg/lI$x,JQY'*U)+)ԧF*L{V56/|.- 5qxCgna<ԾH\k`Iӯq c \ No newline at end of file diff --git a/RockOS/.git-backup/objects/8c/7c02656f7469c26feba7a99c33ca0ad01a5fd3 b/RockOS/.git-backup/objects/8c/7c02656f7469c26feba7a99c33ca0ad01a5fd3 new file mode 100644 index 0000000..f5d22de Binary files /dev/null and b/RockOS/.git-backup/objects/8c/7c02656f7469c26feba7a99c33ca0ad01a5fd3 differ diff --git a/RockOS/.git-backup/objects/8c/90b014950c7b963c2a8e9af7adbbb49b10a0c3 b/RockOS/.git-backup/objects/8c/90b014950c7b963c2a8e9af7adbbb49b10a0c3 new file mode 100644 index 0000000..9cfab01 Binary files /dev/null and b/RockOS/.git-backup/objects/8c/90b014950c7b963c2a8e9af7adbbb49b10a0c3 differ diff --git a/RockOS/.git-backup/objects/8c/981bb9b360e8bcfbd74f6df2381dfd3f74ec01 b/RockOS/.git-backup/objects/8c/981bb9b360e8bcfbd74f6df2381dfd3f74ec01 new file mode 100644 index 0000000..f2c9db9 Binary files /dev/null and b/RockOS/.git-backup/objects/8c/981bb9b360e8bcfbd74f6df2381dfd3f74ec01 differ diff --git a/RockOS/.git-backup/objects/8c/b92c910d03cf2e9ff879eb60242069d22c82ec b/RockOS/.git-backup/objects/8c/b92c910d03cf2e9ff879eb60242069d22c82ec new file mode 100644 index 0000000..d2332d9 Binary files /dev/null and b/RockOS/.git-backup/objects/8c/b92c910d03cf2e9ff879eb60242069d22c82ec differ diff --git a/RockOS/.git-backup/objects/8d/0c312b7070c6ede659562711cf66172ee25360 b/RockOS/.git-backup/objects/8d/0c312b7070c6ede659562711cf66172ee25360 new file mode 100644 index 0000000..811211d Binary files /dev/null and b/RockOS/.git-backup/objects/8d/0c312b7070c6ede659562711cf66172ee25360 differ diff --git a/RockOS/.git-backup/objects/8d/16410b5faa1c18c12ac8e4a543f83b3acc7c71 b/RockOS/.git-backup/objects/8d/16410b5faa1c18c12ac8e4a543f83b3acc7c71 new file mode 100644 index 0000000..c208541 Binary files /dev/null and b/RockOS/.git-backup/objects/8d/16410b5faa1c18c12ac8e4a543f83b3acc7c71 differ diff --git a/RockOS/.git-backup/objects/8d/185503e283f9607fe2e87019d8ae726a7cec46 b/RockOS/.git-backup/objects/8d/185503e283f9607fe2e87019d8ae726a7cec46 new file mode 100644 index 0000000..219fb7e Binary files /dev/null and b/RockOS/.git-backup/objects/8d/185503e283f9607fe2e87019d8ae726a7cec46 differ diff --git a/RockOS/.git-backup/objects/8d/2cde8a4933938d4272d68e91d5aac50e623e9a b/RockOS/.git-backup/objects/8d/2cde8a4933938d4272d68e91d5aac50e623e9a new file mode 100644 index 0000000..0fde3c2 Binary files /dev/null and b/RockOS/.git-backup/objects/8d/2cde8a4933938d4272d68e91d5aac50e623e9a differ diff --git a/RockOS/.git-backup/objects/8d/61ab36a965c171eec0ee440addfd0a0afe7b4f b/RockOS/.git-backup/objects/8d/61ab36a965c171eec0ee440addfd0a0afe7b4f new file mode 100644 index 0000000..938c09c --- /dev/null +++ b/RockOS/.git-backup/objects/8d/61ab36a965c171eec0ee440addfd0a0afe7b4f @@ -0,0 +1 @@ +xj!{O1m=4P-B!y^e1YEgwO_9?hh`ȳCw}T]:b;u1)DrMLҫXvOZ Υ_m%'F H 7Db/LzxiG6q8Tlѐ2PjBJ{_rm̾6zf,_-X#  \ No newline at end of file diff --git a/RockOS/.git-backup/objects/8d/827933bc5e0f08bd1e078390fa87d9f1acdca0 b/RockOS/.git-backup/objects/8d/827933bc5e0f08bd1e078390fa87d9f1acdca0 new file mode 100644 index 0000000..c7ee0a9 Binary files /dev/null and b/RockOS/.git-backup/objects/8d/827933bc5e0f08bd1e078390fa87d9f1acdca0 differ diff --git a/RockOS/.git-backup/objects/8d/ca6c2daa3157cf1f7aed7786ea33fc9fe70165 b/RockOS/.git-backup/objects/8d/ca6c2daa3157cf1f7aed7786ea33fc9fe70165 new file mode 100644 index 0000000..e4def4d Binary files /dev/null and b/RockOS/.git-backup/objects/8d/ca6c2daa3157cf1f7aed7786ea33fc9fe70165 differ diff --git a/RockOS/.git-backup/objects/8e/89d910f07ebf910d96227a73dc002dca442cb6 b/RockOS/.git-backup/objects/8e/89d910f07ebf910d96227a73dc002dca442cb6 new file mode 100644 index 0000000..22aa758 --- /dev/null +++ b/RockOS/.git-backup/objects/8e/89d910f07ebf910d96227a73dc002dca442cb6 @@ -0,0 +1,3 @@ +xRMO0 _b 8Mbh-Y\9 bBkn$/ڑw7υB*n +} ^ Z!g}"@[vz;-ec +\׌Mƙ]er.=ʀcN,Wb@Eax'9F:_2H  m\6Tv~ xw8*]&]j#J,OfX5-!7W^pR>XckHp<CGՁCNF 7_81 g~8^#&/?GΊaGF \ No newline at end of file diff --git a/RockOS/.git-backup/objects/90/c2dc0a0fdbc651bdee1ce041d427d5056c9d76 b/RockOS/.git-backup/objects/90/c2dc0a0fdbc651bdee1ce041d427d5056c9d76 new file mode 100644 index 0000000..d0abebc Binary files /dev/null and b/RockOS/.git-backup/objects/90/c2dc0a0fdbc651bdee1ce041d427d5056c9d76 differ diff --git a/RockOS/.git-backup/objects/90/ff2f0f801979a4e32cb8a3727d665bfc96ca48 b/RockOS/.git-backup/objects/90/ff2f0f801979a4e32cb8a3727d665bfc96ca48 new file mode 100644 index 0000000..9d6ff7c Binary files /dev/null and b/RockOS/.git-backup/objects/90/ff2f0f801979a4e32cb8a3727d665bfc96ca48 differ diff --git a/RockOS/.git-backup/objects/91/4d3a1a10d9333c2314f24b204d93c6a5c3df2f b/RockOS/.git-backup/objects/91/4d3a1a10d9333c2314f24b204d93c6a5c3df2f new file mode 100644 index 0000000..4a44963 Binary files /dev/null and b/RockOS/.git-backup/objects/91/4d3a1a10d9333c2314f24b204d93c6a5c3df2f differ diff --git a/RockOS/.git-backup/objects/91/7996504e7d9e4baebfa864580952ca2acf21d5 b/RockOS/.git-backup/objects/91/7996504e7d9e4baebfa864580952ca2acf21d5 new file mode 100644 index 0000000..a38301d Binary files /dev/null and b/RockOS/.git-backup/objects/91/7996504e7d9e4baebfa864580952ca2acf21d5 differ diff --git a/RockOS/.git-backup/objects/92/748fd258852e50033777bf27697aea2c808b3a b/RockOS/.git-backup/objects/92/748fd258852e50033777bf27697aea2c808b3a new file mode 100644 index 0000000..2d69505 --- /dev/null +++ b/RockOS/.git-backup/objects/92/748fd258852e50033777bf27697aea2c808b3a @@ -0,0 +1,3 @@ +xYj1DSbi!*ela-Fr +*(<(JI6c(r;4l~x⵵3Z#mrg)B $Yc'FyoFNG} +||: , >$I)]f|cG7hJzs1$L} \ No newline at end of file diff --git a/RockOS/.git-backup/objects/92/aff0ef60836c603f7209d363fba7bcac05fbb7 b/RockOS/.git-backup/objects/92/aff0ef60836c603f7209d363fba7bcac05fbb7 new file mode 100644 index 0000000..b0abd72 Binary files /dev/null and b/RockOS/.git-backup/objects/92/aff0ef60836c603f7209d363fba7bcac05fbb7 differ diff --git a/RockOS/.git-backup/objects/93/1e612bbf4d57af19e1a0f0a495f6c33d1d20a0 b/RockOS/.git-backup/objects/93/1e612bbf4d57af19e1a0f0a495f6c33d1d20a0 new file mode 100644 index 0000000..6a6c5a4 Binary files /dev/null and b/RockOS/.git-backup/objects/93/1e612bbf4d57af19e1a0f0a495f6c33d1d20a0 differ diff --git a/RockOS/.git-backup/objects/93/59c8e3c6ec28a6aa4f83b30902e2a7986705ed b/RockOS/.git-backup/objects/93/59c8e3c6ec28a6aa4f83b30902e2a7986705ed new file mode 100644 index 0000000..275c7df Binary files /dev/null and b/RockOS/.git-backup/objects/93/59c8e3c6ec28a6aa4f83b30902e2a7986705ed differ diff --git a/RockOS/.git-backup/objects/94/0da0cd9abaae4dd4de77634c0c9948e485a01f b/RockOS/.git-backup/objects/94/0da0cd9abaae4dd4de77634c0c9948e485a01f new file mode 100644 index 0000000..930897a Binary files /dev/null and b/RockOS/.git-backup/objects/94/0da0cd9abaae4dd4de77634c0c9948e485a01f differ diff --git a/RockOS/.git-backup/objects/95/00ca5fe3cf06dc06a6724a8ef66885ccc826bd b/RockOS/.git-backup/objects/95/00ca5fe3cf06dc06a6724a8ef66885ccc826bd new file mode 100644 index 0000000..bd44305 Binary files /dev/null and b/RockOS/.git-backup/objects/95/00ca5fe3cf06dc06a6724a8ef66885ccc826bd differ diff --git a/RockOS/.git-backup/objects/95/1f6df57e462d5c9f922d8c598ce2fe5f2ee12e b/RockOS/.git-backup/objects/95/1f6df57e462d5c9f922d8c598ce2fe5f2ee12e new file mode 100644 index 0000000..24494bf Binary files /dev/null and b/RockOS/.git-backup/objects/95/1f6df57e462d5c9f922d8c598ce2fe5f2ee12e differ diff --git a/RockOS/.git-backup/objects/95/d318bbd48bee52252a1af9f86db337ce0a2ce6 b/RockOS/.git-backup/objects/95/d318bbd48bee52252a1af9f86db337ce0a2ce6 new file mode 100644 index 0000000..2a0c619 Binary files /dev/null and b/RockOS/.git-backup/objects/95/d318bbd48bee52252a1af9f86db337ce0a2ce6 differ diff --git a/RockOS/.git-backup/objects/95/e4db69954ae5a4dc9c87ebaadc15146d8dffa1 b/RockOS/.git-backup/objects/95/e4db69954ae5a4dc9c87ebaadc15146d8dffa1 new file mode 100644 index 0000000..e0b4319 Binary files /dev/null and b/RockOS/.git-backup/objects/95/e4db69954ae5a4dc9c87ebaadc15146d8dffa1 differ diff --git a/RockOS/.git-backup/objects/95/e58e5d5351e0a3f9f14f8e163d8efa1b58510b b/RockOS/.git-backup/objects/95/e58e5d5351e0a3f9f14f8e163d8efa1b58510b new file mode 100644 index 0000000..05ae393 --- /dev/null +++ b/RockOS/.git-backup/objects/95/e58e5d5351e0a3f9f14f8e163d8efa1b58510b @@ -0,0 +1,2 @@ +xm;o0;WXbI*!hp +D"HNKcPU!+:'>.;KTddi߈!a%dQ%PORH}{&Dp_B[x>Q{6i=^!K^,@q3-f䏶]SR\Lg:fpx%,YM=fGʒnWu+>y1g5mE/Tk=z)\7Ptα0MUvypn8ϴDc|2i (Kȇx-|8 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/96/0dd6c8717a317fe7e8f46cfd6f0a263e31d0c6 b/RockOS/.git-backup/objects/96/0dd6c8717a317fe7e8f46cfd6f0a263e31d0c6 new file mode 100644 index 0000000..52ccf24 Binary files /dev/null and b/RockOS/.git-backup/objects/96/0dd6c8717a317fe7e8f46cfd6f0a263e31d0c6 differ diff --git a/RockOS/.git-backup/objects/96/6170b9e7a01bae6786b0e3801f7615233efa80 b/RockOS/.git-backup/objects/96/6170b9e7a01bae6786b0e3801f7615233efa80 new file mode 100644 index 0000000..461a427 Binary files /dev/null and b/RockOS/.git-backup/objects/96/6170b9e7a01bae6786b0e3801f7615233efa80 differ diff --git a/RockOS/.git-backup/objects/97/2f484acfa7d91719828507c449a1addb781538 b/RockOS/.git-backup/objects/97/2f484acfa7d91719828507c449a1addb781538 new file mode 100644 index 0000000..12dcf8b Binary files /dev/null and b/RockOS/.git-backup/objects/97/2f484acfa7d91719828507c449a1addb781538 differ diff --git a/RockOS/.git-backup/objects/97/357f3170d59a64f9ac72eb1d06ec93172a9252 b/RockOS/.git-backup/objects/97/357f3170d59a64f9ac72eb1d06ec93172a9252 new file mode 100644 index 0000000..ff91137 --- /dev/null +++ b/RockOS/.git-backup/objects/97/357f3170d59a64f9ac72eb1d06ec93172a9252 @@ -0,0 +1,3 @@ +x[j0DU$A+ JVE$X +%~ g [y@}gII)ʓeboKeQ. \ No newline at end of file diff --git a/RockOS/.git-backup/objects/97/3821bf6e307a8538d818486f2fb7c491b3612d b/RockOS/.git-backup/objects/97/3821bf6e307a8538d818486f2fb7c491b3612d new file mode 100644 index 0000000..241e490 Binary files /dev/null and b/RockOS/.git-backup/objects/97/3821bf6e307a8538d818486f2fb7c491b3612d differ diff --git a/RockOS/.git-backup/objects/97/674fbf81e637e6223d1523cf7ff9a4b3179135 b/RockOS/.git-backup/objects/97/674fbf81e637e6223d1523cf7ff9a4b3179135 new file mode 100644 index 0000000..81b92c5 Binary files /dev/null and b/RockOS/.git-backup/objects/97/674fbf81e637e6223d1523cf7ff9a4b3179135 differ diff --git a/RockOS/.git-backup/objects/97/7aea94154e5c2e4eb42283aa5b0ce0af5cae9f b/RockOS/.git-backup/objects/97/7aea94154e5c2e4eb42283aa5b0ce0af5cae9f new file mode 100644 index 0000000..b55ad4a Binary files /dev/null and b/RockOS/.git-backup/objects/97/7aea94154e5c2e4eb42283aa5b0ce0af5cae9f differ diff --git a/RockOS/.git-backup/objects/97/84c9d24f20d9d69d9e08244bd885bfe9699277 b/RockOS/.git-backup/objects/97/84c9d24f20d9d69d9e08244bd885bfe9699277 new file mode 100644 index 0000000..478b438 Binary files /dev/null and b/RockOS/.git-backup/objects/97/84c9d24f20d9d69d9e08244bd885bfe9699277 differ diff --git a/RockOS/.git-backup/objects/98/1980316252671fc8da475c12a7c2738b10fa65 b/RockOS/.git-backup/objects/98/1980316252671fc8da475c12a7c2738b10fa65 new file mode 100644 index 0000000..45f0c05 --- /dev/null +++ b/RockOS/.git-backup/objects/98/1980316252671fc8da475c12a7c2738b10fa65 @@ -0,0 +1,3 @@ +xmAK1=E/. +MF,v۲I8lM%BXe2&/oز}g/k]sQێ}Jl04r4b)Flp=aDV B[ +~x_۹>3aIJ!23lt wH :0jMzsNSBkh(d>ֱ`} *?羺/4ÁQ_htv < \ No newline at end of file diff --git a/RockOS/.git-backup/objects/98/29246b8709197da3936b08b7ff959bb46e3f1b b/RockOS/.git-backup/objects/98/29246b8709197da3936b08b7ff959bb46e3f1b new file mode 100644 index 0000000..9cf772c Binary files /dev/null and b/RockOS/.git-backup/objects/98/29246b8709197da3936b08b7ff959bb46e3f1b differ diff --git a/RockOS/.git-backup/objects/98/4e0cbef17eceed29e8c5371a8aed608fc174b2 b/RockOS/.git-backup/objects/98/4e0cbef17eceed29e8c5371a8aed608fc174b2 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/98/847076c97494e688327e5295a0079331fd0493 b/RockOS/.git-backup/objects/98/847076c97494e688327e5295a0079331fd0493 new file mode 100644 index 0000000..3b9b77d Binary files /dev/null and b/RockOS/.git-backup/objects/98/847076c97494e688327e5295a0079331fd0493 differ diff --git a/RockOS/.git-backup/objects/98/8a042a5c281637f36fcee6172ea475e7340e54 b/RockOS/.git-backup/objects/98/8a042a5c281637f36fcee6172ea475e7340e54 new file mode 100644 index 0000000..7a2ce81 Binary files /dev/null and b/RockOS/.git-backup/objects/98/8a042a5c281637f36fcee6172ea475e7340e54 differ diff --git a/RockOS/.git-backup/objects/98/a2bccfdb7ed2c44b7dd890082f5736ced90449 b/RockOS/.git-backup/objects/98/a2bccfdb7ed2c44b7dd890082f5736ced90449 new file mode 100644 index 0000000..1ff4254 Binary files /dev/null and b/RockOS/.git-backup/objects/98/a2bccfdb7ed2c44b7dd890082f5736ced90449 differ diff --git a/RockOS/.git-backup/objects/98/bb642b369912631ac81eb29218884abc72a98f b/RockOS/.git-backup/objects/98/bb642b369912631ac81eb29218884abc72a98f new file mode 100644 index 0000000..47aecda Binary files /dev/null and b/RockOS/.git-backup/objects/98/bb642b369912631ac81eb29218884abc72a98f differ diff --git a/RockOS/.git-backup/objects/98/f53c984fb4712628e7126572097fba04db3d95 b/RockOS/.git-backup/objects/98/f53c984fb4712628e7126572097fba04db3d95 new file mode 100644 index 0000000..201f711 Binary files /dev/null and b/RockOS/.git-backup/objects/98/f53c984fb4712628e7126572097fba04db3d95 differ diff --git a/RockOS/.git-backup/objects/99/060e4ee24c717fc830840ad27c00fb66bdddb3 b/RockOS/.git-backup/objects/99/060e4ee24c717fc830840ad27c00fb66bdddb3 new file mode 100644 index 0000000..da3aab6 Binary files /dev/null and b/RockOS/.git-backup/objects/99/060e4ee24c717fc830840ad27c00fb66bdddb3 differ diff --git a/RockOS/.git-backup/objects/99/2bb72003f271870063f7a82dc3dc23a98d3c6d b/RockOS/.git-backup/objects/99/2bb72003f271870063f7a82dc3dc23a98d3c6d new file mode 100644 index 0000000..ce087b3 Binary files /dev/null and b/RockOS/.git-backup/objects/99/2bb72003f271870063f7a82dc3dc23a98d3c6d differ diff --git a/RockOS/.git-backup/objects/99/2ffd1f6bc5a31582327ab4b434e47fcab4afe4 b/RockOS/.git-backup/objects/99/2ffd1f6bc5a31582327ab4b434e47fcab4afe4 new file mode 100644 index 0000000..7494f3b Binary files /dev/null and b/RockOS/.git-backup/objects/99/2ffd1f6bc5a31582327ab4b434e47fcab4afe4 differ diff --git a/RockOS/.git-backup/objects/99/5eba33cf71679182cf1515bfbd94c10c9c4ff9 b/RockOS/.git-backup/objects/99/5eba33cf71679182cf1515bfbd94c10c9c4ff9 new file mode 100644 index 0000000..5d07c86 --- /dev/null +++ b/RockOS/.git-backup/objects/99/5eba33cf71679182cf1515bfbd94c10c9c4ff9 @@ -0,0 +1,2 @@ +x}Q]k0ݳ!ePBR]ݭ![r|A•RF{%=]I[WٗvD'28N2&SqR։q:hhzZNc׆,^+YrYB5{r6w,m +zS>Ma`2ey(ݒ kQL"yl&`wm8@{`EoKA#~[; ?0smLn}6: QeYDZS䣚[\E"]_:lŦ(WUM \ No newline at end of file diff --git a/RockOS/.git-backup/objects/99/be7814ebed5f2ffe2847e19bbc94550bcc1b45 b/RockOS/.git-backup/objects/99/be7814ebed5f2ffe2847e19bbc94550bcc1b45 new file mode 100644 index 0000000..6f9b2eb Binary files /dev/null and b/RockOS/.git-backup/objects/99/be7814ebed5f2ffe2847e19bbc94550bcc1b45 differ diff --git a/RockOS/.git-backup/objects/99/d530faa5dc41b91f0ce3ffc30803a4e3352b22 b/RockOS/.git-backup/objects/99/d530faa5dc41b91f0ce3ffc30803a4e3352b22 new file mode 100644 index 0000000..fbf3c29 Binary files /dev/null and b/RockOS/.git-backup/objects/99/d530faa5dc41b91f0ce3ffc30803a4e3352b22 differ diff --git a/RockOS/.git-backup/objects/9a/938a69a16066b97e6af1adb5e51a75d88ff745 b/RockOS/.git-backup/objects/9a/938a69a16066b97e6af1adb5e51a75d88ff745 new file mode 100644 index 0000000..e05abd6 Binary files /dev/null and b/RockOS/.git-backup/objects/9a/938a69a16066b97e6af1adb5e51a75d88ff745 differ diff --git a/RockOS/.git-backup/objects/9a/fe18ea29e39938c9f84235000e0b05cb1c5319 b/RockOS/.git-backup/objects/9a/fe18ea29e39938c9f84235000e0b05cb1c5319 new file mode 100644 index 0000000..6cb5312 Binary files /dev/null and b/RockOS/.git-backup/objects/9a/fe18ea29e39938c9f84235000e0b05cb1c5319 differ diff --git a/RockOS/.git-backup/objects/9b/3226d57035d9c395b3b53031bf3d72c286d31d b/RockOS/.git-backup/objects/9b/3226d57035d9c395b3b53031bf3d72c286d31d new file mode 100644 index 0000000..a41f47a Binary files /dev/null and b/RockOS/.git-backup/objects/9b/3226d57035d9c395b3b53031bf3d72c286d31d differ diff --git a/RockOS/.git-backup/objects/9b/39093933d3e7526044dea2a020de15c83bfcd6 b/RockOS/.git-backup/objects/9b/39093933d3e7526044dea2a020de15c83bfcd6 new file mode 100644 index 0000000..570e046 --- /dev/null +++ b/RockOS/.git-backup/objects/9b/39093933d3e7526044dea2a020de15c83bfcd6 @@ -0,0 +1 @@ +xRN0 弯r30MIp&n M*II:'&`ɉ, IZmn}` cBg@;:SNP T#xmj(GރzY-0&41'3#TVasml{;z< cON>;"~Xs k*':@>m8iCž/˟wazqenb J \ No newline at end of file diff --git a/RockOS/.git-backup/objects/9b/3b7513db27aa82e0d7919d2aed4ef92af2b557 b/RockOS/.git-backup/objects/9b/3b7513db27aa82e0d7919d2aed4ef92af2b557 new file mode 100644 index 0000000..be3ff6d --- /dev/null +++ b/RockOS/.git-backup/objects/9b/3b7513db27aa82e0d7919d2aed4ef92af2b557 @@ -0,0 +1,2 @@ +xeK +0D])Zf7`a`ΓQNlUqȌ?|FÒ ۲#[P;C肷qޟ7&e"x>$UЈz^/wYvg/9 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/9b/a830deb5186f62e99784e78091a239500cda91 b/RockOS/.git-backup/objects/9b/a830deb5186f62e99784e78091a239500cda91 new file mode 100644 index 0000000..9c98393 Binary files /dev/null and b/RockOS/.git-backup/objects/9b/a830deb5186f62e99784e78091a239500cda91 differ diff --git a/RockOS/.git-backup/objects/9b/faf88c01cca86b3e212c3d2794e7cf4a7989a2 b/RockOS/.git-backup/objects/9b/faf88c01cca86b3e212c3d2794e7cf4a7989a2 new file mode 100644 index 0000000..edd2443 Binary files /dev/null and b/RockOS/.git-backup/objects/9b/faf88c01cca86b3e212c3d2794e7cf4a7989a2 differ diff --git a/RockOS/.git-backup/objects/9c/c0949078aff9ceb60559f2b226dbd30bea1ad9 b/RockOS/.git-backup/objects/9c/c0949078aff9ceb60559f2b226dbd30bea1ad9 new file mode 100644 index 0000000..a7fab70 Binary files /dev/null and b/RockOS/.git-backup/objects/9c/c0949078aff9ceb60559f2b226dbd30bea1ad9 differ diff --git a/RockOS/.git-backup/objects/9d/074de7c931fcee40dccee6821f1c7c64209387 b/RockOS/.git-backup/objects/9d/074de7c931fcee40dccee6821f1c7c64209387 new file mode 100644 index 0000000..faaed5c Binary files /dev/null and b/RockOS/.git-backup/objects/9d/074de7c931fcee40dccee6821f1c7c64209387 differ diff --git a/RockOS/.git-backup/objects/9d/c8b3358595a434fe1a2d047f95500490cba36e b/RockOS/.git-backup/objects/9d/c8b3358595a434fe1a2d047f95500490cba36e new file mode 100644 index 0000000..245d75e Binary files /dev/null and b/RockOS/.git-backup/objects/9d/c8b3358595a434fe1a2d047f95500490cba36e differ diff --git a/RockOS/.git-backup/objects/9e/16bc63b38ccae8c19c737ee5ef6e69e7a93d8e b/RockOS/.git-backup/objects/9e/16bc63b38ccae8c19c737ee5ef6e69e7a93d8e new file mode 100644 index 0000000..e9ce90e Binary files /dev/null and b/RockOS/.git-backup/objects/9e/16bc63b38ccae8c19c737ee5ef6e69e7a93d8e differ diff --git a/RockOS/.git-backup/objects/9e/b18a39f48908e49311bb0a8ae4bc85c4df6539 b/RockOS/.git-backup/objects/9e/b18a39f48908e49311bb0a8ae4bc85c4df6539 new file mode 100644 index 0000000..bc2eaae Binary files /dev/null and b/RockOS/.git-backup/objects/9e/b18a39f48908e49311bb0a8ae4bc85c4df6539 differ diff --git a/RockOS/.git-backup/objects/9f/273691595d6e1d8d836bc66be3dc1a4fc6f370 b/RockOS/.git-backup/objects/9f/273691595d6e1d8d836bc66be3dc1a4fc6f370 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/9f/b428c7c12332a52451a891a1c61d0a4ebe66e1 b/RockOS/.git-backup/objects/9f/b428c7c12332a52451a891a1c61d0a4ebe66e1 new file mode 100644 index 0000000..c573292 Binary files /dev/null and b/RockOS/.git-backup/objects/9f/b428c7c12332a52451a891a1c61d0a4ebe66e1 differ diff --git a/RockOS/.git-backup/objects/a0/2ceb89f1179e5f4435fb1d0dfb359c5a5bb06a b/RockOS/.git-backup/objects/a0/2ceb89f1179e5f4435fb1d0dfb359c5a5bb06a new file mode 100644 index 0000000..1c11a78 Binary files /dev/null and b/RockOS/.git-backup/objects/a0/2ceb89f1179e5f4435fb1d0dfb359c5a5bb06a differ diff --git a/RockOS/.git-backup/objects/a0/496e26b5d95d44b9e6025848edac6af50eec21 b/RockOS/.git-backup/objects/a0/496e26b5d95d44b9e6025848edac6af50eec21 new file mode 100644 index 0000000..808e223 Binary files /dev/null and b/RockOS/.git-backup/objects/a0/496e26b5d95d44b9e6025848edac6af50eec21 differ diff --git a/RockOS/.git-backup/objects/a0/4e752ce1d1828fba687db8919e984d99d84ce1 b/RockOS/.git-backup/objects/a0/4e752ce1d1828fba687db8919e984d99d84ce1 new file mode 100644 index 0000000..d6d7b63 Binary files /dev/null and b/RockOS/.git-backup/objects/a0/4e752ce1d1828fba687db8919e984d99d84ce1 differ diff --git a/RockOS/.git-backup/objects/a0/a0fbcf83758e30033baee85dafd625ba32e523 b/RockOS/.git-backup/objects/a0/a0fbcf83758e30033baee85dafd625ba32e523 new file mode 100644 index 0000000..cc4ce47 Binary files /dev/null and b/RockOS/.git-backup/objects/a0/a0fbcf83758e30033baee85dafd625ba32e523 differ diff --git a/RockOS/.git-backup/objects/a0/d825efabee5c8c30800373444c2dbe083740c0 b/RockOS/.git-backup/objects/a0/d825efabee5c8c30800373444c2dbe083740c0 new file mode 100644 index 0000000..38aec3b --- /dev/null +++ b/RockOS/.git-backup/objects/a0/d825efabee5c8c30800373444c2dbe083740c0 @@ -0,0 +1,2 @@ +xU +0D=+r BI/Z(IdKmIB؃qcf?4󕦖p}wS)1C1#mwR5bmnAԱϦ@0qHy_jCi-k#c [4 8AV \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a1/7876a1e04023b7f6a291216c2c739d48383c73 b/RockOS/.git-backup/objects/a1/7876a1e04023b7f6a291216c2c739d48383c73 new file mode 100644 index 0000000..fbf0ed3 Binary files /dev/null and b/RockOS/.git-backup/objects/a1/7876a1e04023b7f6a291216c2c739d48383c73 differ diff --git a/RockOS/.git-backup/objects/a1/b3a2c93010f2de79ffda3100fbfb2588041b60 b/RockOS/.git-backup/objects/a1/b3a2c93010f2de79ffda3100fbfb2588041b60 new file mode 100644 index 0000000..13fc1b7 Binary files /dev/null and b/RockOS/.git-backup/objects/a1/b3a2c93010f2de79ffda3100fbfb2588041b60 differ diff --git a/RockOS/.git-backup/objects/a1/da4c238f5590afc0ceed3bb6baa3d551efc349 b/RockOS/.git-backup/objects/a1/da4c238f5590afc0ceed3bb6baa3d551efc349 new file mode 100644 index 0000000..173978a Binary files /dev/null and b/RockOS/.git-backup/objects/a1/da4c238f5590afc0ceed3bb6baa3d551efc349 differ diff --git a/RockOS/.git-backup/objects/a2/1f8c0d3f5b3052dea00acad25402f1ea812e6c b/RockOS/.git-backup/objects/a2/1f8c0d3f5b3052dea00acad25402f1ea812e6c new file mode 100644 index 0000000..3a259c6 Binary files /dev/null and b/RockOS/.git-backup/objects/a2/1f8c0d3f5b3052dea00acad25402f1ea812e6c differ diff --git a/RockOS/.git-backup/objects/a2/afb423e34e5e896a63b38da007eb4587e13c41 b/RockOS/.git-backup/objects/a2/afb423e34e5e896a63b38da007eb4587e13c41 new file mode 100644 index 0000000..95a793f Binary files /dev/null and b/RockOS/.git-backup/objects/a2/afb423e34e5e896a63b38da007eb4587e13c41 differ diff --git a/RockOS/.git-backup/objects/a2/e5c24951088458386f9a6d2186c8a6bcd66aec b/RockOS/.git-backup/objects/a2/e5c24951088458386f9a6d2186c8a6bcd66aec new file mode 100644 index 0000000..a15dc22 Binary files /dev/null and b/RockOS/.git-backup/objects/a2/e5c24951088458386f9a6d2186c8a6bcd66aec differ diff --git a/RockOS/.git-backup/objects/a3/a1a748000ffb6a8fa4276fda00c8bbc5c62b65 b/RockOS/.git-backup/objects/a3/a1a748000ffb6a8fa4276fda00c8bbc5c62b65 new file mode 100644 index 0000000..dcee1db Binary files /dev/null and b/RockOS/.git-backup/objects/a3/a1a748000ffb6a8fa4276fda00c8bbc5c62b65 differ diff --git a/RockOS/.git-backup/objects/a3/d10c615b554ec38ca5ab4eabf063d3743c9b28 b/RockOS/.git-backup/objects/a3/d10c615b554ec38ca5ab4eabf063d3743c9b28 new file mode 100644 index 0000000..6690953 Binary files /dev/null and b/RockOS/.git-backup/objects/a3/d10c615b554ec38ca5ab4eabf063d3743c9b28 differ diff --git a/RockOS/.git-backup/objects/a4/1ef5b8948c8da16d2b8cc51b346f5a37ad5743 b/RockOS/.git-backup/objects/a4/1ef5b8948c8da16d2b8cc51b346f5a37ad5743 new file mode 100644 index 0000000..f93a015 Binary files /dev/null and b/RockOS/.git-backup/objects/a4/1ef5b8948c8da16d2b8cc51b346f5a37ad5743 differ diff --git a/RockOS/.git-backup/objects/a4/348e228d8967f0ba016a63b50bb2efe925552e b/RockOS/.git-backup/objects/a4/348e228d8967f0ba016a63b50bb2efe925552e new file mode 100644 index 0000000..a6bee4a --- /dev/null +++ b/RockOS/.git-backup/objects/a4/348e228d8967f0ba016a63b50bb2efe925552e @@ -0,0 +1,2 @@ +x+)JMU047e040031QH.*1 fU̘'',9YAVQStj&?gx=3, ̼"kO8TaTQnbf^2C ׻2]W:pRp٩i9 s}4ιgM25) +YG \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a4/49b7d03cd55945c27523929fa2a1502dbc0dfa b/RockOS/.git-backup/objects/a4/49b7d03cd55945c27523929fa2a1502dbc0dfa new file mode 100644 index 0000000..9f22cc8 Binary files /dev/null and b/RockOS/.git-backup/objects/a4/49b7d03cd55945c27523929fa2a1502dbc0dfa differ diff --git a/RockOS/.git-backup/objects/a5/01b1913eab8f594fa9bf8141eadb87becc60fa b/RockOS/.git-backup/objects/a5/01b1913eab8f594fa9bf8141eadb87becc60fa new file mode 100644 index 0000000..e2ff32b Binary files /dev/null and b/RockOS/.git-backup/objects/a5/01b1913eab8f594fa9bf8141eadb87becc60fa differ diff --git a/RockOS/.git-backup/objects/a5/7071f9f949c53d2155f9de4fc55888d4c9f4f1 b/RockOS/.git-backup/objects/a5/7071f9f949c53d2155f9de4fc55888d4c9f4f1 new file mode 100644 index 0000000..de6eff7 --- /dev/null +++ b/RockOS/.git-backup/objects/a5/7071f9f949c53d2155f9de4fc55888d4c9f4f1 @@ -0,0 +1 @@ +xMQk0_qp0:6MD6B$u_2p[dL`Zga(a[B8?05|Ce榓1ÚK+f> a7d;v{+'o;3R+L`,,)vr{Mh"-y&m1lg\\!|WEtYѿSIvw <[}NK;]b|?F:Q#Dh QOI&& Ö9Ph%id"Խrb>{q \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a5/a7c6f7c4eab0edae0f40e5998039fe353ddf75 b/RockOS/.git-backup/objects/a5/a7c6f7c4eab0edae0f40e5998039fe353ddf75 new file mode 100644 index 0000000..41fb8fb Binary files /dev/null and b/RockOS/.git-backup/objects/a5/a7c6f7c4eab0edae0f40e5998039fe353ddf75 differ diff --git a/RockOS/.git-backup/objects/a5/a9ac725fb243f47f5f6e7176c3c03f0ceae0e9 b/RockOS/.git-backup/objects/a5/a9ac725fb243f47f5f6e7176c3c03f0ceae0e9 new file mode 100644 index 0000000..b46ade3 Binary files /dev/null and b/RockOS/.git-backup/objects/a5/a9ac725fb243f47f5f6e7176c3c03f0ceae0e9 differ diff --git a/RockOS/.git-backup/objects/a5/c7d593502d0df666746bd8539c88a92aa5d13c b/RockOS/.git-backup/objects/a5/c7d593502d0df666746bd8539c88a92aa5d13c new file mode 100644 index 0000000..a14ff8c Binary files /dev/null and b/RockOS/.git-backup/objects/a5/c7d593502d0df666746bd8539c88a92aa5d13c differ diff --git a/RockOS/.git-backup/objects/a5/ef950e5ad69101dbfaf3330e009ae7a1a9e6d6 b/RockOS/.git-backup/objects/a5/ef950e5ad69101dbfaf3330e009ae7a1a9e6d6 new file mode 100644 index 0000000..d57cb42 Binary files /dev/null and b/RockOS/.git-backup/objects/a5/ef950e5ad69101dbfaf3330e009ae7a1a9e6d6 differ diff --git a/RockOS/.git-backup/objects/a6/24f22ce131a799aaee5e4759757f4387c8fd30 b/RockOS/.git-backup/objects/a6/24f22ce131a799aaee5e4759757f4387c8fd30 new file mode 100644 index 0000000..56174c0 Binary files /dev/null and b/RockOS/.git-backup/objects/a6/24f22ce131a799aaee5e4759757f4387c8fd30 differ diff --git a/RockOS/.git-backup/objects/a6/c2f5e371d17ef59784440d38df436b35d091d5 b/RockOS/.git-backup/objects/a6/c2f5e371d17ef59784440d38df436b35d091d5 new file mode 100644 index 0000000..d3b2ca2 --- /dev/null +++ b/RockOS/.git-backup/objects/a6/c2f5e371d17ef59784440d38df436b35d091d5 @@ -0,0 +1,2 @@ +xmn w)|XMlR^tH,Dx96?~kx?˧[ ؑԄ8D906(jiG +>蜅LH4a_ <_eCk~& r'xn9lOź"ITTB/q)eڔ30f{-]o[ک ,?4!O|;dh2J?@z \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a6/ebd4a5433edd77203b6cd8719a69e899ebaa99 b/RockOS/.git-backup/objects/a6/ebd4a5433edd77203b6cd8719a69e899ebaa99 new file mode 100644 index 0000000..d1f44a0 Binary files /dev/null and b/RockOS/.git-backup/objects/a6/ebd4a5433edd77203b6cd8719a69e899ebaa99 differ diff --git a/RockOS/.git-backup/objects/a7/2030dc2b9db29396fddef73e263f4640578cdb b/RockOS/.git-backup/objects/a7/2030dc2b9db29396fddef73e263f4640578cdb new file mode 100644 index 0000000..7d99b2b Binary files /dev/null and b/RockOS/.git-backup/objects/a7/2030dc2b9db29396fddef73e263f4640578cdb differ diff --git a/RockOS/.git-backup/objects/a7/2075f99d52c0bf6ae9b3313857f192490f71de b/RockOS/.git-backup/objects/a7/2075f99d52c0bf6ae9b3313857f192490f71de new file mode 100644 index 0000000..e0f6ea1 Binary files /dev/null and b/RockOS/.git-backup/objects/a7/2075f99d52c0bf6ae9b3313857f192490f71de differ diff --git a/RockOS/.git-backup/objects/a7/3bcdd4fc15d70c4273cd80afbbabedde7d5a83 b/RockOS/.git-backup/objects/a7/3bcdd4fc15d70c4273cd80afbbabedde7d5a83 new file mode 100644 index 0000000..98533b5 Binary files /dev/null and b/RockOS/.git-backup/objects/a7/3bcdd4fc15d70c4273cd80afbbabedde7d5a83 differ diff --git a/RockOS/.git-backup/objects/a7/90a043350cfcb1fdd703dd25547bf732f1c953 b/RockOS/.git-backup/objects/a7/90a043350cfcb1fdd703dd25547bf732f1c953 new file mode 100644 index 0000000..f369b5d Binary files /dev/null and b/RockOS/.git-backup/objects/a7/90a043350cfcb1fdd703dd25547bf732f1c953 differ diff --git a/RockOS/.git-backup/objects/a7/c05d97027eb364d797a4b0be3385f8a010db0a b/RockOS/.git-backup/objects/a7/c05d97027eb364d797a4b0be3385f8a010db0a new file mode 100644 index 0000000..b6ef3f3 Binary files /dev/null and b/RockOS/.git-backup/objects/a7/c05d97027eb364d797a4b0be3385f8a010db0a differ diff --git a/RockOS/.git-backup/objects/a8/2a7aa1a4559d3e4b838f7f129266c20cc50ebd b/RockOS/.git-backup/objects/a8/2a7aa1a4559d3e4b838f7f129266c20cc50ebd new file mode 100644 index 0000000..4321ef4 Binary files /dev/null and b/RockOS/.git-backup/objects/a8/2a7aa1a4559d3e4b838f7f129266c20cc50ebd differ diff --git a/RockOS/.git-backup/objects/a8/470fc6ff69ae80f2022504944c6e84248b64f7 b/RockOS/.git-backup/objects/a8/470fc6ff69ae80f2022504944c6e84248b64f7 new file mode 100644 index 0000000..bcc8cef --- /dev/null +++ b/RockOS/.git-backup/objects/a8/470fc6ff69ae80f2022504944c6e84248b64f7 @@ -0,0 +1,3 @@ +xPj0Y_KjL  +diȒnRZV83;΅ޞ +z-|lVWV@Qڝ ‚Xs:t3@QWy4`@$5qF%2 Q%*3KJ9w҇,iNu08Ի"[1|Or#jбq.]zRzc_Z \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a8/9e9dbb212bb7e89625fb960124371435bd2e02 b/RockOS/.git-backup/objects/a8/9e9dbb212bb7e89625fb960124371435bd2e02 new file mode 100644 index 0000000..4ca06e4 Binary files /dev/null and b/RockOS/.git-backup/objects/a8/9e9dbb212bb7e89625fb960124371435bd2e02 differ diff --git a/RockOS/.git-backup/objects/a8/bb0de49a5c06922120493a3489ee9641f55175 b/RockOS/.git-backup/objects/a8/bb0de49a5c06922120493a3489ee9641f55175 new file mode 100644 index 0000000..8bb9518 --- /dev/null +++ b/RockOS/.git-backup/objects/a8/bb0de49a5c06922120493a3489ee9641f55175 @@ -0,0 +1,4 @@ +xm +0D=+rQ + +BlB-ɶߛc] &_ha n՜Nĕ>#usPj1l>$ MlHyRVuƆD $8O-T1h$XmzǶt4 K/ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/a8/d3d87705e2b73a78b7819f9a2bf628578b34f2 b/RockOS/.git-backup/objects/a8/d3d87705e2b73a78b7819f9a2bf628578b34f2 new file mode 100644 index 0000000..f007077 Binary files /dev/null and b/RockOS/.git-backup/objects/a8/d3d87705e2b73a78b7819f9a2bf628578b34f2 differ diff --git a/RockOS/.git-backup/objects/a8/f3fbfc07cb7d2577e1b4b01464299afd47f4c3 b/RockOS/.git-backup/objects/a8/f3fbfc07cb7d2577e1b4b01464299afd47f4c3 new file mode 100644 index 0000000..931f558 Binary files /dev/null and b/RockOS/.git-backup/objects/a8/f3fbfc07cb7d2577e1b4b01464299afd47f4c3 differ diff --git a/RockOS/.git-backup/objects/a9/203f79901570be461327d8971e781053f3d433 b/RockOS/.git-backup/objects/a9/203f79901570be461327d8971e781053f3d433 new file mode 100644 index 0000000..9a0839b Binary files /dev/null and b/RockOS/.git-backup/objects/a9/203f79901570be461327d8971e781053f3d433 differ diff --git a/RockOS/.git-backup/objects/a9/8fd2bfb986b5b8b64134a80b72790b8007013c b/RockOS/.git-backup/objects/a9/8fd2bfb986b5b8b64134a80b72790b8007013c new file mode 100644 index 0000000..c571d7b Binary files /dev/null and b/RockOS/.git-backup/objects/a9/8fd2bfb986b5b8b64134a80b72790b8007013c differ diff --git a/RockOS/.git-backup/objects/a9/ee3a40c3cf0922e24d14abf5f2eff64586bc2a b/RockOS/.git-backup/objects/a9/ee3a40c3cf0922e24d14abf5f2eff64586bc2a new file mode 100644 index 0000000..eb89527 Binary files /dev/null and b/RockOS/.git-backup/objects/a9/ee3a40c3cf0922e24d14abf5f2eff64586bc2a differ diff --git a/RockOS/.git-backup/objects/aa/00c4e67ca40da9eecdc7bc6af4c703768b7a1c b/RockOS/.git-backup/objects/aa/00c4e67ca40da9eecdc7bc6af4c703768b7a1c new file mode 100644 index 0000000..baa0908 Binary files /dev/null and b/RockOS/.git-backup/objects/aa/00c4e67ca40da9eecdc7bc6af4c703768b7a1c differ diff --git a/RockOS/.git-backup/objects/aa/ad673d6ad73dad42998e04ab611f53f68d300d b/RockOS/.git-backup/objects/aa/ad673d6ad73dad42998e04ab611f53f68d300d new file mode 100644 index 0000000..29c3e29 Binary files /dev/null and b/RockOS/.git-backup/objects/aa/ad673d6ad73dad42998e04ab611f53f68d300d differ diff --git a/RockOS/.git-backup/objects/ab/253a872569668624e816d3cc2a535cbee16270 b/RockOS/.git-backup/objects/ab/253a872569668624e816d3cc2a535cbee16270 new file mode 100644 index 0000000..62636ff Binary files /dev/null and b/RockOS/.git-backup/objects/ab/253a872569668624e816d3cc2a535cbee16270 differ diff --git a/RockOS/.git-backup/objects/ab/3ca1771162392272675aab01459307753a086b b/RockOS/.git-backup/objects/ab/3ca1771162392272675aab01459307753a086b new file mode 100644 index 0000000..6f67921 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/3ca1771162392272675aab01459307753a086b differ diff --git a/RockOS/.git-backup/objects/ab/48ef9b83b634df57553fba381454b531833348 b/RockOS/.git-backup/objects/ab/48ef9b83b634df57553fba381454b531833348 new file mode 100644 index 0000000..62927d0 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/48ef9b83b634df57553fba381454b531833348 differ diff --git a/RockOS/.git-backup/objects/ab/4ddb4f3186eb238dd954728aefe24365fd3574 b/RockOS/.git-backup/objects/ab/4ddb4f3186eb238dd954728aefe24365fd3574 new file mode 100644 index 0000000..dba50a2 --- /dev/null +++ b/RockOS/.git-backup/objects/ab/4ddb4f3186eb238dd954728aefe24365fd3574 @@ -0,0 +1,2 @@ +xmAo19xj/inBHH  q,;kG%.n+Ǟx-[( CLcUwѲ%zR!Ha7h ־WA3J:Q9F._KdmߟOյ5v0i,e"28eЄ@ȍ HRB$&y +㦃B2B0H<㿩Is.?x ߟ, )B\( adN/ΏPW3BYhR>Dc'?یF)_Ԥ:qSI(?J#) #%d͏fbcQ{51}^Z \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ab/59a844f264fcacebb70a711208c97cf06341ce b/RockOS/.git-backup/objects/ab/59a844f264fcacebb70a711208c97cf06341ce new file mode 100644 index 0000000..4f72575 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/59a844f264fcacebb70a711208c97cf06341ce differ diff --git a/RockOS/.git-backup/objects/ab/5a1ecb6b88d7bd6dcbbcadcbff009eef7157c8 b/RockOS/.git-backup/objects/ab/5a1ecb6b88d7bd6dcbbcadcbff009eef7157c8 new file mode 100644 index 0000000..234acae --- /dev/null +++ b/RockOS/.git-backup/objects/ab/5a1ecb6b88d7bd6dcbbcadcbff009eef7157c8 @@ -0,0 +1,2 @@ +xKn0 )x(2P +%ӎP}KYVxX_Tne^Hp"5,YSNɲWȓj(a]1vBϩ'"UQ$/̋Dd.{r=R!RhdIS \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ab/80e57365d95ca0f7a2f329369cfc8c648e595a b/RockOS/.git-backup/objects/ab/80e57365d95ca0f7a2f329369cfc8c648e595a new file mode 100644 index 0000000..f707a2c Binary files /dev/null and b/RockOS/.git-backup/objects/ab/80e57365d95ca0f7a2f329369cfc8c648e595a differ diff --git a/RockOS/.git-backup/objects/ab/aa7c60ec7eed32049d1d488766b88bc7be8e54 b/RockOS/.git-backup/objects/ab/aa7c60ec7eed32049d1d488766b88bc7be8e54 new file mode 100644 index 0000000..f6199f9 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/aa7c60ec7eed32049d1d488766b88bc7be8e54 differ diff --git a/RockOS/.git-backup/objects/ab/acc8d292bcc8b38045da35c61e03983a3a07f7 b/RockOS/.git-backup/objects/ab/acc8d292bcc8b38045da35c61e03983a3a07f7 new file mode 100644 index 0000000..3377a99 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/acc8d292bcc8b38045da35c61e03983a3a07f7 differ diff --git a/RockOS/.git-backup/objects/ab/d743f473db8b45de0a8250fa5147a2536eb8de b/RockOS/.git-backup/objects/ab/d743f473db8b45de0a8250fa5147a2536eb8de new file mode 100644 index 0000000..79a2196 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/d743f473db8b45de0a8250fa5147a2536eb8de differ diff --git a/RockOS/.git-backup/objects/ab/e7ab7fc0a654f4123bfcabf9c7162f184b255d b/RockOS/.git-backup/objects/ab/e7ab7fc0a654f4123bfcabf9c7162f184b255d new file mode 100644 index 0000000..a744663 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/e7ab7fc0a654f4123bfcabf9c7162f184b255d differ diff --git a/RockOS/.git-backup/objects/ab/fe4a0c565d8db81b278158a1f8300c2c045889 b/RockOS/.git-backup/objects/ab/fe4a0c565d8db81b278158a1f8300c2c045889 new file mode 100644 index 0000000..fa8ad07 Binary files /dev/null and b/RockOS/.git-backup/objects/ab/fe4a0c565d8db81b278158a1f8300c2c045889 differ diff --git a/RockOS/.git-backup/objects/ac/17d221cb595afa5ad4c95d622b99d91c8bd1f4 b/RockOS/.git-backup/objects/ac/17d221cb595afa5ad4c95d622b99d91c8bd1f4 new file mode 100644 index 0000000..39e926f --- /dev/null +++ b/RockOS/.git-backup/objects/ac/17d221cb595afa5ad4c95d622b99d91c8bd1f4 @@ -0,0 +1 @@ +xR]K@9PAmvkYPl}R 4L-$UKr?8N\?//3Ihe<2z{`KL_EAgp VTc*c ng”Z/MH4*+z(u*MJ160"+'9<ˢ{J*Zf*&r2~ gω v.NNZs4ɸ^ձ;oZ1b*JYTĹ]%Ш+z E]Cm+@'dw|Lt(NR:iMu"Dr&݆yJ]%YIwlX/\&!욞 wzwC}+fd~?]w \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ac/2cf0c9d4abf20613fa7eece8d430fa9b517430 b/RockOS/.git-backup/objects/ac/2cf0c9d4abf20613fa7eece8d430fa9b517430 new file mode 100644 index 0000000..3989a26 Binary files /dev/null and b/RockOS/.git-backup/objects/ac/2cf0c9d4abf20613fa7eece8d430fa9b517430 differ diff --git a/RockOS/.git-backup/objects/ac/380e2d5273b98bcca2e98528aec16ae25b120b b/RockOS/.git-backup/objects/ac/380e2d5273b98bcca2e98528aec16ae25b120b new file mode 100644 index 0000000..dc49e41 Binary files /dev/null and b/RockOS/.git-backup/objects/ac/380e2d5273b98bcca2e98528aec16ae25b120b differ diff --git a/RockOS/.git-backup/objects/ac/4b510221717936555ca3e478f27f1bf6b46399 b/RockOS/.git-backup/objects/ac/4b510221717936555ca3e478f27f1bf6b46399 new file mode 100644 index 0000000..3ebf92f Binary files /dev/null and b/RockOS/.git-backup/objects/ac/4b510221717936555ca3e478f27f1bf6b46399 differ diff --git a/RockOS/.git-backup/objects/ac/a1f3db5eb9a233eeb65833cc75a4d84ca7f19c b/RockOS/.git-backup/objects/ac/a1f3db5eb9a233eeb65833cc75a4d84ca7f19c new file mode 100644 index 0000000..66aebe5 Binary files /dev/null and b/RockOS/.git-backup/objects/ac/a1f3db5eb9a233eeb65833cc75a4d84ca7f19c differ diff --git a/RockOS/.git-backup/objects/ac/dcaacf9e29d0368f068d76b3f342581bebaec7 b/RockOS/.git-backup/objects/ac/dcaacf9e29d0368f068d76b3f342581bebaec7 new file mode 100644 index 0000000..f82d58b Binary files /dev/null and b/RockOS/.git-backup/objects/ac/dcaacf9e29d0368f068d76b3f342581bebaec7 differ diff --git a/RockOS/.git-backup/objects/ac/f0dfe4ccfcc1d064888042f99e07d8abc90e78 b/RockOS/.git-backup/objects/ac/f0dfe4ccfcc1d064888042f99e07d8abc90e78 new file mode 100644 index 0000000..8e5ea2c Binary files /dev/null and b/RockOS/.git-backup/objects/ac/f0dfe4ccfcc1d064888042f99e07d8abc90e78 differ diff --git a/RockOS/.git-backup/objects/ad/a386e50847b23ac412f400e7883ba318f7b239 b/RockOS/.git-backup/objects/ad/a386e50847b23ac412f400e7883ba318f7b239 new file mode 100644 index 0000000..cdcb3ac Binary files /dev/null and b/RockOS/.git-backup/objects/ad/a386e50847b23ac412f400e7883ba318f7b239 differ diff --git a/RockOS/.git-backup/objects/ad/b7d2a98e62feb43e948dc4ca443946402379cc b/RockOS/.git-backup/objects/ad/b7d2a98e62feb43e948dc4ca443946402379cc new file mode 100644 index 0000000..51a768d Binary files /dev/null and b/RockOS/.git-backup/objects/ad/b7d2a98e62feb43e948dc4ca443946402379cc differ diff --git a/RockOS/.git-backup/objects/ae/358a6cd521ba14b8bc5cca597b6298b5af7818 b/RockOS/.git-backup/objects/ae/358a6cd521ba14b8bc5cca597b6298b5af7818 new file mode 100644 index 0000000..9f57a8e Binary files /dev/null and b/RockOS/.git-backup/objects/ae/358a6cd521ba14b8bc5cca597b6298b5af7818 differ diff --git a/RockOS/.git-backup/objects/ae/4b6863bf686ff2d0b26c0a70f37c84fc9e4e0a b/RockOS/.git-backup/objects/ae/4b6863bf686ff2d0b26c0a70f37c84fc9e4e0a new file mode 100644 index 0000000..098eee4 --- /dev/null +++ b/RockOS/.git-backup/objects/ae/4b6863bf686ff2d0b26c0a70f37c84fc9e4e0a @@ -0,0 +1 @@ +xi1a?i Aq+#id/^VƤ(%rom [24J#[iRuʫ7 >&PYX L*sY˜Qr*^v<kO~ 3vC{MR>&peS'Lf \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ae/76fcac503eef171fc6df33677229064b725a4b b/RockOS/.git-backup/objects/ae/76fcac503eef171fc6df33677229064b725a4b new file mode 100644 index 0000000..3cff95e Binary files /dev/null and b/RockOS/.git-backup/objects/ae/76fcac503eef171fc6df33677229064b725a4b differ diff --git a/RockOS/.git-backup/objects/ae/c34cec5349c78022ded9782fd11c754e70b0af b/RockOS/.git-backup/objects/ae/c34cec5349c78022ded9782fd11c754e70b0af new file mode 100644 index 0000000..f2775fe Binary files /dev/null and b/RockOS/.git-backup/objects/ae/c34cec5349c78022ded9782fd11c754e70b0af differ diff --git a/RockOS/.git-backup/objects/ae/fd570a907f34edf1c4842a534797d4969daff4 b/RockOS/.git-backup/objects/ae/fd570a907f34edf1c4842a534797d4969daff4 new file mode 100644 index 0000000..455cc0c --- /dev/null +++ b/RockOS/.git-backup/objects/ae/fd570a907f34edf1c4842a534797d4969daff4 @@ -0,0 +1,4 @@ +xU]k0ݳ~Ņ̐@#QC9ȖۯՕlNUY>ҽ:::vk!7k` #s +V2<+^UV6I[ΡR %8 ^ +W+ , d3Hx9v<ߵTgOҧ>Mil[Za=nj)p0#@b ϫOX#7N@jid_Ó,LtFD:j] #~';/#R2/x;pP]n2h1h΅hƚg>2߄\9" 6>ʒQ]k+M`0-xXpLD[ vbTdwhhP_P-dZ!m~͆po'G+3q: \ No newline at end of file diff --git a/RockOS/.git-backup/objects/af/62593e946344e6a213e3658021638fc2228905 b/RockOS/.git-backup/objects/af/62593e946344e6a213e3658021638fc2228905 new file mode 100644 index 0000000..5351688 --- /dev/null +++ b/RockOS/.git-backup/objects/af/62593e946344e6a213e3658021638fc2228905 @@ -0,0 +1 @@ +x+)JMU02`040031QK,L/Jey4V̝&g3AU%dļb<Dž]\OO^X}r$t]g(ۺ\2vGM @!;(/5yjbS+4eYM(LJf0VAyO^W8aԎ4K䇹(gr:bDAQ~zQbn1Îol`tdd]kj \ No newline at end of file diff --git a/RockOS/.git-backup/objects/af/6c1c94cffa4197296a23efde18425220ea6438 b/RockOS/.git-backup/objects/af/6c1c94cffa4197296a23efde18425220ea6438 new file mode 100644 index 0000000..5f7d16d --- /dev/null +++ b/RockOS/.git-backup/objects/af/6c1c94cffa4197296a23efde18425220ea6438 @@ -0,0 +1,2 @@ +xYj0DS Z!\EK-Fˠ1}#xŃb5ÓHAђ" y%9gvJ&Dm Xh +9;`9y0w'ntl_2 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/af/6fcb7961a5055f8ffada31a4f802bfeea348c8 b/RockOS/.git-backup/objects/af/6fcb7961a5055f8ffada31a4f802bfeea348c8 new file mode 100644 index 0000000..fd86ebb Binary files /dev/null and b/RockOS/.git-backup/objects/af/6fcb7961a5055f8ffada31a4f802bfeea348c8 differ diff --git a/RockOS/.git-backup/objects/af/9814c4b55ab440a9e725f6e70e2c1e279b2196 b/RockOS/.git-backup/objects/af/9814c4b55ab440a9e725f6e70e2c1e279b2196 new file mode 100644 index 0000000..9215360 Binary files /dev/null and b/RockOS/.git-backup/objects/af/9814c4b55ab440a9e725f6e70e2c1e279b2196 differ diff --git a/RockOS/.git-backup/objects/af/eebd1abb969f477d79fca3e708ac7b5e68ba5e b/RockOS/.git-backup/objects/af/eebd1abb969f477d79fca3e708ac7b5e68ba5e new file mode 100644 index 0000000..aab15ea Binary files /dev/null and b/RockOS/.git-backup/objects/af/eebd1abb969f477d79fca3e708ac7b5e68ba5e differ diff --git a/RockOS/.git-backup/objects/b0/e15548e6d44162ecd327bae69456033274a96a b/RockOS/.git-backup/objects/b0/e15548e6d44162ecd327bae69456033274a96a new file mode 100644 index 0000000..111c7e5 Binary files /dev/null and b/RockOS/.git-backup/objects/b0/e15548e6d44162ecd327bae69456033274a96a differ diff --git a/RockOS/.git-backup/objects/b1/a3dc2bb350c8ca21dd144622f59f609664be47 b/RockOS/.git-backup/objects/b1/a3dc2bb350c8ca21dd144622f59f609664be47 new file mode 100644 index 0000000..0e1a65c Binary files /dev/null and b/RockOS/.git-backup/objects/b1/a3dc2bb350c8ca21dd144622f59f609664be47 differ diff --git a/RockOS/.git-backup/objects/b1/e9a738c29e71e0f88b281980d6a2f310a37548 b/RockOS/.git-backup/objects/b1/e9a738c29e71e0f88b281980d6a2f310a37548 new file mode 100644 index 0000000..dae8819 Binary files /dev/null and b/RockOS/.git-backup/objects/b1/e9a738c29e71e0f88b281980d6a2f310a37548 differ diff --git a/RockOS/.git-backup/objects/b2/f3d65778e03c91fe53aac30abd672d5fd1e1ee b/RockOS/.git-backup/objects/b2/f3d65778e03c91fe53aac30abd672d5fd1e1ee new file mode 100644 index 0000000..a073a35 Binary files /dev/null and b/RockOS/.git-backup/objects/b2/f3d65778e03c91fe53aac30abd672d5fd1e1ee differ diff --git a/RockOS/.git-backup/objects/b3/026014353234be5cec6c03d3ae32c6f7b3c709 b/RockOS/.git-backup/objects/b3/026014353234be5cec6c03d3ae32c6f7b3c709 new file mode 100644 index 0000000..dbcd672 --- /dev/null +++ b/RockOS/.git-backup/objects/b3/026014353234be5cec6c03d3ae32c6f7b3c709 @@ -0,0 +1,4 @@ +xmAo1{xPKjE zY֭F4R~|Bh97~37nG[q ʻ^}/um"*c nUHRMX5%Qa) +ZM'+ +xor4Gצzr}@L&Jk{/DTNSz:^̿,WqtAz$˭mcNrw`1Wչ{_A&RJt ; ?G/ @3um/_Y_OGW٩ۜQE" +" o*[O:r\Oo"gX{~Q"E&Ƅ3Z!8>tUyhG5)M!AS<-g+mO/nzg \ No newline at end of file diff --git a/RockOS/.git-backup/objects/b3/3b4c698cb117501095128fc0164db0cb9f38f9 b/RockOS/.git-backup/objects/b3/3b4c698cb117501095128fc0164db0cb9f38f9 new file mode 100644 index 0000000..801583d Binary files /dev/null and b/RockOS/.git-backup/objects/b3/3b4c698cb117501095128fc0164db0cb9f38f9 differ diff --git a/RockOS/.git-backup/objects/b3/73cf2b995103da2df4e08407a952474160a4a4 b/RockOS/.git-backup/objects/b3/73cf2b995103da2df4e08407a952474160a4a4 new file mode 100644 index 0000000..32cd466 Binary files /dev/null and b/RockOS/.git-backup/objects/b3/73cf2b995103da2df4e08407a952474160a4a4 differ diff --git a/RockOS/.git-backup/objects/b3/7d3ae436af5224b5481899a542d17ef7f28665 b/RockOS/.git-backup/objects/b3/7d3ae436af5224b5481899a542d17ef7f28665 new file mode 100644 index 0000000..9849397 Binary files /dev/null and b/RockOS/.git-backup/objects/b3/7d3ae436af5224b5481899a542d17ef7f28665 differ diff --git a/RockOS/.git-backup/objects/b3/84723dbdecc59099db9580aa1473098000f286 b/RockOS/.git-backup/objects/b3/84723dbdecc59099db9580aa1473098000f286 new file mode 100644 index 0000000..cd0f8cd --- /dev/null +++ b/RockOS/.git-backup/objects/b3/84723dbdecc59099db9580aa1473098000f286 @@ -0,0 +1 @@ +xA @Qל h2AK1-]x{۟V-:>MJH1DFAGb@=<lv;d4e@,~)@Ɛ5$A89mv_!e2/ͺ `~ivG) sBc \ No newline at end of file diff --git a/RockOS/.git-backup/objects/b3/bef26f954bc5312cff87c2ac383dc653aa72b4 b/RockOS/.git-backup/objects/b3/bef26f954bc5312cff87c2ac383dc653aa72b4 new file mode 100644 index 0000000..afbfd00 Binary files /dev/null and b/RockOS/.git-backup/objects/b3/bef26f954bc5312cff87c2ac383dc653aa72b4 differ diff --git a/RockOS/.git-backup/objects/b4/051009780564d44af4d99889d6208ab8592ff2 b/RockOS/.git-backup/objects/b4/051009780564d44af4d99889d6208ab8592ff2 new file mode 100644 index 0000000..5adfe10 Binary files /dev/null and b/RockOS/.git-backup/objects/b4/051009780564d44af4d99889d6208ab8592ff2 differ diff --git a/RockOS/.git-backup/objects/b4/7187f078696623af1da04cbfbf5458db577e09 b/RockOS/.git-backup/objects/b4/7187f078696623af1da04cbfbf5458db577e09 new file mode 100644 index 0000000..3ca2b7d Binary files /dev/null and b/RockOS/.git-backup/objects/b4/7187f078696623af1da04cbfbf5458db577e09 differ diff --git a/RockOS/.git-backup/objects/b4/b9469ae147fe1e259db992fd037d9d718efd8e b/RockOS/.git-backup/objects/b4/b9469ae147fe1e259db992fd037d9d718efd8e new file mode 100644 index 0000000..15d1b6f Binary files /dev/null and b/RockOS/.git-backup/objects/b4/b9469ae147fe1e259db992fd037d9d718efd8e differ diff --git a/RockOS/.git-backup/objects/b5/0d52f45a66d87da46ddf89e942c562d2ce47c1 b/RockOS/.git-backup/objects/b5/0d52f45a66d87da46ddf89e942c562d2ce47c1 new file mode 100644 index 0000000..ab4d825 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/0d52f45a66d87da46ddf89e942c562d2ce47c1 differ diff --git a/RockOS/.git-backup/objects/b5/4d4fa14ca9f15389f851fbcfca2e764c5350ae b/RockOS/.git-backup/objects/b5/4d4fa14ca9f15389f851fbcfca2e764c5350ae new file mode 100644 index 0000000..606ddb4 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/4d4fa14ca9f15389f851fbcfca2e764c5350ae differ diff --git a/RockOS/.git-backup/objects/b5/66f59d0cb97f16807db9e639c87f4245c00310 b/RockOS/.git-backup/objects/b5/66f59d0cb97f16807db9e639c87f4245c00310 new file mode 100644 index 0000000..60bca5a Binary files /dev/null and b/RockOS/.git-backup/objects/b5/66f59d0cb97f16807db9e639c87f4245c00310 differ diff --git a/RockOS/.git-backup/objects/b5/8cefa5276d4d289300669d16429a417c4412d9 b/RockOS/.git-backup/objects/b5/8cefa5276d4d289300669d16429a417c4412d9 new file mode 100644 index 0000000..68880db Binary files /dev/null and b/RockOS/.git-backup/objects/b5/8cefa5276d4d289300669d16429a417c4412d9 differ diff --git a/RockOS/.git-backup/objects/b5/91d5717dfddcf1402ffc74fb4b7eb6d063dc66 b/RockOS/.git-backup/objects/b5/91d5717dfddcf1402ffc74fb4b7eb6d063dc66 new file mode 100644 index 0000000..6a2cc12 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/91d5717dfddcf1402ffc74fb4b7eb6d063dc66 differ diff --git a/RockOS/.git-backup/objects/b5/a2f660fcf3f88733fda75852a2893bfdd83d82 b/RockOS/.git-backup/objects/b5/a2f660fcf3f88733fda75852a2893bfdd83d82 new file mode 100644 index 0000000..df84756 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/a2f660fcf3f88733fda75852a2893bfdd83d82 differ diff --git a/RockOS/.git-backup/objects/b5/c5fd2e36c60c414202b71b68c31b2bca503852 b/RockOS/.git-backup/objects/b5/c5fd2e36c60c414202b71b68c31b2bca503852 new file mode 100644 index 0000000..73a8dd6 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/c5fd2e36c60c414202b71b68c31b2bca503852 differ diff --git a/RockOS/.git-backup/objects/b5/ccabd26bc1a11aec9d71fa0be018a14dce6f29 b/RockOS/.git-backup/objects/b5/ccabd26bc1a11aec9d71fa0be018a14dce6f29 new file mode 100644 index 0000000..f1686e4 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/ccabd26bc1a11aec9d71fa0be018a14dce6f29 differ diff --git a/RockOS/.git-backup/objects/b5/dc13f62e5d037b45f6a1fc532b7bfa02fb1875 b/RockOS/.git-backup/objects/b5/dc13f62e5d037b45f6a1fc532b7bfa02fb1875 new file mode 100644 index 0000000..417632a Binary files /dev/null and b/RockOS/.git-backup/objects/b5/dc13f62e5d037b45f6a1fc532b7bfa02fb1875 differ diff --git a/RockOS/.git-backup/objects/b5/dea4f63fc36d586398c460889f8ed24d19ac03 b/RockOS/.git-backup/objects/b5/dea4f63fc36d586398c460889f8ed24d19ac03 new file mode 100644 index 0000000..68511d4 Binary files /dev/null and b/RockOS/.git-backup/objects/b5/dea4f63fc36d586398c460889f8ed24d19ac03 differ diff --git a/RockOS/.git-backup/objects/b6/0a3d0bacb6ea50f18aa246bf22d074f47b29da b/RockOS/.git-backup/objects/b6/0a3d0bacb6ea50f18aa246bf22d074f47b29da new file mode 100644 index 0000000..7e52f05 Binary files /dev/null and b/RockOS/.git-backup/objects/b6/0a3d0bacb6ea50f18aa246bf22d074f47b29da differ diff --git a/RockOS/.git-backup/objects/b6/44477fae62863726cd28d75242b0f93e9cb370 b/RockOS/.git-backup/objects/b6/44477fae62863726cd28d75242b0f93e9cb370 new file mode 100644 index 0000000..0d3dd87 Binary files /dev/null and b/RockOS/.git-backup/objects/b6/44477fae62863726cd28d75242b0f93e9cb370 differ diff --git a/RockOS/.git-backup/objects/b6/a48865e7f5b6ffd7605f90178ec52f9eb7507c b/RockOS/.git-backup/objects/b6/a48865e7f5b6ffd7605f90178ec52f9eb7507c new file mode 100644 index 0000000..5ba0cdc Binary files /dev/null and b/RockOS/.git-backup/objects/b6/a48865e7f5b6ffd7605f90178ec52f9eb7507c differ diff --git a/RockOS/.git-backup/objects/b6/e67a41829acd68e813adf7d5f8355921e39468 b/RockOS/.git-backup/objects/b6/e67a41829acd68e813adf7d5f8355921e39468 new file mode 100644 index 0000000..fd5e318 Binary files /dev/null and b/RockOS/.git-backup/objects/b6/e67a41829acd68e813adf7d5f8355921e39468 differ diff --git a/RockOS/.git-backup/objects/b6/ee4fc3de326f1f6be2e9baab4bca141a9bfa88 b/RockOS/.git-backup/objects/b6/ee4fc3de326f1f6be2e9baab4bca141a9bfa88 new file mode 100644 index 0000000..fca51f3 --- /dev/null +++ b/RockOS/.git-backup/objects/b6/ee4fc3de326f1f6be2e9baab4bca141a9bfa88 @@ -0,0 +1,2 @@ +xKN!@QǬ hW$Ƹ +4/@ܽo Nor[FֈeOkM"F6"\Zj<ښ[($WZcgR*zDΒ{y\?3w^q?;@ԯԳ>_>{\.׾[SH> \ No newline at end of file diff --git a/RockOS/.git-backup/objects/b7/277f85043abf3118a31f7ddd8e547accadcb25 b/RockOS/.git-backup/objects/b7/277f85043abf3118a31f7ddd8e547accadcb25 new file mode 100644 index 0000000..385ed15 Binary files /dev/null and b/RockOS/.git-backup/objects/b7/277f85043abf3118a31f7ddd8e547accadcb25 differ diff --git a/RockOS/.git-backup/objects/b7/445b5cbe805653c3d069a10c5c9e1f578dd745 b/RockOS/.git-backup/objects/b7/445b5cbe805653c3d069a10c5c9e1f578dd745 new file mode 100644 index 0000000..0f0100c Binary files /dev/null and b/RockOS/.git-backup/objects/b7/445b5cbe805653c3d069a10c5c9e1f578dd745 differ diff --git a/RockOS/.git-backup/objects/b7/c189a71341c59a7d15b6bc02f6ff6ab39a4b32 b/RockOS/.git-backup/objects/b7/c189a71341c59a7d15b6bc02f6ff6ab39a4b32 new file mode 100644 index 0000000..83a3a67 Binary files /dev/null and b/RockOS/.git-backup/objects/b7/c189a71341c59a7d15b6bc02f6ff6ab39a4b32 differ diff --git a/RockOS/.git-backup/objects/b7/ee8cfce420857a60d517f49dda810440032c1a b/RockOS/.git-backup/objects/b7/ee8cfce420857a60d517f49dda810440032c1a new file mode 100644 index 0000000..7a30348 --- /dev/null +++ b/RockOS/.git-backup/objects/b7/ee8cfce420857a60d517f49dda810440032c1a @@ -0,0 +1,2 @@ +xJ0SNpݍz fWDEY녨4M@4MU wB7gxle>4<@V>bC`j-5DwydA׶)Wҕ40 +mXWD@ihVh^|p!Bo4 .hK{j 멻d*,,N>$%rQ6٧L%|!4ߵ2itJJUe/I,y_v*6NS{֘xr;U<ȸhv_bMqߪS<S9lGܥɗq^ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/b8/152263db2804a22b0caad4280859114f616afd b/RockOS/.git-backup/objects/b8/152263db2804a22b0caad4280859114f616afd new file mode 100644 index 0000000..f496cf9 Binary files /dev/null and b/RockOS/.git-backup/objects/b8/152263db2804a22b0caad4280859114f616afd differ diff --git a/RockOS/.git-backup/objects/b8/28141cc86039b99fadfae50881ced320d59026 b/RockOS/.git-backup/objects/b8/28141cc86039b99fadfae50881ced320d59026 new file mode 100644 index 0000000..af9db2d Binary files /dev/null and b/RockOS/.git-backup/objects/b8/28141cc86039b99fadfae50881ced320d59026 differ diff --git a/RockOS/.git-backup/objects/b8/d640efcd25dd000a57fdbe6f0803ef6623be0b b/RockOS/.git-backup/objects/b8/d640efcd25dd000a57fdbe6f0803ef6623be0b new file mode 100644 index 0000000..7bfa415 Binary files /dev/null and b/RockOS/.git-backup/objects/b8/d640efcd25dd000a57fdbe6f0803ef6623be0b differ diff --git a/RockOS/.git-backup/objects/b8/f67dceffd98238067ad2d0ffb8994bd61c1d45 b/RockOS/.git-backup/objects/b8/f67dceffd98238067ad2d0ffb8994bd61c1d45 new file mode 100644 index 0000000..e871024 Binary files /dev/null and b/RockOS/.git-backup/objects/b8/f67dceffd98238067ad2d0ffb8994bd61c1d45 differ diff --git a/RockOS/.git-backup/objects/b9/2f2458bc1fa561c80491700e6b174fffebd8dd b/RockOS/.git-backup/objects/b9/2f2458bc1fa561c80491700e6b174fffebd8dd new file mode 100644 index 0000000..a9fbec0 Binary files /dev/null and b/RockOS/.git-backup/objects/b9/2f2458bc1fa561c80491700e6b174fffebd8dd differ diff --git a/RockOS/.git-backup/objects/b9/416bba78061a1755cc2250da2f548055823394 b/RockOS/.git-backup/objects/b9/416bba78061a1755cc2250da2f548055823394 new file mode 100644 index 0000000..19da8ad Binary files /dev/null and b/RockOS/.git-backup/objects/b9/416bba78061a1755cc2250da2f548055823394 differ diff --git a/RockOS/.git-backup/objects/b9/7582b5e9984d2b7a103cf78bb56420ff1eb48c b/RockOS/.git-backup/objects/b9/7582b5e9984d2b7a103cf78bb56420ff1eb48c new file mode 100644 index 0000000..1624745 --- /dev/null +++ b/RockOS/.git-backup/objects/b9/7582b5e9984d2b7a103cf78bb56420ff1eb48c @@ -0,0 +1 @@ +xmAK0=WtvȜ[a֓HIt t$cdCS›RdL+T u` 5"!@HZ|ApZɰ;*XPs@^.=IZVjƷ*'8Fg;e}* \zYuN:eۦd8!d k;.p6mBX+.jl" B>Nac:;ľ c^=Ȱ1q#\gB꓁P'.g yz(.m"Br[%?{}yЊ s\! RQ#drϫ" 㾑 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/b9/ac67cf2a39fb88d1148ae98c53369b02c4b5c1 b/RockOS/.git-backup/objects/b9/ac67cf2a39fb88d1148ae98c53369b02c4b5c1 new file mode 100644 index 0000000..cbc9a11 Binary files /dev/null and b/RockOS/.git-backup/objects/b9/ac67cf2a39fb88d1148ae98c53369b02c4b5c1 differ diff --git a/RockOS/.git-backup/objects/ba/2b3c6db6f14c006433a8de5082046ed13f4fd3 b/RockOS/.git-backup/objects/ba/2b3c6db6f14c006433a8de5082046ed13f4fd3 new file mode 100644 index 0000000..a4852a6 Binary files /dev/null and b/RockOS/.git-backup/objects/ba/2b3c6db6f14c006433a8de5082046ed13f4fd3 differ diff --git a/RockOS/.git-backup/objects/bb/14494afb7c3513970be11f736d97c348e5ae23 b/RockOS/.git-backup/objects/bb/14494afb7c3513970be11f736d97c348e5ae23 new file mode 100644 index 0000000..d447983 --- /dev/null +++ b/RockOS/.git-backup/objects/bb/14494afb7c3513970be11f736d97c348e5ae23 @@ -0,0 +1 @@ +xOO0=S<H8xA1@ؼHmkRZui)%ϟ7*ht6(L{ҠG%r.컣@0êJOP[%XDS][-vn{%Wҭ?i* ˬ U0,< 5s!|re**52c9m1$TJŁrUJmWڙJK.M,Ҹ2itIcfaSðjVle<<+}Z, LY=L&R;da-rs"Ps" vZwM}5AxC \ No newline at end of file diff --git a/RockOS/.git-backup/objects/bb/37fba0fece564c3d7b97e5fa16aa77aa950a65 b/RockOS/.git-backup/objects/bb/37fba0fece564c3d7b97e5fa16aa77aa950a65 new file mode 100644 index 0000000..c181b86 Binary files /dev/null and b/RockOS/.git-backup/objects/bb/37fba0fece564c3d7b97e5fa16aa77aa950a65 differ diff --git a/RockOS/.git-backup/objects/bb/a60432cc332ec23e774e6d6667c2aada14b1f2 b/RockOS/.git-backup/objects/bb/a60432cc332ec23e774e6d6667c2aada14b1f2 new file mode 100644 index 0000000..f6375a9 --- /dev/null +++ b/RockOS/.git-backup/objects/bb/a60432cc332ec23e774e6d6667c2aada14b1f2 @@ -0,0 +1,2 @@ +x1 @ W`+"89(GKm𼖻T)*ju5S) K瓈*nsP[,G-MV5Yk!oqxv]ɠT6/O& TLb i~eKnܗ У0O!cHw +-^3񘐥"(_]@Gh5Uk5 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/bb/d9177515b5545f8cfc20f999a40749c0f8225f b/RockOS/.git-backup/objects/bb/d9177515b5545f8cfc20f999a40749c0f8225f new file mode 100644 index 0000000..97a8ba6 Binary files /dev/null and b/RockOS/.git-backup/objects/bb/d9177515b5545f8cfc20f999a40749c0f8225f differ diff --git a/RockOS/.git-backup/objects/bb/e69937871b21e523f9b1c14e2e60e323165170 b/RockOS/.git-backup/objects/bb/e69937871b21e523f9b1c14e2e60e323165170 new file mode 100644 index 0000000..6e47673 Binary files /dev/null and b/RockOS/.git-backup/objects/bb/e69937871b21e523f9b1c14e2e60e323165170 differ diff --git a/RockOS/.git-backup/objects/bc/05bf3d0fb0cd7dc05b7f25d31ebf81ee300b52 b/RockOS/.git-backup/objects/bc/05bf3d0fb0cd7dc05b7f25d31ebf81ee300b52 new file mode 100644 index 0000000..a463324 --- /dev/null +++ b/RockOS/.git-backup/objects/bc/05bf3d0fb0cd7dc05b7f25d31ebf81ee300b52 @@ -0,0 +1,3 @@ +x}OK@=S<%'JmC)Zlo%i6ͮn"~ww +KLqw{so$>;0<@'8}?e s=êL9m1EBSDDfS[=^1U$T" `$J:(dFDdC*(60$_yk=ĖÃ6f.25:9yw};4kfJ%x=c3a*Q4;s1L޾uNȩ +Bǧv˦uhӮCpnGư3E/y^},u-8nPOa8k~y +zP< \ No newline at end of file diff --git a/RockOS/.git-backup/objects/bc/1dce3576d9cd23109d9c624679d5aa516b9012 b/RockOS/.git-backup/objects/bc/1dce3576d9cd23109d9c624679d5aa516b9012 new file mode 100644 index 0000000..e12214b Binary files /dev/null and b/RockOS/.git-backup/objects/bc/1dce3576d9cd23109d9c624679d5aa516b9012 differ diff --git a/RockOS/.git-backup/objects/bc/1e62ac12c77dff409577eeba2bf3cf0e75e459 b/RockOS/.git-backup/objects/bc/1e62ac12c77dff409577eeba2bf3cf0e75e459 new file mode 100644 index 0000000..44988f3 Binary files /dev/null and b/RockOS/.git-backup/objects/bc/1e62ac12c77dff409577eeba2bf3cf0e75e459 differ diff --git a/RockOS/.git-backup/objects/bc/8815048768558adaf4140094806cd43d25697f b/RockOS/.git-backup/objects/bc/8815048768558adaf4140094806cd43d25697f new file mode 100644 index 0000000..4230b4e --- /dev/null +++ b/RockOS/.git-backup/objects/bc/8815048768558adaf4140094806cd43d25697f @@ -0,0 +1,4 @@ +xn@{H j mJԠ +ɂ(vY^ª>Du#ݻ!$Wsffg+X]8 Xy aDD.E*Cچk3߇@Hdk uyi< D h]Om5 s~/T2C3IDF!,*$C ktzq5O|c|g͟,߇e4K.#-CuM%[*e۞ၝIgSa|_ͮ¹L4Q&V[Sd4}&-iAF-IlYS5HL o+`xN _ }qIA#x$bx0>.7Maꓣm6Ϳ<=ˁ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/bc/a0ce427301cb23ff33fd16177087156952d50b b/RockOS/.git-backup/objects/bc/a0ce427301cb23ff33fd16177087156952d50b new file mode 100644 index 0000000..1adad14 Binary files /dev/null and b/RockOS/.git-backup/objects/bc/a0ce427301cb23ff33fd16177087156952d50b differ diff --git a/RockOS/.git-backup/objects/bc/f1e6197c5bb3303e39be3f8511889c3051c257 b/RockOS/.git-backup/objects/bc/f1e6197c5bb3303e39be3f8511889c3051c257 new file mode 100644 index 0000000..3e697de Binary files /dev/null and b/RockOS/.git-backup/objects/bc/f1e6197c5bb3303e39be3f8511889c3051c257 differ diff --git a/RockOS/.git-backup/objects/bd/2cc91f7685ed462355af824060a1b86ba89a39 b/RockOS/.git-backup/objects/bd/2cc91f7685ed462355af824060a1b86ba89a39 new file mode 100644 index 0000000..d94dddd Binary files /dev/null and b/RockOS/.git-backup/objects/bd/2cc91f7685ed462355af824060a1b86ba89a39 differ diff --git a/RockOS/.git-backup/objects/bd/58702180747368bc2f88957a76d04d0a86a5e8 b/RockOS/.git-backup/objects/bd/58702180747368bc2f88957a76d04d0a86a5e8 new file mode 100644 index 0000000..98ba580 Binary files /dev/null and b/RockOS/.git-backup/objects/bd/58702180747368bc2f88957a76d04d0a86a5e8 differ diff --git a/RockOS/.git-backup/objects/bd/7e5394196f7be5f4d495a1cec63316bc4e633a b/RockOS/.git-backup/objects/bd/7e5394196f7be5f4d495a1cec63316bc4e633a new file mode 100644 index 0000000..72c20ce --- /dev/null +++ b/RockOS/.git-backup/objects/bd/7e5394196f7be5f4d495a1cec63316bc4e633a @@ -0,0 +1,5 @@ +xuQJ0_1P +K&"(Kdձ tK3̜Th*;)Q +rÐ@_qUVRNwgG{Ȁ& SFŵ +Icg&{Bae0Hw9qY;xHh sx5[,ࣃ7T>I.Ю?r?;+OH6 +žÃ9!PĢy8}l(5N+itpӬ!Ʋo(^mcD YϐMjrM7vmn \ No newline at end of file diff --git a/RockOS/.git-backup/objects/bd/b01b1c08ed6727452df8ac68870038bd8338fe b/RockOS/.git-backup/objects/bd/b01b1c08ed6727452df8ac68870038bd8338fe new file mode 100644 index 0000000..f1ab920 Binary files /dev/null and b/RockOS/.git-backup/objects/bd/b01b1c08ed6727452df8ac68870038bd8338fe differ diff --git a/RockOS/.git-backup/objects/be/32cabb61e39cfc1010558c2449c18507d32379 b/RockOS/.git-backup/objects/be/32cabb61e39cfc1010558c2449c18507d32379 new file mode 100644 index 0000000..b6f9b74 Binary files /dev/null and b/RockOS/.git-backup/objects/be/32cabb61e39cfc1010558c2449c18507d32379 differ diff --git a/RockOS/.git-backup/objects/be/c688d230b90ed9cb70464e2742295e49d345be b/RockOS/.git-backup/objects/be/c688d230b90ed9cb70464e2742295e49d345be new file mode 100644 index 0000000..034f5f0 Binary files /dev/null and b/RockOS/.git-backup/objects/be/c688d230b90ed9cb70464e2742295e49d345be differ diff --git a/RockOS/.git-backup/objects/bf/0d1caa8902bf2f812b33a5f20b2b89c26eaab5 b/RockOS/.git-backup/objects/bf/0d1caa8902bf2f812b33a5f20b2b89c26eaab5 new file mode 100644 index 0000000..11fb12b --- /dev/null +++ b/RockOS/.git-backup/objects/bf/0d1caa8902bf2f812b33a5f20b2b89c26eaab5 @@ -0,0 +1 @@ +x[j0/ m7k5n%Bv.6Z \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c1/6c64ddb9a364b5b587c15282f51be8880cb010 b/RockOS/.git-backup/objects/c1/6c64ddb9a364b5b587c15282f51be8880cb010 new file mode 100644 index 0000000..a580b29 Binary files /dev/null and b/RockOS/.git-backup/objects/c1/6c64ddb9a364b5b587c15282f51be8880cb010 differ diff --git a/RockOS/.git-backup/objects/c1/77bf4f03c0bea1d1f73afa8bc5436c8c7a9446 b/RockOS/.git-backup/objects/c1/77bf4f03c0bea1d1f73afa8bc5436c8c7a9446 new file mode 100644 index 0000000..ed4628f Binary files /dev/null and b/RockOS/.git-backup/objects/c1/77bf4f03c0bea1d1f73afa8bc5436c8c7a9446 differ diff --git a/RockOS/.git-backup/objects/c1/bca7e5811c2dd1b5e5afc39d3bcaf6c2ecc1f6 b/RockOS/.git-backup/objects/c1/bca7e5811c2dd1b5e5afc39d3bcaf6c2ecc1f6 new file mode 100644 index 0000000..3c24ab8 Binary files /dev/null and b/RockOS/.git-backup/objects/c1/bca7e5811c2dd1b5e5afc39d3bcaf6c2ecc1f6 differ diff --git a/RockOS/.git-backup/objects/c1/d5345e38155111bd215476bb031acfad472bfa b/RockOS/.git-backup/objects/c1/d5345e38155111bd215476bb031acfad472bfa new file mode 100644 index 0000000..164dc59 --- /dev/null +++ b/RockOS/.git-backup/objects/c1/d5345e38155111bd215476bb031acfad472bfa @@ -0,0 +1,2 @@ +xݓN0E]Mb?p5.\YG7iK"1eZ 2,I)%!?PnʦYzO:|kjֲLj&wT"-8:sˈ6+ś3<Rjr853>g +ھߐphZߒ~kg1 #B{bƿTZH%~9¢<6и_nnT{>ZƓOݩ.)ZSk_/e*WǕ3.ejL/jl"Oĩ.fR('ev \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c1/eb2b06cf48eecbd0429a12629102aa2de483da b/RockOS/.git-backup/objects/c1/eb2b06cf48eecbd0429a12629102aa2de483da new file mode 100644 index 0000000..fe7a9e3 Binary files /dev/null and b/RockOS/.git-backup/objects/c1/eb2b06cf48eecbd0429a12629102aa2de483da differ diff --git a/RockOS/.git-backup/objects/c2/308ae4c683969ea39c7ada1d366df34fb81de4 b/RockOS/.git-backup/objects/c2/308ae4c683969ea39c7ada1d366df34fb81de4 new file mode 100644 index 0000000..d69e3ac Binary files /dev/null and b/RockOS/.git-backup/objects/c2/308ae4c683969ea39c7ada1d366df34fb81de4 differ diff --git a/RockOS/.git-backup/objects/c2/c83139d9b369213b7f951481b5d2d6dcd8522e b/RockOS/.git-backup/objects/c2/c83139d9b369213b7f951481b5d2d6dcd8522e new file mode 100644 index 0000000..a59226a Binary files /dev/null and b/RockOS/.git-backup/objects/c2/c83139d9b369213b7f951481b5d2d6dcd8522e differ diff --git a/RockOS/.git-backup/objects/c2/c90a6189464c70d93d915d1cbb61d5b850b65d b/RockOS/.git-backup/objects/c2/c90a6189464c70d93d915d1cbb61d5b850b65d new file mode 100644 index 0000000..48d231a Binary files /dev/null and b/RockOS/.git-backup/objects/c2/c90a6189464c70d93d915d1cbb61d5b850b65d differ diff --git a/RockOS/.git-backup/objects/c3/3920acc5e76c97c5f309cdab4c09ae12116d42 b/RockOS/.git-backup/objects/c3/3920acc5e76c97c5f309cdab4c09ae12116d42 new file mode 100644 index 0000000..bf9fce7 Binary files /dev/null and b/RockOS/.git-backup/objects/c3/3920acc5e76c97c5f309cdab4c09ae12116d42 differ diff --git a/RockOS/.git-backup/objects/c3/4da1d3faf6e23a3f281cccdea8a26df8d2d5e4 b/RockOS/.git-backup/objects/c3/4da1d3faf6e23a3f281cccdea8a26df8d2d5e4 new file mode 100644 index 0000000..f597804 Binary files /dev/null and b/RockOS/.git-backup/objects/c3/4da1d3faf6e23a3f281cccdea8a26df8d2d5e4 differ diff --git a/RockOS/.git-backup/objects/c3/5702a43dab57e3ee9d26e30b876a52c65d6332 b/RockOS/.git-backup/objects/c3/5702a43dab57e3ee9d26e30b876a52c65d6332 new file mode 100644 index 0000000..5989f39 --- /dev/null +++ b/RockOS/.git-backup/objects/c3/5702a43dab57e3ee9d26e30b876a52c65d6332 @@ -0,0 +1,2 @@ +x]1ί8toڥԯեVmge[A)Lj&Q&uh*xs2G9|z[Ўc "DxzX\9i̱$nsa5x&x7h6.XXYx%r=)3*u!KelZ4Pcv +V* r{0<~//s.TM:t_SHLU7(WkdR!dOݯ&:Iƺ]%tPëM5c!*C*0b9ϯVX0l F8?dD)+}kAq{.7)@ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c3/cb02d93e3bb23b82d3d5117b6b427496d49777 b/RockOS/.git-backup/objects/c3/cb02d93e3bb23b82d3d5117b6b427496d49777 new file mode 100644 index 0000000..e451124 --- /dev/null +++ b/RockOS/.git-backup/objects/c3/cb02d93e3bb23b82d3d5117b6b427496d49777 @@ -0,0 +1,2 @@ +xuU]o0+WI)0 hP$VUAH%0Ut}vplDp9>NfX%jZF(nSβd"4n8Y< Gymp2=޾<\}?e%zŻ.VOYwaB}Ѧl+tüfG@ǜi#0tkceDdQo,r&tte]7Y˘$e"۔|Sh.$F1قr'$Dw^ OR.a-Vo"vY5_idkEΐ~"tÍyP{@˵.KXQHkh*ym_FXV 5MV?/2(ZF4+2& ?m;C%vЅGa@gPSjRIp+7.Z ?-rb?#w/sexh?R^pKWU'~_:-F;}|)?&[U,&)1t:PI뒈F +1.M 85be#W%q'$5KY gRKM4Z֯犰yw:{A=uTtT? 2Z )`$p0x,g(]RJ-p\Wı`7`EH3^Y㔣A\W8 }oWX!&"v#SI5@dut}L+C$odFL <7[R=!uN)疳{^otE]8E z9l6{0&> ˨±IJ7a sy29K<-kvǃӤ?4 4y4] 5,*d. +7!lTH++?/w*W@SN ƕ`ێafۺv?g|'gK{_dNe ''7?LH<2O0e"^$Be1.̎SHՊWQވ׵Tb8bJ8TnPS+e"WıʳP UO.U 4%rw$&DՆ0eK%cF˚WS]9\EY۪l<)GVVSmbc}>Ѳ'ID}(XV(Ar<t$'2wґ )7I/{?i)x-[ޛ=G}fh_9KG㯙䤠t2A1ƀDylQV gg`2u9oL|Γxk+$7.=5EE9*E~B\f뭧4́dhB^*m5 Rz!:sRlcӀr@neO [9 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c5/4c6712f7a840ad563ab029f997c2794b362fa9 b/RockOS/.git-backup/objects/c5/4c6712f7a840ad563ab029f997c2794b362fa9 new file mode 100644 index 0000000..9629f5f Binary files /dev/null and b/RockOS/.git-backup/objects/c5/4c6712f7a840ad563ab029f997c2794b362fa9 differ diff --git a/RockOS/.git-backup/objects/c5/aa96b53ea2183d63e61699fb23046c37bba69b b/RockOS/.git-backup/objects/c5/aa96b53ea2183d63e61699fb23046c37bba69b new file mode 100644 index 0000000..136d3e8 Binary files /dev/null and b/RockOS/.git-backup/objects/c5/aa96b53ea2183d63e61699fb23046c37bba69b differ diff --git a/RockOS/.git-backup/objects/c6/14347b4931b23a68f574b8381039ee1ebb1a0b b/RockOS/.git-backup/objects/c6/14347b4931b23a68f574b8381039ee1ebb1a0b new file mode 100644 index 0000000..b292f56 Binary files /dev/null and b/RockOS/.git-backup/objects/c6/14347b4931b23a68f574b8381039ee1ebb1a0b differ diff --git a/RockOS/.git-backup/objects/c6/279201ae68f500b7832fd7286270a5ff6cef1a b/RockOS/.git-backup/objects/c6/279201ae68f500b7832fd7286270a5ff6cef1a new file mode 100644 index 0000000..a741514 Binary files /dev/null and b/RockOS/.git-backup/objects/c6/279201ae68f500b7832fd7286270a5ff6cef1a differ diff --git a/RockOS/.git-backup/objects/c6/41346ad9ca5a5df39b58a544784fae1ae8fb88 b/RockOS/.git-backup/objects/c6/41346ad9ca5a5df39b58a544784fae1ae8fb88 new file mode 100644 index 0000000..2315928 Binary files /dev/null and b/RockOS/.git-backup/objects/c6/41346ad9ca5a5df39b58a544784fae1ae8fb88 differ diff --git a/RockOS/.git-backup/objects/c6/9703c71fd053e9333ed0de28c83d41382a8305 b/RockOS/.git-backup/objects/c6/9703c71fd053e9333ed0de28c83d41382a8305 new file mode 100644 index 0000000..1fd1abc Binary files /dev/null and b/RockOS/.git-backup/objects/c6/9703c71fd053e9333ed0de28c83d41382a8305 differ diff --git a/RockOS/.git-backup/objects/c6/b5f3957f34cea7dc50b50ff0895287d5926e9f b/RockOS/.git-backup/objects/c6/b5f3957f34cea7dc50b50ff0895287d5926e9f new file mode 100644 index 0000000..98be7bc Binary files /dev/null and b/RockOS/.git-backup/objects/c6/b5f3957f34cea7dc50b50ff0895287d5926e9f differ diff --git a/RockOS/.git-backup/objects/c6/bff541189a440bb3c5e6dae836a8487678508f b/RockOS/.git-backup/objects/c6/bff541189a440bb3c5e6dae836a8487678508f new file mode 100644 index 0000000..15f0156 Binary files /dev/null and b/RockOS/.git-backup/objects/c6/bff541189a440bb3c5e6dae836a8487678508f differ diff --git a/RockOS/.git-backup/objects/c6/ea8fc4f85112e54320a025c7684e7412721892 b/RockOS/.git-backup/objects/c6/ea8fc4f85112e54320a025c7684e7412721892 new file mode 100644 index 0000000..dc80b54 Binary files /dev/null and b/RockOS/.git-backup/objects/c6/ea8fc4f85112e54320a025c7684e7412721892 differ diff --git a/RockOS/.git-backup/objects/c7/15b0976aa08df4a9333c56d167c5a33c4b8c99 b/RockOS/.git-backup/objects/c7/15b0976aa08df4a9333c56d167c5a33c4b8c99 new file mode 100644 index 0000000..d799536 Binary files /dev/null and b/RockOS/.git-backup/objects/c7/15b0976aa08df4a9333c56d167c5a33c4b8c99 differ diff --git a/RockOS/.git-backup/objects/c7/201d0957ec2f78253808341d94f931786e28f7 b/RockOS/.git-backup/objects/c7/201d0957ec2f78253808341d94f931786e28f7 new file mode 100644 index 0000000..b8686ce Binary files /dev/null and b/RockOS/.git-backup/objects/c7/201d0957ec2f78253808341d94f931786e28f7 differ diff --git a/RockOS/.git-backup/objects/c7/2f802d06da21e1447535d2842a054834d45b0a b/RockOS/.git-backup/objects/c7/2f802d06da21e1447535d2842a054834d45b0a new file mode 100644 index 0000000..8b949d2 Binary files /dev/null and b/RockOS/.git-backup/objects/c7/2f802d06da21e1447535d2842a054834d45b0a differ diff --git a/RockOS/.git-backup/objects/c7/86f2b9960c0fac93524b19a6f9d1da62c6b9c9 b/RockOS/.git-backup/objects/c7/86f2b9960c0fac93524b19a6f9d1da62c6b9c9 new file mode 100644 index 0000000..db6b58b Binary files /dev/null and b/RockOS/.git-backup/objects/c7/86f2b9960c0fac93524b19a6f9d1da62c6b9c9 differ diff --git a/RockOS/.git-backup/objects/c7/f8a867207a0d9be326ccb43cba304f4204c005 b/RockOS/.git-backup/objects/c7/f8a867207a0d9be326ccb43cba304f4204c005 new file mode 100644 index 0000000..f7596dd Binary files /dev/null and b/RockOS/.git-backup/objects/c7/f8a867207a0d9be326ccb43cba304f4204c005 differ diff --git a/RockOS/.git-backup/objects/c7/fe58f7f03f539b682a077a768f4b43dff3c829 b/RockOS/.git-backup/objects/c7/fe58f7f03f539b682a077a768f4b43dff3c829 new file mode 100644 index 0000000..24c43f1 Binary files /dev/null and b/RockOS/.git-backup/objects/c7/fe58f7f03f539b682a077a768f4b43dff3c829 differ diff --git a/RockOS/.git-backup/objects/c7/ff36c5b38bdbce22fa81b30b0b0e2a62a4d8b8 b/RockOS/.git-backup/objects/c7/ff36c5b38bdbce22fa81b30b0b0e2a62a4d8b8 new file mode 100644 index 0000000..cb713d4 Binary files /dev/null and b/RockOS/.git-backup/objects/c7/ff36c5b38bdbce22fa81b30b0b0e2a62a4d8b8 differ diff --git a/RockOS/.git-backup/objects/c8/4961a1b369ff2fa8e02fcae65b93b35b70b94a b/RockOS/.git-backup/objects/c8/4961a1b369ff2fa8e02fcae65b93b35b70b94a new file mode 100644 index 0000000..e733dac Binary files /dev/null and b/RockOS/.git-backup/objects/c8/4961a1b369ff2fa8e02fcae65b93b35b70b94a differ diff --git a/RockOS/.git-backup/objects/c8/538da4841ea09383b9eeffc41e58e7c47641c7 b/RockOS/.git-backup/objects/c8/538da4841ea09383b9eeffc41e58e7c47641c7 new file mode 100644 index 0000000..e26e5e9 Binary files /dev/null and b/RockOS/.git-backup/objects/c8/538da4841ea09383b9eeffc41e58e7c47641c7 differ diff --git a/RockOS/.git-backup/objects/c8/60e2036fa51e57e5e0a963c21d3d274d8ca879 b/RockOS/.git-backup/objects/c8/60e2036fa51e57e5e0a963c21d3d274d8ca879 new file mode 100644 index 0000000..233b0d9 --- /dev/null +++ b/RockOS/.git-backup/objects/c8/60e2036fa51e57e5e0a963c21d3d274d8ca879 @@ -0,0 +1,2 @@ +xݔN0E]Mb?p5.\Y`C雴%v +Xe,,InN!KBȻ{چ+k=+6)T1Ev \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c8/663313f80b811989b4b96c6bc760ad945dd642 b/RockOS/.git-backup/objects/c8/663313f80b811989b4b96c6bc760ad945dd642 new file mode 100644 index 0000000..faaaebd --- /dev/null +++ b/RockOS/.git-backup/objects/c8/663313f80b811989b4b96c6bc760ad945dd642 @@ -0,0 +1,3 @@ +xE1 E{gdf"E ^ѹe[-KL##n= +}o߽NeLA#Un^Jx +E!^ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c8/89e2ba2477bccd79729c9ca029ccdc85d4cb97 b/RockOS/.git-backup/objects/c8/89e2ba2477bccd79729c9ca029ccdc85d4cb97 new file mode 100644 index 0000000..77a6f74 Binary files /dev/null and b/RockOS/.git-backup/objects/c8/89e2ba2477bccd79729c9ca029ccdc85d4cb97 differ diff --git a/RockOS/.git-backup/objects/c8/8a74f7a898c4cff1f883886959d8ed1456cd0b b/RockOS/.git-backup/objects/c8/8a74f7a898c4cff1f883886959d8ed1456cd0b new file mode 100644 index 0000000..b94d0c3 Binary files /dev/null and b/RockOS/.git-backup/objects/c8/8a74f7a898c4cff1f883886959d8ed1456cd0b differ diff --git a/RockOS/.git-backup/objects/c8/fe6656ee4b830ac7ea8c4c4a7ff613506704af b/RockOS/.git-backup/objects/c8/fe6656ee4b830ac7ea8c4c4a7ff613506704af new file mode 100644 index 0000000..4125659 Binary files /dev/null and b/RockOS/.git-backup/objects/c8/fe6656ee4b830ac7ea8c4c4a7ff613506704af differ diff --git a/RockOS/.git-backup/objects/c9/490056c232e450e4f5a646947060dfde41a365 b/RockOS/.git-backup/objects/c9/490056c232e450e4f5a646947060dfde41a365 new file mode 100644 index 0000000..c6ee7e0 Binary files /dev/null and b/RockOS/.git-backup/objects/c9/490056c232e450e4f5a646947060dfde41a365 differ diff --git a/RockOS/.git-backup/objects/c9/797a00746dc1734213473355f5af509854a48b b/RockOS/.git-backup/objects/c9/797a00746dc1734213473355f5af509854a48b new file mode 100644 index 0000000..a6eb4fb --- /dev/null +++ b/RockOS/.git-backup/objects/c9/797a00746dc1734213473355f5af509854a48b @@ -0,0 +1,3 @@ +xuQ]K19b遴>XEEX|,%ɦIݤxV$3;r38B |4~H?p᰼f,՘E!FF`,ɍM~:Gw{i Ⱥt؆SE +!w} + mMCjfvdV~: !#@J|xܖ(\ӔpK"SXa~z@;%8 9ow%Ӭy[ @끬B㐱pn2xq\nC6 xJ^-*_T \ No newline at end of file diff --git a/RockOS/.git-backup/objects/c9/d12f628ae1ec824c9e59379379c1d4d32bc815 b/RockOS/.git-backup/objects/c9/d12f628ae1ec824c9e59379379c1d4d32bc815 new file mode 100644 index 0000000..23a45d9 Binary files /dev/null and b/RockOS/.git-backup/objects/c9/d12f628ae1ec824c9e59379379c1d4d32bc815 differ diff --git a/RockOS/.git-backup/objects/c9/d46f5e35150860152ff21e93032d199cd86b19 b/RockOS/.git-backup/objects/c9/d46f5e35150860152ff21e93032d199cd86b19 new file mode 100644 index 0000000..15d81d8 Binary files /dev/null and b/RockOS/.git-backup/objects/c9/d46f5e35150860152ff21e93032d199cd86b19 differ diff --git a/RockOS/.git-backup/objects/ca/571853b0d1844969444aeeaa468fdac3d32d0a b/RockOS/.git-backup/objects/ca/571853b0d1844969444aeeaa468fdac3d32d0a new file mode 100644 index 0000000..3facce4 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/571853b0d1844969444aeeaa468fdac3d32d0a differ diff --git a/RockOS/.git-backup/objects/ca/c7fbee3f688ad3a0502b1fe829fbe4ae5c9b89 b/RockOS/.git-backup/objects/ca/c7fbee3f688ad3a0502b1fe829fbe4ae5c9b89 new file mode 100644 index 0000000..25e9e48 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/c7fbee3f688ad3a0502b1fe829fbe4ae5c9b89 differ diff --git a/RockOS/.git-backup/objects/ca/d29bb9898e3338a8165a4c70df2ec7bfec0062 b/RockOS/.git-backup/objects/ca/d29bb9898e3338a8165a4c70df2ec7bfec0062 new file mode 100644 index 0000000..bb07c19 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/d29bb9898e3338a8165a4c70df2ec7bfec0062 differ diff --git a/RockOS/.git-backup/objects/ca/dab17f594eca253a6fba5c82e712306c8c293e b/RockOS/.git-backup/objects/ca/dab17f594eca253a6fba5c82e712306c8c293e new file mode 100644 index 0000000..4a54972 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/dab17f594eca253a6fba5c82e712306c8c293e differ diff --git a/RockOS/.git-backup/objects/ca/dd0ee868d9d8573e28f08a4c2a91d493e78599 b/RockOS/.git-backup/objects/ca/dd0ee868d9d8573e28f08a4c2a91d493e78599 new file mode 100644 index 0000000..8118337 --- /dev/null +++ b/RockOS/.git-backup/objects/ca/dd0ee868d9d8573e28f08a4c2a91d493e78599 @@ -0,0 +1 @@ +xU y1ơ1i݅w:|zϧ͖p^AƎ1OI!CF:o|<9ҢZen&\p ͏V~ۼbn,`2L \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ca/e5f952cd5fb10bbfd40dc630ec492ca431c39b b/RockOS/.git-backup/objects/ca/e5f952cd5fb10bbfd40dc630ec492ca431c39b new file mode 100644 index 0000000..39bb2d7 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/e5f952cd5fb10bbfd40dc630ec492ca431c39b differ diff --git a/RockOS/.git-backup/objects/ca/f029e5e204578076776c40bbfe58820d3c0973 b/RockOS/.git-backup/objects/ca/f029e5e204578076776c40bbfe58820d3c0973 new file mode 100644 index 0000000..b01c378 Binary files /dev/null and b/RockOS/.git-backup/objects/ca/f029e5e204578076776c40bbfe58820d3c0973 differ diff --git a/RockOS/.git-backup/objects/cb/34185b735b4e79b31e1d66af18c91a6a0e2f78 b/RockOS/.git-backup/objects/cb/34185b735b4e79b31e1d66af18c91a6a0e2f78 new file mode 100644 index 0000000..49f7c12 Binary files /dev/null and b/RockOS/.git-backup/objects/cb/34185b735b4e79b31e1d66af18c91a6a0e2f78 differ diff --git a/RockOS/.git-backup/objects/cb/6f1bdfc8ddc0a9c59051b6d29a91b9a5245082 b/RockOS/.git-backup/objects/cb/6f1bdfc8ddc0a9c59051b6d29a91b9a5245082 new file mode 100644 index 0000000..693f3a3 Binary files /dev/null and b/RockOS/.git-backup/objects/cb/6f1bdfc8ddc0a9c59051b6d29a91b9a5245082 differ diff --git a/RockOS/.git-backup/objects/cc/01f7961fac7b12f99966b3847d9c5f20c1cf82 b/RockOS/.git-backup/objects/cc/01f7961fac7b12f99966b3847d9c5f20c1cf82 new file mode 100644 index 0000000..d8dc893 Binary files /dev/null and b/RockOS/.git-backup/objects/cc/01f7961fac7b12f99966b3847d9c5f20c1cf82 differ diff --git a/RockOS/.git-backup/objects/cc/482a835076281f97f4064e9216d0c3957d7a6e b/RockOS/.git-backup/objects/cc/482a835076281f97f4064e9216d0c3957d7a6e new file mode 100644 index 0000000..d2339c4 --- /dev/null +++ b/RockOS/.git-backup/objects/cc/482a835076281f97f4064e9216d0c3957d7a6e @@ -0,0 +1,2 @@ +xQK0}ί8Np݋2Ю0ATJڦk KF*C&Ӎ*Br=9)*qq~y4JZ-pi oAsXSmؖ!J+Ԋrs^j7YaSW_j*-a:X711Ьj^vZs!"2re%Ẳ5کkd,[UI6ߒa[| +!4iw<|={v*,zOKt겄6%VJqxMU̸2rgf?zLfΆ>(}4LQΡSv͔"aLqSP|Ʀhps+)ݪis$v}5x!7( ܑ?Syl//&m'rTN!]üsdjE9;ԑ ::XA+ >R"]$nJWj#[0FOⴷm?DE,xݭD4~\;:95z.ks"'c%mxaots޷)L6f$ۧM㟣z/?*Vx\X" \ No newline at end of file diff --git a/RockOS/.git-backup/objects/cd/92242c5febb7514ff28ef17e05724130544450 b/RockOS/.git-backup/objects/cd/92242c5febb7514ff28ef17e05724130544450 new file mode 100644 index 0000000..c515cf8 Binary files /dev/null and b/RockOS/.git-backup/objects/cd/92242c5febb7514ff28ef17e05724130544450 differ diff --git a/RockOS/.git-backup/objects/cd/b4cf186e71172616957828c78e266a3a973a59 b/RockOS/.git-backup/objects/cd/b4cf186e71172616957828c78e266a3a973a59 new file mode 100644 index 0000000..7502827 Binary files /dev/null and b/RockOS/.git-backup/objects/cd/b4cf186e71172616957828c78e266a3a973a59 differ diff --git a/RockOS/.git-backup/objects/cd/e763ecc7df5ca224acdef46deb1a97e4dc0efe b/RockOS/.git-backup/objects/cd/e763ecc7df5ca224acdef46deb1a97e4dc0efe new file mode 100644 index 0000000..3fe6840 Binary files /dev/null and b/RockOS/.git-backup/objects/cd/e763ecc7df5ca224acdef46deb1a97e4dc0efe differ diff --git a/RockOS/.git-backup/objects/ce/03ec792a1fe39ed219dbad681422d3feefc2a4 b/RockOS/.git-backup/objects/ce/03ec792a1fe39ed219dbad681422d3feefc2a4 new file mode 100644 index 0000000..5c497b9 Binary files /dev/null and b/RockOS/.git-backup/objects/ce/03ec792a1fe39ed219dbad681422d3feefc2a4 differ diff --git a/RockOS/.git-backup/objects/ce/47b08a6d5b71018458f37f0a2f00a3e58c1ef0 b/RockOS/.git-backup/objects/ce/47b08a6d5b71018458f37f0a2f00a3e58c1ef0 new file mode 100644 index 0000000..9a21d0e Binary files /dev/null and b/RockOS/.git-backup/objects/ce/47b08a6d5b71018458f37f0a2f00a3e58c1ef0 differ diff --git a/RockOS/.git-backup/objects/ce/7c31c539b6fd03d09f20cc1fdb2b2ad13bbd03 b/RockOS/.git-backup/objects/ce/7c31c539b6fd03d09f20cc1fdb2b2ad13bbd03 new file mode 100644 index 0000000..5649703 Binary files /dev/null and b/RockOS/.git-backup/objects/ce/7c31c539b6fd03d09f20cc1fdb2b2ad13bbd03 differ diff --git a/RockOS/.git-backup/objects/ce/81d4eb31577446527811678dfc3fd042fb787f b/RockOS/.git-backup/objects/ce/81d4eb31577446527811678dfc3fd042fb787f new file mode 100644 index 0000000..806f64b --- /dev/null +++ b/RockOS/.git-backup/objects/ce/81d4eb31577446527811678dfc3fd042fb787f @@ -0,0 +1,2 @@ +x[ +0@Qـe2"neLR 6q/Zrg,)H \!$O$d)[n8xCe8"lls %qki3k7˭JY{pDFT.VƖ4M xFe \ No newline at end of file diff --git a/RockOS/.git-backup/objects/cf/048316ca0aacb4a8c69b3fe10f95be7ef28354 b/RockOS/.git-backup/objects/cf/048316ca0aacb4a8c69b3fe10f95be7ef28354 new file mode 100644 index 0000000..1d40825 Binary files /dev/null and b/RockOS/.git-backup/objects/cf/048316ca0aacb4a8c69b3fe10f95be7ef28354 differ diff --git a/RockOS/.git-backup/objects/cf/4c43c21154d76440d8a7cb81dca3baa6980624 b/RockOS/.git-backup/objects/cf/4c43c21154d76440d8a7cb81dca3baa6980624 new file mode 100644 index 0000000..fa8a88b Binary files /dev/null and b/RockOS/.git-backup/objects/cf/4c43c21154d76440d8a7cb81dca3baa6980624 differ diff --git a/RockOS/.git-backup/objects/cf/50e23584139467ac7e39f8c0c24bdc2f138aea b/RockOS/.git-backup/objects/cf/50e23584139467ac7e39f8c0c24bdc2f138aea new file mode 100644 index 0000000..dce65eb Binary files /dev/null and b/RockOS/.git-backup/objects/cf/50e23584139467ac7e39f8c0c24bdc2f138aea differ diff --git a/RockOS/.git-backup/objects/cf/84c6b1a008d0b5f90088c9c07047c4ab757d9b b/RockOS/.git-backup/objects/cf/84c6b1a008d0b5f90088c9c07047c4ab757d9b new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/cf/f81b1a6ac57db0d9c738d83b0b6683f87690b0 b/RockOS/.git-backup/objects/cf/f81b1a6ac57db0d9c738d83b0b6683f87690b0 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/d0/3b89c99ffc0f15a5e10ebe9ea318e11007ad76 b/RockOS/.git-backup/objects/d0/3b89c99ffc0f15a5e10ebe9ea318e11007ad76 new file mode 100644 index 0000000..3d2b7c1 Binary files /dev/null and b/RockOS/.git-backup/objects/d0/3b89c99ffc0f15a5e10ebe9ea318e11007ad76 differ diff --git a/RockOS/.git-backup/objects/d0/6f04bf0536bfb5b560bc32c05430647502390e b/RockOS/.git-backup/objects/d0/6f04bf0536bfb5b560bc32c05430647502390e new file mode 100644 index 0000000..84813fa Binary files /dev/null and b/RockOS/.git-backup/objects/d0/6f04bf0536bfb5b560bc32c05430647502390e differ diff --git a/RockOS/.git-backup/objects/d0/6f6acb6c8aea0e50e5afe7a2705b65af64c27b b/RockOS/.git-backup/objects/d0/6f6acb6c8aea0e50e5afe7a2705b65af64c27b new file mode 100644 index 0000000..7135d0e --- /dev/null +++ b/RockOS/.git-backup/objects/d0/6f6acb6c8aea0e50e5afe7a2705b65af64c27b @@ -0,0 +1 @@ +xRo@+& hr\Wb\.Dٙ ys|u~,bdUT@\}GmiKKcTMGiY!sYOsqAϨPoG6s˭j9 ETL:w)z,eM;ә ه>`@yiUo~|۠AQɬrCþ"SCo \}Q>B1z3#t9X(EU[6Y䶟d?T/Y}4ҊNG$p+ p魆(Sh)p?: 0Х d1hzy&z"?7$*ŽƓC]y3T g9')*v3nvf \ No newline at end of file diff --git a/RockOS/.git-backup/objects/d1/0acfeeb2b1ab46931380841bdeff17fe2a13f4 b/RockOS/.git-backup/objects/d1/0acfeeb2b1ab46931380841bdeff17fe2a13f4 new file mode 100644 index 0000000..8841d73 Binary files /dev/null and b/RockOS/.git-backup/objects/d1/0acfeeb2b1ab46931380841bdeff17fe2a13f4 differ diff --git a/RockOS/.git-backup/objects/d1/2c4a7faa12e68479b8d60f810ba378c79eed32 b/RockOS/.git-backup/objects/d1/2c4a7faa12e68479b8d60f810ba378c79eed32 new file mode 100644 index 0000000..6eb6201 Binary files /dev/null and b/RockOS/.git-backup/objects/d1/2c4a7faa12e68479b8d60f810ba378c79eed32 differ diff --git a/RockOS/.git-backup/objects/d1/3448e32878447496cd80e36cc7ffcd5ba5f44c b/RockOS/.git-backup/objects/d1/3448e32878447496cd80e36cc7ffcd5ba5f44c new file mode 100644 index 0000000..795c221 Binary files /dev/null and b/RockOS/.git-backup/objects/d1/3448e32878447496cd80e36cc7ffcd5ba5f44c differ diff --git a/RockOS/.git-backup/objects/d1/39bf5bf92ae2d0bb20d63235e0b7ace3ce1362 b/RockOS/.git-backup/objects/d1/39bf5bf92ae2d0bb20d63235e0b7ace3ce1362 new file mode 100644 index 0000000..dc48d4f Binary files /dev/null and b/RockOS/.git-backup/objects/d1/39bf5bf92ae2d0bb20d63235e0b7ace3ce1362 differ diff --git a/RockOS/.git-backup/objects/d1/565a2d9413593c4095fd1e3f22cdab11d9e5b7 b/RockOS/.git-backup/objects/d1/565a2d9413593c4095fd1e3f22cdab11d9e5b7 new file mode 100644 index 0000000..5c3c5b9 --- /dev/null +++ b/RockOS/.git-backup/objects/d1/565a2d9413593c4095fd1e3f22cdab11d9e5b7 @@ -0,0 +1,3 @@ +xQK @=H% !*AECd +f_xٴRz]b Oj.ruBq3ja#z $r +qpd3˼ U tDX2m;Tt?a!1H׻`sTXD:u%Rc5١>Y#GrW;H߾ }!:&gc/6} lhI zi+j#$o6W]N;65D@ B=F]_n,&Z|Ԑ!mRs0VeJ4o + 'LEd-̧V㠛6ʴT1C:;)J`,%)o:AWm qc2~yzf"8}Vݔ,sA_PJvrO__.3U?g%uaFb4d JD`Ӵ9ޠ&b9*b{xl@Yx(}˯UX#t+ l+Pf/c6ev9imU{.ѵLL0άԦVphŜk M^Q 7+Od8;WN.ݩ$M&$Frn;[!$#po;q4l{:*qKNGoa Sa8;5G2R/tLɧxV0|C'>\ 9ȍ`U"+a[ _Otw\FȞ?wTh;Z?xsڽr \ No newline at end of file diff --git a/RockOS/.git-backup/objects/d1/b5136f0dc0811357b9398b06ff5821f7b7da02 b/RockOS/.git-backup/objects/d1/b5136f0dc0811357b9398b06ff5821f7b7da02 new file mode 100644 index 0000000..48f1d98 Binary files /dev/null and b/RockOS/.git-backup/objects/d1/b5136f0dc0811357b9398b06ff5821f7b7da02 differ diff --git a/RockOS/.git-backup/objects/d2/127252746b6fdd155172846c7652167bab8bb0 b/RockOS/.git-backup/objects/d2/127252746b6fdd155172846c7652167bab8bb0 new file mode 100644 index 0000000..ff97b6c Binary files /dev/null and b/RockOS/.git-backup/objects/d2/127252746b6fdd155172846c7652167bab8bb0 differ diff --git a/RockOS/.git-backup/objects/d2/4bca8736aeb024b484eb6ebfc021aa95d9b769 b/RockOS/.git-backup/objects/d2/4bca8736aeb024b484eb6ebfc021aa95d9b769 new file mode 100644 index 0000000..7deebb7 Binary files /dev/null and b/RockOS/.git-backup/objects/d2/4bca8736aeb024b484eb6ebfc021aa95d9b769 differ diff --git a/RockOS/.git-backup/objects/d2/6f235db36ca172aab497a834444326a466af15 b/RockOS/.git-backup/objects/d2/6f235db36ca172aab497a834444326a466af15 new file mode 100644 index 0000000..f7cf35b Binary files /dev/null and b/RockOS/.git-backup/objects/d2/6f235db36ca172aab497a834444326a466af15 differ diff --git a/RockOS/.git-backup/objects/d2/765cd3e7e5838421ca0328476b99681479eea5 b/RockOS/.git-backup/objects/d2/765cd3e7e5838421ca0328476b99681479eea5 new file mode 100644 index 0000000..5beb040 Binary files /dev/null and b/RockOS/.git-backup/objects/d2/765cd3e7e5838421ca0328476b99681479eea5 differ diff --git a/RockOS/.git-backup/objects/d2/b56e5da656e8eb35c29a3ed40a9c4ec810169d b/RockOS/.git-backup/objects/d2/b56e5da656e8eb35c29a3ed40a9c4ec810169d new file mode 100644 index 0000000..cee471a Binary files /dev/null and b/RockOS/.git-backup/objects/d2/b56e5da656e8eb35c29a3ed40a9c4ec810169d differ diff --git a/RockOS/.git-backup/objects/d2/b854ac2d17265a595b5c30a8ed4619bc869b40 b/RockOS/.git-backup/objects/d2/b854ac2d17265a595b5c30a8ed4619bc869b40 new file mode 100644 index 0000000..6b566a7 --- /dev/null +++ b/RockOS/.git-backup/objects/d2/b854ac2d17265a595b5c30a8ed4619bc869b40 @@ -0,0 +1,2 @@ +xE0D+E-hH">8 {0#\O6x`ӫEo)WmvI\C񕎱|yI \ No newline at end of file diff --git a/RockOS/.git-backup/objects/d2/bf2d72e441b4fa65b915ef05c051038b6de705 b/RockOS/.git-backup/objects/d2/bf2d72e441b4fa65b915ef05c051038b6de705 new file mode 100644 index 0000000..05f9729 Binary files /dev/null and b/RockOS/.git-backup/objects/d2/bf2d72e441b4fa65b915ef05c051038b6de705 differ diff --git a/RockOS/.git-backup/objects/d2/c5b68eb9f75187332a69e319f5112c5d046c72 b/RockOS/.git-backup/objects/d2/c5b68eb9f75187332a69e319f5112c5d046c72 new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/.git-backup/objects/d2/cabb35178cca9b1db5bf66a902a5a83357f943 b/RockOS/.git-backup/objects/d2/cabb35178cca9b1db5bf66a902a5a83357f943 new file mode 100644 index 0000000..d3c72cc Binary files /dev/null and b/RockOS/.git-backup/objects/d2/cabb35178cca9b1db5bf66a902a5a83357f943 differ diff --git a/RockOS/.git-backup/objects/d3/61bb5c326a160ae85df5521b9522dd6eb4ed29 b/RockOS/.git-backup/objects/d3/61bb5c326a160ae85df5521b9522dd6eb4ed29 new file mode 100644 index 0000000..e0c9ef2 --- /dev/null +++ b/RockOS/.git-backup/objects/d3/61bb5c326a160ae85df5521b9522dd6eb4ed29 @@ -0,0 +1,5 @@ +xSn0_1p^vkćQ19{ + +C*" I%M{b5QT,gggQ9>,o!Z޶OD0FǕ"` h8#9]ވת̈́7"י~t{̝r +cΤ%BgxVzs( Kayg92G43{+dt%Ǖ6+Y +/nϘt>GY4o'Ei(9Yb. eFM]z *蹮R\ڙ:Ls#V#"jEyy/o ?!w rN)@HqF:4Ӊr BzO˓[U1e֌S[YuVB1= 3nq<k$:2c:6JC@dݑ+w2'z|Y>72ѱ6l9iGB~D;UKN,P<=%P~w # C򝱠LTƽعc4/BW| \ No newline at end of file diff --git a/RockOS/.git-backup/objects/d9/5be467b45a1e2e9e391abb1442ef1efe6dc906 b/RockOS/.git-backup/objects/d9/5be467b45a1e2e9e391abb1442ef1efe6dc906 new file mode 100644 index 0000000..f280362 Binary files /dev/null and b/RockOS/.git-backup/objects/d9/5be467b45a1e2e9e391abb1442ef1efe6dc906 differ diff --git a/RockOS/.git-backup/objects/d9/7f158d9339548b4f19dc910378cf6a50f74da8 b/RockOS/.git-backup/objects/d9/7f158d9339548b4f19dc910378cf6a50f74da8 new file mode 100644 index 0000000..6b86b15 --- /dev/null +++ b/RockOS/.git-backup/objects/d9/7f158d9339548b4f19dc910378cf6a50f74da8 @@ -0,0 +1,2 @@ +xU +0 E}W8?# ZڲV盦aJM0^ZxĄkRDʆE9`HUAWH^n%l_8tñP-!L 틳e5PY7KMxg4#E9eG \ No newline at end of file diff --git a/RockOS/.git-backup/objects/d9/c580241279891c99a68721bca432361bfa0373 b/RockOS/.git-backup/objects/d9/c580241279891c99a68721bca432361bfa0373 new file mode 100644 index 0000000..5cce91e Binary files /dev/null and b/RockOS/.git-backup/objects/d9/c580241279891c99a68721bca432361bfa0373 differ diff --git a/RockOS/.git-backup/objects/d9/d4229e2c6de8206e5e10d1d7b853fee5ad3ba0 b/RockOS/.git-backup/objects/d9/d4229e2c6de8206e5e10d1d7b853fee5ad3ba0 new file mode 100644 index 0000000..04bf71f Binary files /dev/null and b/RockOS/.git-backup/objects/d9/d4229e2c6de8206e5e10d1d7b853fee5ad3ba0 differ diff --git a/RockOS/.git-backup/objects/d9/fab399730307737839ca2be36a85be0256bfdf b/RockOS/.git-backup/objects/d9/fab399730307737839ca2be36a85be0256bfdf new file mode 100644 index 0000000..074ced7 Binary files /dev/null and b/RockOS/.git-backup/objects/d9/fab399730307737839ca2be36a85be0256bfdf differ diff --git a/RockOS/.git-backup/objects/da/05f7f922d1be8bd1c90db17817aa48c27e2bb0 b/RockOS/.git-backup/objects/da/05f7f922d1be8bd1c90db17817aa48c27e2bb0 new file mode 100644 index 0000000..dbc8feb Binary files /dev/null and b/RockOS/.git-backup/objects/da/05f7f922d1be8bd1c90db17817aa48c27e2bb0 differ diff --git a/RockOS/.git-backup/objects/da/18c7cbcafa991f3738968dd8f55c331866b1f3 b/RockOS/.git-backup/objects/da/18c7cbcafa991f3738968dd8f55c331866b1f3 new file mode 100644 index 0000000..96e84ed Binary files /dev/null and b/RockOS/.git-backup/objects/da/18c7cbcafa991f3738968dd8f55c331866b1f3 differ diff --git a/RockOS/.git-backup/objects/da/39cd9488701bf0245357808f4b0df06d1848cd b/RockOS/.git-backup/objects/da/39cd9488701bf0245357808f4b0df06d1848cd new file mode 100644 index 0000000..c91663e --- /dev/null +++ b/RockOS/.git-backup/objects/da/39cd9488701bf0245357808f4b0df06d1848cd @@ -0,0 +1,4 @@ +xVik@g dɉs6H[pUT;֖[}v7_<{γ(c(b4).2/F1xw9|y3{\\^NY!),YPvn5ϪcDyU0B¢d}2܉ēa*|@:HYSJI^C`.NŸ1ٍ{6&'p:p[~ ao"_3&? Pd||ȧw~~NtRQCgn88E~c2ޖ]%_L]?wpi5Y.ɏnd4HB V/@ " 3fv\簇~2٣C%,ViZ2ExMΖ},gc?uXP +pI1Fb"=w /0;) \ No newline at end of file diff --git a/RockOS/.git-backup/objects/da/5fff6ee3729c2dfde4884affb6a1bbe23ddfc9 b/RockOS/.git-backup/objects/da/5fff6ee3729c2dfde4884affb6a1bbe23ddfc9 new file mode 100644 index 0000000..65cc9bb --- /dev/null +++ b/RockOS/.git-backup/objects/da/5fff6ee3729c2dfde4884affb6a1bbe23ddfc9 @@ -0,0 +1 @@ +xS]k0ݫ mae샱7WWC2RMGX4CML2Ka>7{9C&;nH$j19v:<`b.*"f%m맓#mrݸykF?mu򤜼nA/# oS;>>d*&< 3u +n \.fm\_St(bA~bжXT2!𩸫są27cJg2N~p\(F :iDi ;!bAwRe[pk'5@sH9Kް$p~IKŒxyADTxfawJ8 +`)24j(e Lg!<nI%E8`XɜmjމuMTnxn #z 6D:[sL¦0LR}FK+6sDhLTz@ V g<.}YHJ'6rJ*0KkŒ:yЫX&UlC_=6ɒ3H ;{6w9;rn:;~" -Jv֎_oc&%<ȈT*GTҰ}T<jG2"`3~N}7:Iaciy96;2"t{#P_yQ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e1/9f5ec67699cadd9482523b3f882d6a776e1eb8 b/RockOS/.git-backup/objects/e1/9f5ec67699cadd9482523b3f882d6a776e1eb8 new file mode 100644 index 0000000..728c21a --- /dev/null +++ b/RockOS/.git-backup/objects/e1/9f5ec67699cadd9482523b3f882d6a776e1eb8 @@ -0,0 +1,2 @@ +x=0 {(3 +q&$C%4ĕ"?`H?sn)l['B#T\{t˩wGָLCnlh˴Z_i.KFA¸*bèX)kU$jd1B.;x`s@jDWF˻#, ħn #5‚t=_> XM~wZ64m͟]KI8 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e2/ab1303243a463122832044a7fc75651008fb8f b/RockOS/.git-backup/objects/e2/ab1303243a463122832044a7fc75651008fb8f new file mode 100644 index 0000000..4880c3a --- /dev/null +++ b/RockOS/.git-backup/objects/e2/ab1303243a463122832044a7fc75651008fb8f @@ -0,0 +1 @@ +x[j!E*jԆ-f|ng [shvLξ͓lhd1XeNlCbOd@3g> xN7TvXY !%"z|x8 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e3/56174ffa7c52d6075f48f29b235601daedf6b6 b/RockOS/.git-backup/objects/e3/56174ffa7c52d6075f48f29b235601daedf6b6 new file mode 100644 index 0000000..c756dfc Binary files /dev/null and b/RockOS/.git-backup/objects/e3/56174ffa7c52d6075f48f29b235601daedf6b6 differ diff --git a/RockOS/.git-backup/objects/e3/5d450e604a3ad51a675fd36e8f195427aae5fb b/RockOS/.git-backup/objects/e3/5d450e604a3ad51a675fd36e8f195427aae5fb new file mode 100644 index 0000000..da13410 --- /dev/null +++ b/RockOS/.git-backup/objects/e3/5d450e604a3ad51a675fd36e8f195427aae5fb @@ -0,0 +1,2 @@ +x}Qo0yί8t)O Vфؒ*$"'vKlg[߹NWZ큗ľ|kej|[a1DTͬi;P+`iz&5evx\xJ^:'e o08qpn4 +.Ʉ/<RIt:wR7ja]onE^<ޥLÔwQ2__* ;9 2Olih4%@t}1|z'$l6D0|ZEOO | Yad>nY#<>_T5U/cς!Syϝ_Ӟ#ē}/OcsiÌWCqo$G(b]quPm&ȫ"]^/۷# \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e3/9ea6ca895f2d4469d9ac004e1eca6819ea45ac b/RockOS/.git-backup/objects/e3/9ea6ca895f2d4469d9ac004e1eca6819ea45ac new file mode 100644 index 0000000..3461fc8 --- /dev/null +++ b/RockOS/.git-backup/objects/e3/9ea6ca895f2d4469d9ac004e1eca6819ea45ac @@ -0,0 +1,4 @@ +xRN@SLjbjDKo twX,MZwwYj726vE8Leg(E YY]TK^Ju4QьqF)2a݇Ua%j +u3>'4@y嚮ޚ\@01nUo- nްgL'+\OB&?q)a)P%(!o>Ba +7(z1Bq/-Xg + *%;p xl :pܜNAdnNΥk sfFh:R{ (ɗoHK)\ZpǗh.ҩ`hLQE//]X;x&50W@)?2k(䪊' \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e4/23f9759c74f2f2432e03fba44a1b45d4a62d8b b/RockOS/.git-backup/objects/e4/23f9759c74f2f2432e03fba44a1b45d4a62d8b new file mode 100644 index 0000000..16c9abb Binary files /dev/null and b/RockOS/.git-backup/objects/e4/23f9759c74f2f2432e03fba44a1b45d4a62d8b differ diff --git a/RockOS/.git-backup/objects/e4/2ee8eb85fafc4c16654372e7cd9979b9f1dd62 b/RockOS/.git-backup/objects/e4/2ee8eb85fafc4c16654372e7cd9979b9f1dd62 new file mode 100644 index 0000000..ae803f8 Binary files /dev/null and b/RockOS/.git-backup/objects/e4/2ee8eb85fafc4c16654372e7cd9979b9f1dd62 differ diff --git a/RockOS/.git-backup/objects/e4/3cc2cc55d3a4fe9c47b93d5ba7743544dc2190 b/RockOS/.git-backup/objects/e4/3cc2cc55d3a4fe9c47b93d5ba7743544dc2190 new file mode 100644 index 0000000..cc1100f Binary files /dev/null and b/RockOS/.git-backup/objects/e4/3cc2cc55d3a4fe9c47b93d5ba7743544dc2190 differ diff --git a/RockOS/.git-backup/objects/e5/37ccc435054bdb662ccba08bf8fa542f9918f2 b/RockOS/.git-backup/objects/e5/37ccc435054bdb662ccba08bf8fa542f9918f2 new file mode 100644 index 0000000..d26a252 --- /dev/null +++ b/RockOS/.git-backup/objects/e5/37ccc435054bdb662ccba08bf8fa542f9918f2 @@ -0,0 +1 @@ +xRMK1_1 E*%$TҬ"liKs7j!uڲ[ ~m}}-ph /:FyS2'h+nw^VWCr|I>=0N7qxf\iQ$:IIaJ4[ Zgp i@:@ֈz`@Wn,:/(|*Q]#Q\ _D黼ΈGbӿFqRO\y \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e6/791f6d8ab9b31e1c8ec1fe71d03c638d846591 b/RockOS/.git-backup/objects/e6/791f6d8ab9b31e1c8ec1fe71d03c638d846591 new file mode 100644 index 0000000..270fba2 Binary files /dev/null and b/RockOS/.git-backup/objects/e6/791f6d8ab9b31e1c8ec1fe71d03c638d846591 differ diff --git a/RockOS/.git-backup/objects/e7/7122630de3368e5afa4ddadc6caa88bbbd1873 b/RockOS/.git-backup/objects/e7/7122630de3368e5afa4ddadc6caa88bbbd1873 new file mode 100644 index 0000000..551d8c8 --- /dev/null +++ b/RockOS/.git-backup/objects/e7/7122630de3368e5afa4ddadc6caa88bbbd1873 @@ -0,0 +1 @@ +xUMO0D9WK@U T'g+'ʪƉk'T8°澹~=Ix[Gagh3v[vt@pZTy dĨ󸐒8":2EYcix6 y`(7KbwoAwI7|,JOԔeV",I!ϕnj_K&%DWD|d \ No newline at end of file diff --git a/RockOS/.git-backup/objects/e9/9e7194039b69477871a23ae6f57d720435414f b/RockOS/.git-backup/objects/e9/9e7194039b69477871a23ae6f57d720435414f new file mode 100644 index 0000000..2578c83 Binary files /dev/null and b/RockOS/.git-backup/objects/e9/9e7194039b69477871a23ae6f57d720435414f differ diff --git a/RockOS/.git-backup/objects/e9/b3ffcb253ab10087bd28974a39bc21c93bb560 b/RockOS/.git-backup/objects/e9/b3ffcb253ab10087bd28974a39bc21c93bb560 new file mode 100644 index 0000000..1925109 Binary files /dev/null and b/RockOS/.git-backup/objects/e9/b3ffcb253ab10087bd28974a39bc21c93bb560 differ diff --git a/RockOS/.git-backup/objects/e9/c7f419af590cafc4ad09fb59e3521ac32a89dd b/RockOS/.git-backup/objects/e9/c7f419af590cafc4ad09fb59e3521ac32a89dd new file mode 100644 index 0000000..0c8926b Binary files /dev/null and b/RockOS/.git-backup/objects/e9/c7f419af590cafc4ad09fb59e3521ac32a89dd differ diff --git a/RockOS/.git-backup/objects/e9/fd9f4c60e8a7ed18c1135a83df4833b9101ce5 b/RockOS/.git-backup/objects/e9/fd9f4c60e8a7ed18c1135a83df4833b9101ce5 new file mode 100644 index 0000000..e26d7d4 Binary files /dev/null and b/RockOS/.git-backup/objects/e9/fd9f4c60e8a7ed18c1135a83df4833b9101ce5 differ diff --git a/RockOS/.git-backup/objects/ea/01de7af8426da64e23b09049167045732778c9 b/RockOS/.git-backup/objects/ea/01de7af8426da64e23b09049167045732778c9 new file mode 100644 index 0000000..b2d03d2 --- /dev/null +++ b/RockOS/.git-backup/objects/ea/01de7af8426da64e23b09049167045732778c9 @@ -0,0 +1,4 @@ +xUMk1Eί؅Bw.R +.Dky0&JoRA*!ɻop7Xu2T  (Roף o:=),A+j gTDR' EJ+L l2*Kk)EAΧX$/V\eڮYK :J77਎161S|^]o+@u=ȎgNAy5%i%' \ No newline at end of file diff --git a/RockOS/.git-backup/objects/eb/5773c7ad22c1dd579364424a5a12539b11e892 b/RockOS/.git-backup/objects/eb/5773c7ad22c1dd579364424a5a12539b11e892 new file mode 100644 index 0000000..9fa0899 Binary files /dev/null and b/RockOS/.git-backup/objects/eb/5773c7ad22c1dd579364424a5a12539b11e892 differ diff --git a/RockOS/.git-backup/objects/eb/97774cdc8f3b0dc2f3aefb56f5c12b98351452 b/RockOS/.git-backup/objects/eb/97774cdc8f3b0dc2f3aefb56f5c12b98351452 new file mode 100644 index 0000000..b608d5c Binary files /dev/null and b/RockOS/.git-backup/objects/eb/97774cdc8f3b0dc2f3aefb56f5c12b98351452 differ diff --git a/RockOS/.git-backup/objects/eb/d1890770bacbe3fc518289724acc98f3f8011e b/RockOS/.git-backup/objects/eb/d1890770bacbe3fc518289724acc98f3f8011e new file mode 100644 index 0000000..66707cd Binary files /dev/null and b/RockOS/.git-backup/objects/eb/d1890770bacbe3fc518289724acc98f3f8011e differ diff --git a/RockOS/.git-backup/objects/eb/f7b89c21c4ac892076357058a541537c0f806a b/RockOS/.git-backup/objects/eb/f7b89c21c4ac892076357058a541537c0f806a new file mode 100644 index 0000000..d52fa51 Binary files /dev/null and b/RockOS/.git-backup/objects/eb/f7b89c21c4ac892076357058a541537c0f806a differ diff --git a/RockOS/.git-backup/objects/ec/3cbb479486af14f15f95376cc0e8ec1d86ba9a b/RockOS/.git-backup/objects/ec/3cbb479486af14f15f95376cc0e8ec1d86ba9a new file mode 100644 index 0000000..09ea52a --- /dev/null +++ b/RockOS/.git-backup/objects/ec/3cbb479486af14f15f95376cc0e8ec1d86ba9a @@ -0,0 +1 @@ +x;n0]lH.?aJ€o\.mdHL[Ut 0Ʈ5h5R@ ()59;˙, 8@U(9bʎ`$pI)P7~cY6Qh[f{q:.z"bLIN.7}߿Q)7>)G \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ec/3f4075683ff6b3b713b2fe606ba23ac5f0b4d9 b/RockOS/.git-backup/objects/ec/3f4075683ff6b3b713b2fe606ba23ac5f0b4d9 new file mode 100644 index 0000000..b370df9 --- /dev/null +++ b/RockOS/.git-backup/objects/ec/3f4075683ff6b3b713b2fe606ba23ac5f0b4d9 @@ -0,0 +1,3 @@ +xmS[o0s~7*aL ECQB\Rp>; %}9v.qXI{$؞ +ّT )?_u)햧fϺ+K)f?]cw1,*0+r˔O;ukA/AU&R4sP &>iGF֛e9pLQ`o@ 81K( Q3U;y mT0!8 rMh9zak|ZRjQ[zx\1=ڙz>HdyL} z^`a:?.Ek>ARƺ7^130蝕پ&b&d~zh +ƪhu(t0g2$3WTl5k@ 11Sؒ*AA"b{&hH.V+ *K8\ GxRYkRQC;չ sb6#t9!a5uNئw -uWٷ'X(8Ku,U'!vX!x8hYO̦g? kAK \ No newline at end of file diff --git a/RockOS/.git-backup/objects/ef/70e011a630e469a564d18019898baf3f66f0f7 b/RockOS/.git-backup/objects/ef/70e011a630e469a564d18019898baf3f66f0f7 new file mode 100644 index 0000000..e8ef6a0 Binary files /dev/null and b/RockOS/.git-backup/objects/ef/70e011a630e469a564d18019898baf3f66f0f7 differ diff --git a/RockOS/.git-backup/objects/ef/c4608c7e9d24958cca766ef2b938dab4a02af7 b/RockOS/.git-backup/objects/ef/c4608c7e9d24958cca766ef2b938dab4a02af7 new file mode 100644 index 0000000..ffa9c7c Binary files /dev/null and b/RockOS/.git-backup/objects/ef/c4608c7e9d24958cca766ef2b938dab4a02af7 differ diff --git a/RockOS/.git-backup/objects/f0/429897c3981aba8f608f3e344ee57125c64bce b/RockOS/.git-backup/objects/f0/429897c3981aba8f608f3e344ee57125c64bce new file mode 100644 index 0000000..6dbcfde --- /dev/null +++ b/RockOS/.git-backup/objects/f0/429897c3981aba8f608f3e344ee57125c64bce @@ -0,0 +1,2 @@ +xM +0 `{vAEɓG_@fja)DX|I[moXid:'\5(2MT !7ľmb$ M \ No newline at end of file diff --git a/RockOS/.git-backup/objects/f0/ac677f68d239fd80ddc554f67fa1062a8e340b b/RockOS/.git-backup/objects/f0/ac677f68d239fd80ddc554f67fa1062a8e340b new file mode 100644 index 0000000..922dc76 Binary files /dev/null and b/RockOS/.git-backup/objects/f0/ac677f68d239fd80ddc554f67fa1062a8e340b differ diff --git a/RockOS/.git-backup/objects/f0/c43b40e89e2156a8c74e02342dc81c1353edb4 b/RockOS/.git-backup/objects/f0/c43b40e89e2156a8c74e02342dc81c1353edb4 new file mode 100644 index 0000000..663a860 Binary files /dev/null and b/RockOS/.git-backup/objects/f0/c43b40e89e2156a8c74e02342dc81c1353edb4 differ diff --git a/RockOS/.git-backup/objects/f1/2ce075369d11cccd12e645b80c8b33c1cc8c55 b/RockOS/.git-backup/objects/f1/2ce075369d11cccd12e645b80c8b33c1cc8c55 new file mode 100644 index 0000000..d6f6ca3 Binary files /dev/null and b/RockOS/.git-backup/objects/f1/2ce075369d11cccd12e645b80c8b33c1cc8c55 differ diff --git a/RockOS/.git-backup/objects/f1/ac468a38bb16b6d14da56563ce142bfc4d6885 b/RockOS/.git-backup/objects/f1/ac468a38bb16b6d14da56563ce142bfc4d6885 new file mode 100644 index 0000000..f2bcf71 --- /dev/null +++ b/RockOS/.git-backup/objects/f1/ac468a38bb16b6d14da56563ce142bfc4d6885 @@ -0,0 +1,3 @@ +xMK +0D])Z\ "Hg$FU46]&Ю(ўbޜZ(^w1>!E~ye +Jvatԣ~~ 2? \ No newline at end of file diff --git a/RockOS/.git-backup/objects/f2/0c37a0d32b36611e35a8e139c4db54e09fc409 b/RockOS/.git-backup/objects/f2/0c37a0d32b36611e35a8e139c4db54e09fc409 new file mode 100644 index 0000000..5cda43f Binary files /dev/null and b/RockOS/.git-backup/objects/f2/0c37a0d32b36611e35a8e139c4db54e09fc409 differ diff --git a/RockOS/.git-backup/objects/f2/6fed273b27e9e01403ab307a6c05d43858ed5b b/RockOS/.git-backup/objects/f2/6fed273b27e9e01403ab307a6c05d43858ed5b new file mode 100644 index 0000000..f4b7094 Binary files /dev/null and b/RockOS/.git-backup/objects/f2/6fed273b27e9e01403ab307a6c05d43858ed5b differ diff --git a/RockOS/.git-backup/objects/f2/c2e6e14908c0d685b0368678bf61dc5c0e9ac8 b/RockOS/.git-backup/objects/f2/c2e6e14908c0d685b0368678bf61dc5c0e9ac8 new file mode 100644 index 0000000..5ef7699 Binary files /dev/null and b/RockOS/.git-backup/objects/f2/c2e6e14908c0d685b0368678bf61dc5c0e9ac8 differ diff --git a/RockOS/.git-backup/objects/f3/0ba632827a07389925d9ce1726c80bac887853 b/RockOS/.git-backup/objects/f3/0ba632827a07389925d9ce1726c80bac887853 new file mode 100644 index 0000000..6b7eecd Binary files /dev/null and b/RockOS/.git-backup/objects/f3/0ba632827a07389925d9ce1726c80bac887853 differ diff --git a/RockOS/.git-backup/objects/f3/18af0c1adb3499cbddf4b3b96c595a83f398c7 b/RockOS/.git-backup/objects/f3/18af0c1adb3499cbddf4b3b96c595a83f398c7 new file mode 100644 index 0000000..697c52e Binary files /dev/null and b/RockOS/.git-backup/objects/f3/18af0c1adb3499cbddf4b3b96c595a83f398c7 differ diff --git a/RockOS/.git-backup/objects/f3/2d373f1c132148b47cd9965234e656240fc65f b/RockOS/.git-backup/objects/f3/2d373f1c132148b47cd9965234e656240fc65f new file mode 100644 index 0000000..9fef475 Binary files /dev/null and b/RockOS/.git-backup/objects/f3/2d373f1c132148b47cd9965234e656240fc65f differ diff --git a/RockOS/.git-backup/objects/f3/67739e2ef2ef3410195f8dadf7b4530956a9a4 b/RockOS/.git-backup/objects/f3/67739e2ef2ef3410195f8dadf7b4530956a9a4 new file mode 100644 index 0000000..c783f77 Binary files /dev/null and b/RockOS/.git-backup/objects/f3/67739e2ef2ef3410195f8dadf7b4530956a9a4 differ diff --git a/RockOS/.git-backup/objects/f3/f65dc173f10dfe49ff8a77126b1b18e24b77ba b/RockOS/.git-backup/objects/f3/f65dc173f10dfe49ff8a77126b1b18e24b77ba new file mode 100644 index 0000000..347739b Binary files /dev/null and b/RockOS/.git-backup/objects/f3/f65dc173f10dfe49ff8a77126b1b18e24b77ba differ diff --git a/RockOS/.git-backup/objects/f4/1ac652373cdc77c8e782886f8b2ea249bfdcf2 b/RockOS/.git-backup/objects/f4/1ac652373cdc77c8e782886f8b2ea249bfdcf2 new file mode 100644 index 0000000..4bbe56a Binary files /dev/null and b/RockOS/.git-backup/objects/f4/1ac652373cdc77c8e782886f8b2ea249bfdcf2 differ diff --git a/RockOS/.git-backup/objects/f4/338bb5d6e11cd75f5ebec527aca0c7899ef5ee b/RockOS/.git-backup/objects/f4/338bb5d6e11cd75f5ebec527aca0c7899ef5ee new file mode 100644 index 0000000..c121827 Binary files /dev/null and b/RockOS/.git-backup/objects/f4/338bb5d6e11cd75f5ebec527aca0c7899ef5ee differ diff --git a/RockOS/.git-backup/objects/f5/03b394a07ac1bfb97ec143e55e8e8bb71662bf b/RockOS/.git-backup/objects/f5/03b394a07ac1bfb97ec143e55e8e8bb71662bf new file mode 100644 index 0000000..400c17b Binary files /dev/null and b/RockOS/.git-backup/objects/f5/03b394a07ac1bfb97ec143e55e8e8bb71662bf differ diff --git a/RockOS/.git-backup/objects/f5/5aebb7bb51dd303d8317a18af3fdd49e66a4d2 b/RockOS/.git-backup/objects/f5/5aebb7bb51dd303d8317a18af3fdd49e66a4d2 new file mode 100644 index 0000000..f79610b Binary files /dev/null and b/RockOS/.git-backup/objects/f5/5aebb7bb51dd303d8317a18af3fdd49e66a4d2 differ diff --git a/RockOS/.git-backup/objects/f5/9cc207dc0d2a6f2902d3e62ab3534c39d66b0c b/RockOS/.git-backup/objects/f5/9cc207dc0d2a6f2902d3e62ab3534c39d66b0c new file mode 100644 index 0000000..e3ece6d Binary files /dev/null and b/RockOS/.git-backup/objects/f5/9cc207dc0d2a6f2902d3e62ab3534c39d66b0c differ diff --git a/RockOS/.git-backup/objects/f5/a15ba5538fd25b87bc7c8dbeb43c0d58a76314 b/RockOS/.git-backup/objects/f5/a15ba5538fd25b87bc7c8dbeb43c0d58a76314 new file mode 100644 index 0000000..107427e Binary files /dev/null and b/RockOS/.git-backup/objects/f5/a15ba5538fd25b87bc7c8dbeb43c0d58a76314 differ diff --git a/RockOS/.git-backup/objects/f5/a54fe9274f1f4780efb2aa1ec81edfb158e018 b/RockOS/.git-backup/objects/f5/a54fe9274f1f4780efb2aa1ec81edfb158e018 new file mode 100644 index 0000000..c178e62 Binary files /dev/null and b/RockOS/.git-backup/objects/f5/a54fe9274f1f4780efb2aa1ec81edfb158e018 differ diff --git a/RockOS/.git-backup/objects/f5/b534dc57bb250099e403152df646c67f517189 b/RockOS/.git-backup/objects/f5/b534dc57bb250099e403152df646c67f517189 new file mode 100644 index 0000000..a1952f2 Binary files /dev/null and b/RockOS/.git-backup/objects/f5/b534dc57bb250099e403152df646c67f517189 differ diff --git a/RockOS/.git-backup/objects/f5/c7b07aeef867664be4fe66f0af763fcddff244 b/RockOS/.git-backup/objects/f5/c7b07aeef867664be4fe66f0af763fcddff244 new file mode 100644 index 0000000..893fc85 Binary files /dev/null and b/RockOS/.git-backup/objects/f5/c7b07aeef867664be4fe66f0af763fcddff244 differ diff --git a/RockOS/.git-backup/objects/f5/d320fb063306a1ba6b4bb89d211e5a94558fa2 b/RockOS/.git-backup/objects/f5/d320fb063306a1ba6b4bb89d211e5a94558fa2 new file mode 100644 index 0000000..e4b0482 Binary files /dev/null and b/RockOS/.git-backup/objects/f5/d320fb063306a1ba6b4bb89d211e5a94558fa2 differ diff --git a/RockOS/.git-backup/objects/f5/fec2444233316c12ca1c2e6291db77ff101834 b/RockOS/.git-backup/objects/f5/fec2444233316c12ca1c2e6291db77ff101834 new file mode 100644 index 0000000..453bdd3 Binary files /dev/null and b/RockOS/.git-backup/objects/f5/fec2444233316c12ca1c2e6291db77ff101834 differ diff --git a/RockOS/.git-backup/objects/f6/8e2e615907f8507505543bb00ab7e10b9aca2e b/RockOS/.git-backup/objects/f6/8e2e615907f8507505543bb00ab7e10b9aca2e new file mode 100644 index 0000000..bd03465 --- /dev/null +++ b/RockOS/.git-backup/objects/f6/8e2e615907f8507505543bb00ab7e10b9aca2e @@ -0,0 +1 @@ +xR]k0ݳ~!a'!iBKB1#4S)AZ̑,IGtm]v󋭣s\ Nm~]8D)hw2`$;$pļpe\iL0SrE0G깴kUh[ Bv6J]pcaehJN;<,v%>ѽ&: _ŒP ^,O|g^PR"ڞVʇ$1 9#!tRISn֊cJ;?Q>RM..دi!I-9}|`sT#5ܞݽѤq^獝J#oOߚ҈?Tcfz-F \ No newline at end of file diff --git a/RockOS/.git-backup/objects/f6/c44157d9e871fdbe8eb225a9bed6dfde61a071 b/RockOS/.git-backup/objects/f6/c44157d9e871fdbe8eb225a9bed6dfde61a071 new file mode 100644 index 0000000..0255b25 --- /dev/null +++ b/RockOS/.git-backup/objects/f6/c44157d9e871fdbe8eb225a9bed6dfde61a071 @@ -0,0 +1,7 @@ +xWKO19b,R+R꥗V=Q9ưF7"{gl+a)\Z{3|݂rO^2Oӓ},ds3>HLVL%XbX$ ~WFTP i>5JTi+b-~6K?%|c8.P5PqS{6&CVou^KoQo'޶So[m-7Gevxt^,O~Qc?!dv/n@(tCpƲ+MzYnN!{qmTm [3fu#EW7ֻdea2`;B{PY{9F2A-h-Xv &NOXF#O3}$ \ No newline at end of file diff --git a/RockOS/.git-backup/objects/f7/042fac7a9b15646b240f88215773ebe70b0cfc b/RockOS/.git-backup/objects/f7/042fac7a9b15646b240f88215773ebe70b0cfc new file mode 100644 index 0000000..06f044b Binary files /dev/null and b/RockOS/.git-backup/objects/f7/042fac7a9b15646b240f88215773ebe70b0cfc differ diff --git a/RockOS/.git-backup/objects/f7/2fd0169cebd0b07b3270933cf98a1e2b8abb27 b/RockOS/.git-backup/objects/f7/2fd0169cebd0b07b3270933cf98a1e2b8abb27 new file mode 100644 index 0000000..95b6a9c Binary files /dev/null and b/RockOS/.git-backup/objects/f7/2fd0169cebd0b07b3270933cf98a1e2b8abb27 differ diff --git a/RockOS/.git-backup/objects/f7/59523c01a1a04a58d48c2816b7e9523bf9c228 b/RockOS/.git-backup/objects/f7/59523c01a1a04a58d48c2816b7e9523bf9c228 new file mode 100644 index 0000000..d22c1a0 Binary files /dev/null and b/RockOS/.git-backup/objects/f7/59523c01a1a04a58d48c2816b7e9523bf9c228 differ diff --git a/RockOS/.git-backup/objects/f7/8bd199ae6d0dd4abb3863028bc5c3baafffd27 b/RockOS/.git-backup/objects/f7/8bd199ae6d0dd4abb3863028bc5c3baafffd27 new file mode 100644 index 0000000..108c8bb Binary files /dev/null and b/RockOS/.git-backup/objects/f7/8bd199ae6d0dd4abb3863028bc5c3baafffd27 differ diff --git a/RockOS/.git-backup/objects/f7/a3a8c01b4cf273d127d7285f46e904424b30ad b/RockOS/.git-backup/objects/f7/a3a8c01b4cf273d127d7285f46e904424b30ad new file mode 100644 index 0000000..9d087ec Binary files /dev/null and b/RockOS/.git-backup/objects/f7/a3a8c01b4cf273d127d7285f46e904424b30ad differ diff --git a/RockOS/.git-backup/objects/f8/3e2de2ce637cfdb4538052b76eedd940d15647 b/RockOS/.git-backup/objects/f8/3e2de2ce637cfdb4538052b76eedd940d15647 new file mode 100644 index 0000000..2269c0e Binary files /dev/null and b/RockOS/.git-backup/objects/f8/3e2de2ce637cfdb4538052b76eedd940d15647 differ diff --git a/RockOS/.git-backup/objects/f8/4e57b2e070c8c3faa737c65050915cdfbd0c37 b/RockOS/.git-backup/objects/f8/4e57b2e070c8c3faa737c65050915cdfbd0c37 new file mode 100644 index 0000000..5a7b688 Binary files /dev/null and b/RockOS/.git-backup/objects/f8/4e57b2e070c8c3faa737c65050915cdfbd0c37 differ diff --git a/RockOS/.git-backup/objects/f8/8510e0126e2c2bd69c934c3e8c0e6f37199b77 b/RockOS/.git-backup/objects/f8/8510e0126e2c2bd69c934c3e8c0e6f37199b77 new file mode 100644 index 0000000..233509f Binary files /dev/null and b/RockOS/.git-backup/objects/f8/8510e0126e2c2bd69c934c3e8c0e6f37199b77 differ diff --git a/RockOS/.git-backup/objects/f8/90912356f2b433f179fd3ef11755c205abcd7b b/RockOS/.git-backup/objects/f8/90912356f2b433f179fd3ef11755c205abcd7b new file mode 100644 index 0000000..3d6d938 Binary files /dev/null and b/RockOS/.git-backup/objects/f8/90912356f2b433f179fd3ef11755c205abcd7b differ diff --git a/RockOS/.git-backup/objects/f8/b3b806d5b7d1e434f0d44a0c45d31a8515cca8 b/RockOS/.git-backup/objects/f8/b3b806d5b7d1e434f0d44a0c45d31a8515cca8 new file mode 100644 index 0000000..6520a0f Binary files /dev/null and b/RockOS/.git-backup/objects/f8/b3b806d5b7d1e434f0d44a0c45d31a8515cca8 differ diff --git a/RockOS/.git-backup/objects/f9/04f9ebed39da6cde36d5e1187b6252ed30ca93 b/RockOS/.git-backup/objects/f9/04f9ebed39da6cde36d5e1187b6252ed30ca93 new file mode 100644 index 0000000..c0745b9 Binary files /dev/null and b/RockOS/.git-backup/objects/f9/04f9ebed39da6cde36d5e1187b6252ed30ca93 differ diff --git a/RockOS/.git-backup/objects/f9/0e54d113aac0bc7335ebc97bc83e50b3b1e4ec b/RockOS/.git-backup/objects/f9/0e54d113aac0bc7335ebc97bc83e50b3b1e4ec new file mode 100644 index 0000000..42e93a8 Binary files /dev/null and b/RockOS/.git-backup/objects/f9/0e54d113aac0bc7335ebc97bc83e50b3b1e4ec differ diff --git a/RockOS/.git-backup/objects/f9/187cc74b099378e58736976346baf2275cebc9 b/RockOS/.git-backup/objects/f9/187cc74b099378e58736976346baf2275cebc9 new file mode 100644 index 0000000..21468dc Binary files /dev/null and b/RockOS/.git-backup/objects/f9/187cc74b099378e58736976346baf2275cebc9 differ diff --git a/RockOS/.git-backup/objects/f9/6c7b725f43108ab9a1b1273ea141db2ae052e0 b/RockOS/.git-backup/objects/f9/6c7b725f43108ab9a1b1273ea141db2ae052e0 new file mode 100644 index 0000000..6461c53 Binary files /dev/null and b/RockOS/.git-backup/objects/f9/6c7b725f43108ab9a1b1273ea141db2ae052e0 differ diff --git a/RockOS/.git-backup/objects/f9/70e8eca63ac7e90b0263356922edbec4b6e93b b/RockOS/.git-backup/objects/f9/70e8eca63ac7e90b0263356922edbec4b6e93b new file mode 100644 index 0000000..de9f6f7 --- /dev/null +++ b/RockOS/.git-backup/objects/f9/70e8eca63ac7e90b0263356922edbec4b6e93b @@ -0,0 +1,2 @@ +xu; +0D+&dcH$Iae7PȄ˺ ($UK>0iAJ-P.]%ۢbrw6' BhEu}ۼ<5U. \ No newline at end of file diff --git a/RockOS/.git-backup/objects/f9/838c181fb209445306760d9cd74e9c5c27ace5 b/RockOS/.git-backup/objects/f9/838c181fb209445306760d9cd74e9c5c27ace5 new file mode 100644 index 0000000..c1da46b Binary files /dev/null and b/RockOS/.git-backup/objects/f9/838c181fb209445306760d9cd74e9c5c27ace5 differ diff --git a/RockOS/.git-backup/objects/f9/91f41763fbc49578b78eda5cda556ba7f1b055 b/RockOS/.git-backup/objects/f9/91f41763fbc49578b78eda5cda556ba7f1b055 new file mode 100644 index 0000000..222c9c4 Binary files /dev/null and b/RockOS/.git-backup/objects/f9/91f41763fbc49578b78eda5cda556ba7f1b055 differ diff --git a/RockOS/.git-backup/objects/f9/dc1ca0888b2196a114706434e2a05b38b83179 b/RockOS/.git-backup/objects/f9/dc1ca0888b2196a114706434e2a05b38b83179 new file mode 100644 index 0000000..6decaa1 Binary files /dev/null and b/RockOS/.git-backup/objects/f9/dc1ca0888b2196a114706434e2a05b38b83179 differ diff --git a/RockOS/.git-backup/objects/f9/f91fc2f3c95bb4b987990775536fc51b4bea77 b/RockOS/.git-backup/objects/f9/f91fc2f3c95bb4b987990775536fc51b4bea77 new file mode 100644 index 0000000..d8c346b Binary files /dev/null and b/RockOS/.git-backup/objects/f9/f91fc2f3c95bb4b987990775536fc51b4bea77 differ diff --git a/RockOS/.git-backup/objects/fa/44958e2f28e0206193b52a2fddeec7fd19502f b/RockOS/.git-backup/objects/fa/44958e2f28e0206193b52a2fddeec7fd19502f new file mode 100644 index 0000000..f07ffb5 Binary files /dev/null and b/RockOS/.git-backup/objects/fa/44958e2f28e0206193b52a2fddeec7fd19502f differ diff --git a/RockOS/.git-backup/objects/fa/526e05014633186b5251989689654968cf9d18 b/RockOS/.git-backup/objects/fa/526e05014633186b5251989689654968cf9d18 new file mode 100644 index 0000000..cdf52d2 --- /dev/null +++ b/RockOS/.git-backup/objects/fa/526e05014633186b5251989689654968cf9d18 @@ -0,0 +1,2 @@ +xuJ0]) Aĝ Q4NccǷ7MuhW)Sr=ɲAYySFO5N^akE9z#E +X3Õ\&)Q.1WZz /x 'ט :To(Wr . Ns)G U1!NwSΦq#;< :-S9|MOm(c%CZ1zDYKԓ;:[p MsiQLQQ4^'n{nB}_6,u5/y1ْ㯓 \ No newline at end of file diff --git a/RockOS/.git-backup/objects/fa/b91c86344ec84942c11f0fe628eb7a9014b30a b/RockOS/.git-backup/objects/fa/b91c86344ec84942c11f0fe628eb7a9014b30a new file mode 100644 index 0000000..3b09bd6 Binary files /dev/null and b/RockOS/.git-backup/objects/fa/b91c86344ec84942c11f0fe628eb7a9014b30a differ diff --git a/RockOS/.git-backup/objects/fa/ecda25d19dc333ec2001474bd98b5529b0feae b/RockOS/.git-backup/objects/fa/ecda25d19dc333ec2001474bd98b5529b0feae new file mode 100644 index 0000000..f0b053a Binary files /dev/null and b/RockOS/.git-backup/objects/fa/ecda25d19dc333ec2001474bd98b5529b0feae differ diff --git a/RockOS/.git-backup/objects/fb/0d0c112bebd4fbb911e7f39a5c9c8c919c5b60 b/RockOS/.git-backup/objects/fb/0d0c112bebd4fbb911e7f39a5c9c8c919c5b60 new file mode 100644 index 0000000..a34c998 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/0d0c112bebd4fbb911e7f39a5c9c8c919c5b60 differ diff --git a/RockOS/.git-backup/objects/fb/29dfbfe84477d59c07f14e60bc23faccc28a13 b/RockOS/.git-backup/objects/fb/29dfbfe84477d59c07f14e60bc23faccc28a13 new file mode 100644 index 0000000..e3c9996 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/29dfbfe84477d59c07f14e60bc23faccc28a13 differ diff --git a/RockOS/.git-backup/objects/fb/6294f1e57c53a579e1e394db286f5daeafda05 b/RockOS/.git-backup/objects/fb/6294f1e57c53a579e1e394db286f5daeafda05 new file mode 100644 index 0000000..436ca10 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/6294f1e57c53a579e1e394db286f5daeafda05 differ diff --git a/RockOS/.git-backup/objects/fb/b6cadcaae1f4ab0e5777b2427ea56933bff97d b/RockOS/.git-backup/objects/fb/b6cadcaae1f4ab0e5777b2427ea56933bff97d new file mode 100644 index 0000000..b0d2af4 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/b6cadcaae1f4ab0e5777b2427ea56933bff97d differ diff --git a/RockOS/.git-backup/objects/fb/d51afc99e3a4e1cec76c94202f6229b76d3faf b/RockOS/.git-backup/objects/fb/d51afc99e3a4e1cec76c94202f6229b76d3faf new file mode 100644 index 0000000..5b361a1 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/d51afc99e3a4e1cec76c94202f6229b76d3faf differ diff --git a/RockOS/.git-backup/objects/fb/dc1866e5dbcd02ac929d1aa78747aa9dab5816 b/RockOS/.git-backup/objects/fb/dc1866e5dbcd02ac929d1aa78747aa9dab5816 new file mode 100644 index 0000000..69bfe39 Binary files /dev/null and b/RockOS/.git-backup/objects/fb/dc1866e5dbcd02ac929d1aa78747aa9dab5816 differ diff --git a/RockOS/.git-backup/objects/fc/0dcddba57b83aa1be67850e2b0f50fbf775d53 b/RockOS/.git-backup/objects/fc/0dcddba57b83aa1be67850e2b0f50fbf775d53 new file mode 100644 index 0000000..d83c7c3 Binary files /dev/null and b/RockOS/.git-backup/objects/fc/0dcddba57b83aa1be67850e2b0f50fbf775d53 differ diff --git a/RockOS/.git-backup/objects/fc/24efa71ebfc451de5fb2b290b67a33c3c224a7 b/RockOS/.git-backup/objects/fc/24efa71ebfc451de5fb2b290b67a33c3c224a7 new file mode 100644 index 0000000..d498464 --- /dev/null +++ b/RockOS/.git-backup/objects/fc/24efa71ebfc451de5fb2b290b67a33c3c224a7 @@ -0,0 +1,2 @@ +xUA @;b"u nAt$;к3 [s {>+m[&," +Ηz'yIgi4{CNV詡% 6{źu,0: ppޘ {17 K..zH8Ka*z[B֢e0srr$q@am\"t j \ No newline at end of file diff --git a/RockOS/.git-backup/objects/fd/0e4e47b04d77d92473fd7de66cf7cf36e73dcb b/RockOS/.git-backup/objects/fd/0e4e47b04d77d92473fd7de66cf7cf36e73dcb new file mode 100644 index 0000000..744849f Binary files /dev/null and b/RockOS/.git-backup/objects/fd/0e4e47b04d77d92473fd7de66cf7cf36e73dcb differ diff --git a/RockOS/.git-backup/objects/fe/0f53d2440baee1c9faf0e4a98c428fbea85772 b/RockOS/.git-backup/objects/fe/0f53d2440baee1c9faf0e4a98c428fbea85772 new file mode 100644 index 0000000..6fac518 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/0f53d2440baee1c9faf0e4a98c428fbea85772 differ diff --git a/RockOS/.git-backup/objects/fe/3725db99bf7181e9194510f15f6f7ab99cffbf b/RockOS/.git-backup/objects/fe/3725db99bf7181e9194510f15f6f7ab99cffbf new file mode 100644 index 0000000..cfb9c67 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/3725db99bf7181e9194510f15f6f7ab99cffbf differ diff --git a/RockOS/.git-backup/objects/fe/51488c7066f6687ef680d6bfaa4f7768ef205c b/RockOS/.git-backup/objects/fe/51488c7066f6687ef680d6bfaa4f7768ef205c new file mode 100644 index 0000000..e3d0a56 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/51488c7066f6687ef680d6bfaa4f7768ef205c differ diff --git a/RockOS/.git-backup/objects/fe/96bca71bf0bcb69f26d745258d1052356e38e5 b/RockOS/.git-backup/objects/fe/96bca71bf0bcb69f26d745258d1052356e38e5 new file mode 100644 index 0000000..c27b4b4 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/96bca71bf0bcb69f26d745258d1052356e38e5 differ diff --git a/RockOS/.git-backup/objects/fe/a2a467481eafb599cc7f5f5e0bb6f5adc61fa1 b/RockOS/.git-backup/objects/fe/a2a467481eafb599cc7f5f5e0bb6f5adc61fa1 new file mode 100644 index 0000000..f9870e3 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/a2a467481eafb599cc7f5f5e0bb6f5adc61fa1 differ diff --git a/RockOS/.git-backup/objects/fe/a74abd5a686e78efbd313a3b35f85f01761a8d b/RockOS/.git-backup/objects/fe/a74abd5a686e78efbd313a3b35f85f01761a8d new file mode 100644 index 0000000..cc737e5 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/a74abd5a686e78efbd313a3b35f85f01761a8d differ diff --git a/RockOS/.git-backup/objects/fe/b953199c37985b068199586cd3d6c8a49a0ad4 b/RockOS/.git-backup/objects/fe/b953199c37985b068199586cd3d6c8a49a0ad4 new file mode 100644 index 0000000..67c8b14 Binary files /dev/null and b/RockOS/.git-backup/objects/fe/b953199c37985b068199586cd3d6c8a49a0ad4 differ diff --git a/RockOS/.git-backup/objects/ff/d946a6b17c1533231e2616f239d90dec286322 b/RockOS/.git-backup/objects/ff/d946a6b17c1533231e2616f239d90dec286322 new file mode 100644 index 0000000..8702753 Binary files /dev/null and b/RockOS/.git-backup/objects/ff/d946a6b17c1533231e2616f239d90dec286322 differ diff --git a/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.idx b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.idx new file mode 100644 index 0000000..6596cd6 Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.idx differ diff --git a/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.pack b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.pack new file mode 100644 index 0000000..fcae488 Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.pack differ diff --git a/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.rev b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.rev new file mode 100644 index 0000000..a457f52 Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-180242b65212ecf3404058dbf75aaf661ef83f5b.rev differ diff --git a/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.idx b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.idx new file mode 100644 index 0000000..256aaf0 Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.idx differ diff --git a/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.pack b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.pack new file mode 100644 index 0000000..23fa8cd Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.pack differ diff --git a/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.rev b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.rev new file mode 100644 index 0000000..a6ffde4 Binary files /dev/null and b/RockOS/.git-backup/objects/pack/pack-3f1eb6a3771a0ff48db5ca5eb5f9dd43a99161d6.rev differ diff --git a/RockOS/.git-backup/packed-refs b/RockOS/.git-backup/packed-refs new file mode 100644 index 0000000..4b43fda --- /dev/null +++ b/RockOS/.git-backup/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +4e8de774ef76caed41dffa19de0e90f1ec356534 refs/remotes/origin/main diff --git a/RockOS/.git-backup/refs/heads/main b/RockOS/.git-backup/refs/heads/main new file mode 100644 index 0000000..36f5d88 --- /dev/null +++ b/RockOS/.git-backup/refs/heads/main @@ -0,0 +1 @@ +27b2e7ee0dd46f76c7b451e0e9b4b8b166770f72 diff --git a/RockOS/.git-backup/refs/remotes/origin/HEAD b/RockOS/.git-backup/refs/remotes/origin/HEAD new file mode 100644 index 0000000..4b0a875 --- /dev/null +++ b/RockOS/.git-backup/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/main diff --git a/RockOS/.git-backup/refs/remotes/origin/main b/RockOS/.git-backup/refs/remotes/origin/main new file mode 100644 index 0000000..efb3f66 --- /dev/null +++ b/RockOS/.git-backup/refs/remotes/origin/main @@ -0,0 +1 @@ +6a79a20cf6d7c4597050a6119a4b373ec09f9645 diff --git a/RockOS/.git-backup/refs/stash b/RockOS/.git-backup/refs/stash new file mode 100644 index 0000000..19aa9d1 --- /dev/null +++ b/RockOS/.git-backup/refs/stash @@ -0,0 +1 @@ +d69cc348f1cc9794ad175eb80ed588faf0baf1c8 diff --git a/RockOS/.gitignore b/RockOS/.gitignore new file mode 100644 index 0000000..ca161d8 --- /dev/null +++ b/RockOS/.gitignore @@ -0,0 +1,15 @@ +*.iso +*.img +*.o +*.bin +*.elf + +.cache + +.idea +.vscode + +build +isodir + +compiler*/ \ No newline at end of file diff --git a/RockOS/build.sh b/RockOS/build.sh new file mode 100755 index 0000000..c866331 --- /dev/null +++ b/RockOS/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +./build_libc.sh +./build_programs.sh + +make clean +bear -- make + +./make_img.sh + +make -B \ No newline at end of file diff --git a/RockOS/build_and_run.sh b/RockOS/build_and_run.sh new file mode 100755 index 0000000..0ad7525 --- /dev/null +++ b/RockOS/build_and_run.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +./build.sh + +make run + diff --git a/RockOS/build_libc.sh b/RockOS/build_libc.sh new file mode 100755 index 0000000..7f4ce6a --- /dev/null +++ b/RockOS/build_libc.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cd rocklibc +make clean +bear -- make +cd .. \ No newline at end of file diff --git a/RockOS/build_programs.sh b/RockOS/build_programs.sh new file mode 100755 index 0000000..ef3803a --- /dev/null +++ b/RockOS/build_programs.sh @@ -0,0 +1,29 @@ +#!/bin/bash + + +mkdir -p programs/lib +mkdir -p programs/bin + +cp rocklibc/rlibc.a programs/lib + +cd programs + +cd rocksh +make clean +bear -- make +cp rocksh.elf ../bin +cd .. + +cd vga_text_term +make clean +bear -- make +cp vga_text_term.elf ../bin +cd .. + +cd test +make clean +bear -- make +cp test.elf ../bin +cd .. + +cd .. \ No newline at end of file diff --git a/RockOS/clean.sh b/RockOS/clean.sh new file mode 100755 index 0000000..9b3b751 --- /dev/null +++ b/RockOS/clean.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +cd rocklibc +make clean +cd .. + +cd programs/rocksh +make clean +cd ../.. + +make clean + +cd initrd +rm -rf output +rm *.elf +cd .. + +rm *.img \ No newline at end of file diff --git a/RockOS/compile_commands.json b/RockOS/compile_commands.json new file mode 100644 index 0000000..cf84c6b --- /dev/null +++ b/RockOS/compile_commands.json @@ -0,0 +1,631 @@ +[ + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/globals.c.o", + "kernel/globals.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/globals.c", + "output": "/home/slinky/source/RockOS/obj/kernel/globals.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/vfs.c.o", + "kernel/vfs.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/vfs.c", + "output": "/home/slinky/source/RockOS/obj/kernel/vfs.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/kmain.c.o", + "kernel/kmain.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/kmain.c", + "output": "/home/slinky/source/RockOS/obj/kernel/kmain.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/pic/pic.c.o", + "kernel/drivers/pic/pic.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/serial/serial.c.o", + "kernel/drivers/serial/serial.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/serial/serial.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/serial/serial.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/devfs/devfs.c.o", + "kernel/drivers/devfs/devfs.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/devfs/devfs.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/devfs/devfs.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/cpio/cpio.c.o", + "kernel/drivers/cpio/cpio.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/cpio/cpio.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/cpio/cpio.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/pty/pty.c.o", + "kernel/drivers/pty/pty.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/pty/pty.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pty/pty.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/vga/vga.c.o", + "kernel/drivers/vga/vga.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/vga/vga.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/vga/vga.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/ide/ide.c.o", + "kernel/drivers/ide/ide.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/ide/ide.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/ide/ide.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/ps2/ps2.c.o", + "kernel/drivers/ps2/ps2.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/iso/iso.c.o", + "kernel/drivers/iso/iso.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/iso/iso.c", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/iso/iso.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/gdt.c.o", + "kernel/gdt.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/gdt.c", + "output": "/home/slinky/source/RockOS/obj/kernel/gdt.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/memory/mm.c.o", + "kernel/memory/mm.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/memory/mm.c", + "output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/kbd.c.o", + "kernel/kbd.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/kbd.c", + "output": "/home/slinky/source/RockOS/obj/kernel/kbd.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/multiboot.c.o", + "kernel/multiboot.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/multiboot.c", + "output": "/home/slinky/source/RockOS/obj/kernel/multiboot.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/interrupts.c.o", + "kernel/interrupts.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/interrupts.c", + "output": "/home/slinky/source/RockOS/obj/kernel/interrupts.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/elf.c.o", + "kernel/elf.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/elf.c", + "output": "/home/slinky/source/RockOS/obj/kernel/elf.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/syscall.c.o", + "kernel/syscall.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/syscall.c", + "output": "/home/slinky/source/RockOS/obj/kernel/syscall.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/memory.c.o", + "kernel/lib/memory.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/memory.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/memory.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/print.c.o", + "kernel/lib/print.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/print.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/print.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/ringbuf.c.o", + "kernel/lib/ringbuf.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/ringbuf.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/ringbuf.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/tasks.c.o", + "kernel/lib/tasks.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/tasks.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/tasks.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/console.c.o", + "kernel/lib/console.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/console.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/console.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/strtok.c.o", + "kernel/lib/strtok.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/strtok.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/strtok.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/lib/font.c.o", + "kernel/lib/font.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/lib/font.c", + "output": "/home/slinky/source/RockOS/obj/kernel/lib/font.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/scheduler.c.o", + "kernel/scheduler.c" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/scheduler.c", + "output": "/home/slinky/source/RockOS/obj/kernel/scheduler.c.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/syscall.S.o", + "kernel/syscall.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/syscall.S", + "output": "/home/slinky/source/RockOS/obj/kernel/syscall.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/common.S.o", + "kernel/common.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/common.S", + "output": "/home/slinky/source/RockOS/obj/kernel/common.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/pic/pic.S.o", + "kernel/drivers/pic/pic.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.S", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/pit/pit.S.o", + "kernel/drivers/pit/pit.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/pit/pit.S", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/pit/pit.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/drivers/ps2/ps2.S.o", + "kernel/drivers/ps2/ps2.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.S", + "output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/memory/mm.S.o", + "kernel/memory/mm.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/memory/mm.S", + "output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/boot/boot.S.o", + "kernel/boot/boot.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/boot/boot.S", + "output": "/home/slinky/source/RockOS/obj/kernel/boot/boot.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/scheduler.S.o", + "kernel/scheduler.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/scheduler.S", + "output": "/home/slinky/source/RockOS/obj/kernel/scheduler.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/gdt.S.o", + "kernel/gdt.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/gdt.S", + "output": "/home/slinky/source/RockOS/obj/kernel/gdt.S.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-c", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Ikernel", + "-o", + "obj/kernel/interrupts.S.o", + "kernel/interrupts.S" + ], + "directory": "/home/slinky/source/RockOS", + "file": "/home/slinky/source/RockOS/kernel/interrupts.S", + "output": "/home/slinky/source/RockOS/obj/kernel/interrupts.S.o" + } +] diff --git a/RockOS/grub.cfg b/RockOS/grub.cfg new file mode 100644 index 0000000..6f80d8b --- /dev/null +++ b/RockOS/grub.cfg @@ -0,0 +1,4 @@ +menuentry "RockOS" { + multiboot /boot/rockos/ + module /boot/initrd.img +} \ No newline at end of file diff --git a/RockOS/initrd/fonts/cp850-8x16.psf b/RockOS/initrd/fonts/cp850-8x16.psf new file mode 100644 index 0000000..7539f61 Binary files /dev/null and b/RockOS/initrd/fonts/cp850-8x16.psf differ diff --git a/RockOS/kernel/boot/boot.S b/RockOS/kernel/boot/boot.S new file mode 100644 index 0000000..e0e0fc1 --- /dev/null +++ b/RockOS/kernel/boot/boot.S @@ -0,0 +1,69 @@ +.set ALIGN, 1<<0 +.set MEMINFO, 1<<1 +.set GRAPHICS, 1<<2 + +.set FLAGS, ALIGN | MEMINFO | GRAPHICS +.set MAGIC, 0x1BADB002 +.set CHECKSUM, -(MAGIC + FLAGS) + +.section .multiboot, "a" + .align 4 + .long MAGIC + .long FLAGS + .long CHECKSUM + + .long 0 /* header_addr */ + .long 0 /* load_addr */ + .long 0 /* load_end_addr */ + .long 0 /* bss_end_addr */ + .long 0 /* entry_addr */ + + .long 0 /* Mode Type: 0 = Linear Framebuffer, 1 = Standard EGA Text */ + .long 1024 /* Width (Pixels) */ + .long 768 /* Height (Pixels) */ + .long 32 /* Color Depth (Bits Per Pixel) */ + +.section .text +.global _start +_start: + cli + + mov $(page_directory - 0xC0000000), %ecx + + mov %cr4, %edx + or $0x00000010, %edx + mov %edx, %cr4 + + mov %ecx, %cr3 + + mov %cr0, %edx + or $0x80000000, %edx + mov %edx, %cr0 + + lea higher, %ecx + jmp *%ecx +higher: + mov $stack_top, %esp + mov $0xC0000000, %eax + add %eax, %ebx + push %ebx + call kmain +loop: + hlt + jmp loop + +.section .bss +.align 16 +stack_bottom: +.skip 16384 # 16 KiB +stack_top: + +.section .data, "a" +.align 4096 +.global page_directory +page_directory: + .long 0x00000083 + .skip 3068 + .long 0x00000083 + .skip 1016 + .long (page_directory - 0xC0000000) + 0x03 \ No newline at end of file diff --git a/RockOS/kernel/common.S b/RockOS/kernel/common.S new file mode 100644 index 0000000..aefd570 --- /dev/null +++ b/RockOS/kernel/common.S @@ -0,0 +1,133 @@ +.code32 +.section .text + +.global disable_interrupts +disable_interrupts: + cli + ret + +.global enable_interrupts +enable_interrupts: + sti + ret + +.global io_wait +io_wait: + outb %al, $0x80 + ret + +.global liftoff +liftoff: + cli + + mov 4(%esp), %ecx + mov 8(%esp), %ebx + + mov $0x23, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + + pushl $0x23 # User Data Segment (SS) + pushl %ebx # User Stack Pointer (ESP) + pushl $0x202 # EFLAGS (Interrupts enabled, bit 1 standard) + pushl $0x1B # User Code Segment (CS) + pushl %ecx # User Entry Point (EIP) + + xor %eax, %eax + xor %ebx, %ebx + xor %ecx, %ecx + xor %edx, %edx + xor %esi, %esi + xor %edi, %edi + xor %ebp, %ebp + + iret + +.global outb +outb: + push %ebp + mov %esp, %ebp + + # 8(%ebp) port + # 12(%ebp) data + mov 8(%ebp), %edx + mov 12(%ebp), %eax + outb %al, %dx + + leave + ret + +.global inb +inb: + push %ebp + mov %esp, %ebp + + # 8(%ebp) port + mov 8(%ebp), %edx + xor %eax, %eax + inb %dx, %al + + leave + ret + +.global insw +insw: + push %ebp + mov %esp, %ebp + + push %edi + push %ecx + push %edx + + # 8(%ebp) addr + # 12(%ebp) buf + # 16(%ebp) sz + mov 8(%ebp), %edx + mov 12(%ebp), %edi + mov 16(%ebp), %ecx + + cld + rep insw + + pop %edx + pop %ecx + pop %edi + leave + ret + +.global outsw +outsw: + push %ebp + mov %esp, %ebp + + push %esi + push %ecx + push %edx + + # 8(%ebp) address + # 12(%ebp) buf + # 16(%ebp) sz + mov 8(%ebp), %edx + mov 12(%ebp), %esi + mov 16(%ebp), %ecx + + cld + rep outsw + + pop %edx + pop %ecx + pop %esi + leave + ret + +.global fetch_cr3 +fetch_cr3: + mov %cr3, %eax + ret + +.global kpanic +kpanic: + cli + hlt \ No newline at end of file diff --git a/RockOS/kernel/common.h b/RockOS/kernel/common.h new file mode 100644 index 0000000..466901c --- /dev/null +++ b/RockOS/kernel/common.h @@ -0,0 +1,17 @@ +#ifndef KCOMMON_H +#define KCOMMON_H + +#include + +void enable_interrupts(); +void disable_interrupts(); +uint32_t fetch_cr3(); + +void kpanic(); + +void liftoff(uint32_t entry_point, uint32_t user_stack) __attribute__((noreturn)); + +uint8_t inb(uint16_t port); +void outb(uint16_t port, uint8_t data); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/cpio/cpio.c b/RockOS/kernel/drivers/cpio/cpio.c new file mode 100644 index 0000000..53dfbd6 --- /dev/null +++ b/RockOS/kernel/drivers/cpio/cpio.c @@ -0,0 +1,125 @@ +#include + +#include +#include +#include + +#define MAX_INITRD_FILES 64 + +static uint32_t parse_hex_ascii(const char *str, int len) { + uint32_t result = 0; + for (int i = 0; i < len; i++) { + result <<= 4; + if (str[i] >= '0' && str[i] <= '9') result |= (str[i] - '0'); + else if (str[i] >= 'A' && str[i] <= 'F') result |= (str[i] - 'A' + 10); + else if (str[i] >= 'a' && str[i] <= 'f') result |= (str[i] - 'a' + 10); + } + return result; +} + +static vfs_node_t* cpio_find(vfs_node_t* _dir, const char* name) { + if (strcmp(name, "tvga") == 0) { + kprintf("looking for tvga\n"); + } + if (!(_dir->flags & VFS_DIRECTORY)) return NULL; + vfs_node_t* root = _dir; + if (_dir->mnt) { + root = _dir->mnt; + } + + vfs_node_t* child = root->first_child; + while (child != NULL) { + if (strcmp(child->name, name) == 0) { + return child; + } + child = child->next_sibling; + } + + return NULL; +} + +static uint32_t cpio_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + if (offset >= node->size) return 0; + if (offset + size > node->size) { + size = node->size - offset; + } + memcpy((uint8_t*)(node->data) + offset, buffer, size); + return size; +} + +static vfs_node_t* cpio_find_or_create(vfs_node_t* root_node, const char* path) { + vfs_node_t* current = root_node; + + char path_cpy[256]; + strcpy(path_cpy, path); + + char* sav = NULL; + char* tkn = strtok_r(path_cpy, "/", &sav); + + while (tkn != NULL) { + vfs_node_t* next_node = cpio_find(current, tkn); + if (!next_node) { + next_node = kalloc(sizeof(vfs_node_t)); + memset((void*)next_node, 0, sizeof(vfs_node_t)); + + strcpy(next_node->name, tkn); + next_node->flags = VFS_DIRECTORY; + next_node->find = cpio_find; + + next_node->next_sibling = current->first_child; + current->first_child = next_node; + } + + current = next_node; + tkn = strtok_r(NULL, "/", &sav); + } + + return current; +} + +vfs_node_t* cpio_read_fs(uint32_t _vaddr) { + cpio_header_t* header = (cpio_header_t*)_vaddr; + + vfs_node_t* cpio_root = kalloc(sizeof(vfs_node_t)); + memset((uint8_t*)cpio_root, 0, sizeof(vfs_node_t)); + strcpy(cpio_root->name, "cpio_root"); + cpio_root->flags = VFS_DIRECTORY; + cpio_root->find = cpio_find; + + while (1) { + if (strncmp(header->c_magic, "070701", 6) != 0 && + strncmp(header->c_magic, "070702", 6) != 0) { + break; + } + + uint32_t namesize = parse_hex_ascii(header->c_namesize, 8); + uint32_t filesize = parse_hex_ascii(header->c_filesize, 8); + uint32_t mode = parse_hex_ascii(header->c_mode, 8); + char* filename = (char*)header + sizeof(cpio_header_t); + + if (strcmp(filename, "TRAILER!!!") == 0) { + break; + } + + uint32_t file_data_offset = (sizeof(cpio_header_t) + namesize + 3) & ~3; + uint8_t* file_data = (uint8_t*)header + file_data_offset; + + if (strcmp(".", filename) != 0) { + vfs_node_t* current = cpio_find_or_create(cpio_root, filename); + if ((mode & 0xF000) == 0x4000) { + current->flags = VFS_DIRECTORY; + current->find = cpio_find; + } else { + current->flags = VFS_FILE; + current->size = filesize; + current->data = file_data; + current->read = cpio_read; + } + } + + uint32_t next_header_offset = (file_data_offset + filesize + 3) & ~3; + header = (cpio_header_t*)((uint8_t*)header + next_header_offset); + } + + return cpio_root; +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/cpio/cpio.h b/RockOS/kernel/drivers/cpio/cpio.h new file mode 100644 index 0000000..c9797a0 --- /dev/null +++ b/RockOS/kernel/drivers/cpio/cpio.h @@ -0,0 +1,25 @@ +#ifndef D_CPIO_H +#define D_CPIO_H + +#include + +typedef struct { + char c_magic[6]; // "070701" or "070702" + char c_ino[8]; + char c_mode[8]; // File type & permissions + char c_uid[8]; + char c_gid[8]; + char c_nlink[8]; + char c_mtime[8]; + char c_filesize[8]; // File size in hex ASCII + char c_devmajor[8]; + char c_devminor[8]; + char c_rdevmajor[8]; + char c_rdevminor[8]; + char c_namesize[8]; // Length of filename in hex ASCII + char c_check[8]; +} __attribute__((packed)) cpio_header_t; + +vfs_node_t* cpio_read_fs(uint32_t _vaddr); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/devfs/devfs.c b/RockOS/kernel/drivers/devfs/devfs.c new file mode 100644 index 0000000..4ee814c --- /dev/null +++ b/RockOS/kernel/drivers/devfs/devfs.c @@ -0,0 +1,40 @@ +#include "vfs.h" +#include + +#include +#include +#include + +static vfs_node_t* devfs_find(vfs_node_t* parent, const char* name) { + vfs_node_t* cur = parent->first_child; + if (!cur) return NULL; + + while (cur) { + if (strcmp(cur->name, name) == 0) break; + cur = cur->next_sibling; + } + + return cur; +} + +static vfs_node_t* devfs_create(vfs_node_t* parent, const char* name) { + vfs_node_t* node = kalloc(sizeof(vfs_node_t*)); + memset((void*)node, 0, sizeof(vfs_node_t)); + strcpy(node->name, name); + node->flags = VFS_CHARDEVICE; + if (parent->first_child) { + node->next_sibling = parent->first_child; + } + parent->first_child = node; + return node; +} + +vfs_node_t* create_devfs() { + vfs_node_t* root = kalloc(sizeof(vfs_node_t*)); + memset((void*)root, 0, sizeof(vfs_node_t)); + strcpy(root->name, "dev"); + root->find = devfs_find; + root->flags = VFS_DIRECTORY; + root->create = devfs_create; + return root; +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/devfs/devfs.h b/RockOS/kernel/drivers/devfs/devfs.h new file mode 100644 index 0000000..1d03d11 --- /dev/null +++ b/RockOS/kernel/drivers/devfs/devfs.h @@ -0,0 +1,8 @@ +#ifndef D_DEVFS_H +#define D_DEVFS_H + +#include + +vfs_node_t* create_devfs(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/ide/ide.c b/RockOS/kernel/drivers/ide/ide.c new file mode 100644 index 0000000..4e9ca6a --- /dev/null +++ b/RockOS/kernel/drivers/ide/ide.c @@ -0,0 +1,241 @@ +#include "ide.h" + +#include "lib/print.h" + +#include +#include + +extern uint8_t inb(uint16_t port); +extern void outb(uint16_t port, uint8_t data); + +extern void insw(uint32_t address, void* buf, uint32_t sz); +extern void outsw(uint32_t address, void* buf, uint32_t sz); + +uint8_t selected_drive_primary = 0; +uint8_t selected_drive_secondary = 0; + +uint8_t ide_info_buffer[512]; + +ide_device_t ide_devices[4]; + +static void fix_ata_string(char* buf, size_t sz) { + if ((sz % 2) != 0) return; + for (size_t i = 0; i < sz; i += 2) { + char tmp = buf[i]; + buf[i] = buf[i + 1]; + buf[i + 1] = tmp; + } + buf[sz-1] = '\0'; +} + +static uint16_t fetch_ctrl_reg(uint16_t bus) { + if (bus == IDE_PRIMARY_IO_BASE) return IDE_PRIMARY_CRTL_BASE; + if (bus == IDE_SECONDARY_IO_BASE) return IDE_SECONDARY_CRTL_BASE; + return 0; +} + +static void ata_delay(uint16_t bus) { + uint16_t ctrl = fetch_ctrl_reg(bus); + for (int i = 0; i < 5; i++) { + inb(ctrl); + } +} + +static int wait_not_bsy_drq(uint16_t bus) { + ata_delay(bus); + + int timeout = 10000; + int error = 0; + while(timeout--) { + uint16_t ctrl = fetch_ctrl_reg(bus); + uint8_t stat = inb(ctrl); + if (stat & STATUS_REG_ERR) error = 1; break; + if (!(stat & STATUS_REG_BSY)) break; + } + + if (timeout == 0 || error) { + return 1; + } + + return 0; +} + +static int select_drive(uint16_t bus, uint8_t drive) { + if (bus == IDE_PRIMARY_IO_BASE && selected_drive_primary == drive) { + return 1; + } + + if (bus == IDE_SECONDARY_IO_BASE && selected_drive_secondary == drive) { + return 1; + } + + uint16_t ctrl_reg = fetch_ctrl_reg(bus); + if (ctrl_reg == 0) { + return 0; + } + + // wait for bsy and drq clear + while (1) { + uint8_t status = inb(ctrl_reg + CTRL_ALT_STATUS_REG); + if (!(status & STATUS_REG_BSY) && !(status & STATUS_REG_DRQ)) { + break; + } + } + + outb(bus + IO_DRIVE_SELECT_REG, drive); + + ata_delay(bus); + + uint8_t status = inb(ctrl_reg + CTRL_ALT_STATUS_REG); + if (status & STATUS_REG_ERR) { + return 0; + } + + return 1; +} + +static void ident_device(uint16_t bus, uint8_t drive, uint32_t slot) { + ide_dev_type type = NO_DEVICE; + + uint8_t stat = inb(bus + IO_STATUS_REG); + if (stat == 0xFF) { + kprintf("no device on bus 0x%x\n", bus); + return; + } + + if (!select_drive(bus, drive)) { + kprintf("failed to select drive 0x%x on bus 0x%x\n", bus, drive); + return; + } + + outb(bus + IO_SECTOR_COUNT_REG, 0x00); + outb(bus + IO_LBA_LO_REG, 0x00); + outb(bus + IO_LBA_MID_REG, 0x00); + outb(bus + IO_LBA_HI_REG, 0x00); + // ident ata + outb(bus + IO_CMD_REG, ATA_CMD_IDENTIFY); + ata_delay(bus); + + stat = inb(bus + IO_STATUS_REG); + if (stat == 0x00) { + kprintf("no drive 0x%x on bus 0x%x\n", drive, bus); + return; + } + + int not_ata = 0; + int timeout = 10000; + while(timeout--) { + stat = inb(bus + IO_STATUS_REG); + if (stat & STATUS_REG_ERR) not_ata = 1; break; + if (!(stat & STATUS_REG_BSY) && (stat & STATUS_REG_DRQ)) type = ATA; break; + } + + if (timeout == 0) { + kprintf("drive 0x%x ident timed out on bus 0x%x\n", drive, bus); + return; + } + + if (not_ata) { + uint8_t mid = inb(bus + IO_LBA_MID_REG); + uint8_t hi = inb(bus + IO_LBA_HI_REG); + + if (mid != 0x14 || hi != 0xEB) { + return; + } + + type = ATAPI; + + // ident atapi + outb(bus + IO_CMD_REG, ATA_CMD_IDENTIFY_PACKET); + ata_delay(bus); + } + + + insw(bus + IO_DATA_REG, ide_info_buffer, 256); + + ide_devices[slot].bus = bus; + ide_devices[slot].device = drive; + ide_devices[slot].type = type; + ide_devices[slot].capabilities = *(uint16_t*)(ide_info_buffer + ATA_IDENT_CAPABILITIES); + ide_devices[slot].sig = *(uint16_t*)(ide_info_buffer + ATA_IDENT_DEVICETYPE); + ide_devices[slot].command_set = *(uint32_t*)(ide_info_buffer + ATA_IDENT_COMMANDSETS); + + if (ide_devices[slot].command_set & (1 << 26)) { + ide_devices[slot].size = *(uint32_t*)(ide_info_buffer + ATA_IDENT_MAX_LBA_EXT); + } else { + ide_devices[slot].size = *(uint32_t*)(ide_info_buffer + ATA_IDENT_MAX_LBA); + } +} + +static int atapi_read_sector(ide_device_t* dev, uint32_t lba, uint32_t sectors, void* buf) { + ide_device_t drive = *dev; + + // enable irqs + uint16_t ctrl_reg = fetch_ctrl_reg(drive.bus); + outb(ctrl_reg, 0x00); + + uint8_t pkt[12]; + pkt[ 0] = ATAPI_CMD_READ; + pkt[ 1] = 0x0; + pkt[ 2] = (lba >> 24) & 0xFF; + pkt[ 3] = (lba >> 16) & 0xFF; + pkt[ 4] = (lba >> 8) & 0xFF; + pkt[ 5] = (lba >> 0) & 0xFF; + pkt[ 6] = 0x0; + pkt[ 7] = 0x0; + pkt[ 8] = 0x0; + pkt[ 9] = sectors; + pkt[10] = 0x0; + pkt[11] = 0x0; + + if (!select_drive(drive.bus, drive.device)) { + return 0; + } + + outb(drive.bus + IO_FEATURE_REG, 0x00); // PIO mode + + uint32_t words = 1024; + outb(drive.bus + IO_LBA_MID_REG, (words * 2) & 0xFF); + outb(drive.bus + IO_LBA_HI_REG, (words * 2) >> 8); + + outb(drive.bus + IO_CMD_REG, ATA_CMD_PACKET); + + // poll for drq + int err = wait_not_bsy_drq(drive.bus); + if (err) { + return 0; + } + + outsw(drive.bus + IO_DATA_REG, pkt, 6); + + uint32_t ptr = (uint32_t)buf; + for (int i = 0; i < sectors; i++) { + err = wait_not_bsy_drq(drive.bus); + if (err) { + return 0; + } + + insw(drive.bus + IO_DATA_REG, (void*)ptr, 1024); + ptr += 2048; + } + + return 1; +} + +void scan_drives() { + ident_device(IDE_SECONDARY_IO_BASE, IDE_DRIVE_MASTER, 0); +} + +ide_device_t* get_ide_device(uint8_t slot) { + if (slot > 3) return NULL; + return &ide_devices[slot]; +} + +int ide_read_blks(ide_device_t* dev, uint32_t lba, uint32_t sectors, void* buf) { + if (dev->type == ATAPI) { + return atapi_read_sector(dev, lba, sectors, buf); + } + return 0; +} + + diff --git a/RockOS/kernel/drivers/ide/ide.h b/RockOS/kernel/drivers/ide/ide.h new file mode 100644 index 0000000..fa44958 --- /dev/null +++ b/RockOS/kernel/drivers/ide/ide.h @@ -0,0 +1,123 @@ +#ifndef KATA_H +#define KATA_H + +#ifndef __ASSEMBLER__ +#include +#include +#endif + +#define IDE_PRIMARY_IO_BASE 0x01F0 +#define IDE_PRIMARY_CRTL_BASE 0x03F6 + +#define IDE_SECONDARY_IO_BASE 0x0170 +#define IDE_SECONDARY_CRTL_BASE 0x0376 + +#define IDE_DRIVE_MASTER 0xA0 +#define IDE_DRIVE_SLAVE 0xB0 + +#define IO_DATA_REG 0x0000 +#define IO_ERROR_REG 0x0001 +#define IO_FEATURE_REG 0x0001 +#define IO_SECTOR_COUNT_REG 0x0002 +#define IO_SECTOR_NUM_REG 0x0003 +#define IO_LBA_LO_REG 0x0003 +#define IO_CYL_LO_REG 0x0004 +#define IO_LBA_MID_REG 0x0004 +#define IO_LBA_HI_REG 0x0005 +#define IO_CYL_HI_REG 0x0005 +#define IO_DRIVE_SELECT_REG 0x0006 +#define IO_STATUS_REG 0x0007 +#define IO_CMD_REG 0x0007 + +#define CTRL_ALT_STATUS_REG 0x00 +#define CTRL_DEV_CTRL_REG 0x00 +#define CTRL_DRIVE_ADDR_REG 0x01 + +#define ERROR_REG_AMNF 0b00000001 // Address mark not found +#define ERROR_REG_TKZNF 0b00000010 // Track zero not found +#define ERROR_REG_ABRT 0b00000100 // Aborted command +#define ERROR_REG_MCR 0b00001000 // Media change request +#define ERROR_REG_IDNF 0b00010000 // ID not found +#define ERROR_REG_MC 0b00100000 // Media changed +#define ERROR_REG_UNC 0b01000000 // Uncorrectable data error +#define ERROR_REG_BBK 0b10000000 // Bad Block detected + +#define DRIVE_SELECT_REG_BN 0b00000111 +#define DRIVE_SELECT_REG_DRV 0b00010000 +#define DRIVE_SELECT_REG_LBA 0b01000000 + +#define STATUS_REG_ERR 0b00000001 +#define STATUS_REG_IDX 0b00000010 +#define STATUS_REG_CORR 0b00000100 +#define STATUS_REG_DRQ 0b00001000 +#define STATUS_REG_SRV 0b00010000 +#define STATUS_REG_DF 0b00100000 +#define STATUS_REG_RDY 0b01000000 +#define STATUS_REG_BSY 0b10000000 + +#define DEV_CTRL_REG_nIEN 0b00000010 +#define DEV_CTRL_REG_SRST 0b00000100 +#define DEV_CTRL_REG_HOB 0b10000000 + +#define DRIVE_ADDR_REG_DS0 0b00000001 +#define DRIVE_ADDR_REG_DS1 0b00000010 +#define DRIVE_ADDR_REG_HEAD 0b00111100 +#define DRIVE_ADDR_REG_WTG 0b01000000 + +#define ATA_CMD_READ_PIO 0x20 +#define ATA_CMD_READ_PIO_EXT 0x24 +#define ATA_CMD_READ_DMA 0xC8 +#define ATA_CMD_READ_DMA_EXT 0x25 +#define ATA_CMD_WRITE_PIO 0x30 +#define ATA_CMD_WRITE_PIO_EXT 0x34 +#define ATA_CMD_WRITE_DMA 0xCA +#define ATA_CMD_WRITE_DMA_EXT 0x35 +#define ATA_CMD_CACHE_FLUSH 0xE7 +#define ATA_CMD_CACHE_FLUSH_EXT 0xEA +#define ATA_CMD_PACKET 0xA0 +#define ATA_CMD_IDENTIFY_PACKET 0xA1 +#define ATA_CMD_IDENTIFY 0xEC + +#define ATAPI_CMD_READ 0xA8 +#define ATAPI_CMD_EJECT 0x1B + +#define ATA_IDENT_DEVICETYPE 0 +#define ATA_IDENT_CYLINDERS 2 +#define ATA_IDENT_HEADS 6 +#define ATA_IDENT_SECTORS 12 +#define ATA_IDENT_SERIAL 20 +#define ATA_IDENT_MODEL 54 +#define ATA_IDENT_MODEL_SZ 40 +#define ATA_IDENT_CAPABILITIES 98 +#define ATA_IDENT_FIELDVALID 106 +#define ATA_IDENT_MAX_LBA 120 +#define ATA_IDENT_COMMANDSETS 164 +#define ATA_IDENT_MAX_LBA_EXT 200 + +#ifndef __ASSEMBLER__ +typedef enum { + NO_DEVICE = 0, + ATA, + ATAPI, +} ide_dev_type; + + +typedef struct __attribute__((packed)) { + uint16_t bus; + uint8_t device; + ide_dev_type type; + uint16_t sig; + uint16_t capabilities; + uint32_t command_set; + char* serial; + char* model; + uint32_t size; +} ide_device_t; + +void scan_drives(); +ide_device_t* get_ide_device(uint8_t slot); +int ide_read_blks(ide_device_t* dev, uint32_t lba, uint32_t sectors, void* buf); + +#endif + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/iso/iso.c b/RockOS/kernel/drivers/iso/iso.c new file mode 100644 index 0000000..8feb243 --- /dev/null +++ b/RockOS/kernel/drivers/iso/iso.c @@ -0,0 +1,59 @@ +#include "iso.h" + +#include "drivers/ide/ide.h" + +#include "lib/print.h" +#include "lib/memory.h" + +uint8_t sector_buf[2048]; +void read_iso(ide_device_t* dev) { + int success = ide_read_blks(dev, 16, 1, sector_buf); + if (!success) { + kprintf("Failed to read PVD\n"); + return; + } + + if (sector_buf[0] != 1) { + kprintf("Couldn't find PVD in sector 0x10\n"); + return; + } + + iso_pvd_t* pvd = (iso_pvd_t*)sector_buf; + + char pvd_identifier[6]; + memcpy(pvd->header.identifier, pvd_identifier, 5); + pvd_identifier[5] = 0; + + if (strcmp(pvd_identifier, "CD001") > 0) { + kprintf("Invalid PVD identifier\n"); + return; + } + + char volume_identifier[33]; + memset((uint8_t*)volume_identifier, 0, 33); + memcpy(&pvd->volume_ident[0], volume_identifier, 32); + + kprintf("Reading ISO Filesystem from CDROM Disk %s\n", volume_identifier); + + uint32_t lba_path_table = pvd->path_table_l_loc; + uint32_t path_table_sz = pvd->path_table_sz_le; + uint32_t sectors = path_table_sz / 2048; + if (sectors % 2048 > 0 || sectors == 0) { + sectors++; + } + + uint8_t path_table_sec[2048 * sectors]; + memset(path_table_sec, 0, 2048); + success = ide_read_blks(dev, lba_path_table, 1, path_table_sec); + if (!success) { + kprintf("could not read path table at lba 0x%x\n", lba_path_table); + return; + } + + iso_path_table_entry_t* path = (iso_path_table_entry_t*)path_table_sec; + while ((uint32_t)path - (uint32_t)path_table_sec < 2048) { + size_t entry_sz = sizeof(iso_path_table_entry_t) + (path->dir_ident_len - 1); + if (path->dir_ident_len % 2 > 0) entry_sz++; + path = (iso_path_table_entry_t*)((uint32_t)path + entry_sz); + } +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/iso/iso.h b/RockOS/kernel/drivers/iso/iso.h new file mode 100644 index 0000000..11abdb2 --- /dev/null +++ b/RockOS/kernel/drivers/iso/iso.h @@ -0,0 +1,65 @@ +#ifndef KISO_H +#define KISO_H + +#include "drivers/ide/ide.h" + +typedef struct __attribute__((packed)) { + uint8_t type; + char identifier[5]; + uint8_t version; +} vd_header_t; + +typedef struct __attribute__((packed)) { + +} iso_dec_datetime_t; + +typedef struct __attribute__((packed)) { + vd_header_t header; + uint8_t unused; + uint8_t sys_ident[32]; + uint8_t volume_ident[32]; + uint8_t unused_1[8]; + uint32_t volume_space_sz_le; + uint32_t volume_space_sz_be; + uint8_t unused_2[32]; + uint16_t vol_set_sz_le; + uint16_t vol_set_sz_be; + uint16_t vol_seq_num_le; + uint16_t vol_seq_num_be; + uint16_t logical_blk_sz_le; + uint16_t logical_blk_sz_be; + uint32_t path_table_sz_le; + uint32_t path_table_sz_be; + uint32_t path_table_l_loc; + uint32_t opt_path_table_l_loc; + uint32_t path_table_m_loc; + uint32_t opt_path_table_m_loc; + uint8_t root_dir_entry[34]; + uint8_t vol_set_ident_strd[128]; + uint8_t publisher_ident_stra[128]; + uint8_t data_prep_ident_stra[128]; + uint8_t app_ident_stra[128]; + uint8_t copyright_ident_strd[37]; + uint8_t abs_file_ident_strd[37]; + uint8_t bib_file_ident_strd[37]; + iso_dec_datetime_t vol_creation_datetime; + iso_dec_datetime_t vol_modif_datetime; + iso_dec_datetime_t vol_expr_datetime; + iso_dec_datetime_t vol_effective_datetime; + uint8_t file_struct_version; + uint8_t unused_3; + uint8_t app_reserved[512]; + uint8_t reserved[653]; +} iso_pvd_t; + +typedef struct __attribute__((packed)) { + uint8_t dir_ident_len; + uint8_t ext_attrib_len; + uint32_t location; + uint16_t parent_idx; + uint8_t dir_ident_start; +} iso_path_table_entry_t; + +void read_iso(ide_device_t* dev); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/pic/pic.S b/RockOS/kernel/drivers/pic/pic.S new file mode 100644 index 0000000..38d2870 --- /dev/null +++ b/RockOS/kernel/drivers/pic/pic.S @@ -0,0 +1,70 @@ +#define PIC1_ADDR 0x20 + 0xC0000000 +#define PIC2_ADDR 0xA0 + 0xC0000000 +#define PIC1_COMMAND PIC1_ADDR +#define PIC1_DATA (PIC1_ADDR+1) +#define PIC2_COMMAND PIC2_ADDR +#define PIC2_DATA (PIC2_ADDR+1) +#define PIC_EOI 0x20 + +.code32 + +.global init_pic +init_pic: + # init command + mov $0x11, %al + outb %al, $PIC1_COMMAND + outb %al, $PIC2_COMMAND + + # vector offsets + mov $0x20, %al + outb %al, $PIC1_DATA + mov $0x28, %al + outb %al, $PIC2_DATA + + # cascade + mov $0x04, %al + outb %al, $PIC1_DATA + mov $0x02, %al + outb %al, $PIC2_DATA + + # env + mov $0x01, %al + outb %al, $PIC1_DATA + outb %al, $PIC2_DATA + + # mask + mov $0xF8, %al + outb %al, $PIC1_DATA + mov $0xFF, %al + outb %al, $PIC2_DATA + + ret + +.global send_eoi_master +send_eoi_master: + mov $0x20, %al + outb %al, $PIC1_COMMAND + ret + +.global send_eoi_slave +send_eoi_slave: + mov $0x20, %al + outb %al, $PIC2_COMMAND + call send_eoi_master + ret + +.global read_isr_master +read_isr_master: + xorl %eax, %eax + mov $0x0B, %al + outb %al, $PIC1_COMMAND + in $PIC1_COMMAND, %al + ret + +.global read_isr_slave +read_isr_slave: + xorl %eax, %eax + mov $0x0B, %al + outb %al, $PIC2_COMMAND + in $PIC2_COMMAND, %al + ret \ No newline at end of file diff --git a/RockOS/kernel/drivers/pic/pic.c b/RockOS/kernel/drivers/pic/pic.c new file mode 100644 index 0000000..e69de29 diff --git a/RockOS/kernel/drivers/pic/pic.h b/RockOS/kernel/drivers/pic/pic.h new file mode 100644 index 0000000..07d008f --- /dev/null +++ b/RockOS/kernel/drivers/pic/pic.h @@ -0,0 +1,9 @@ +#ifndef DPIC_H +#define DPIC_H + +void init_pic(); + +void send_eoi_master(); +void send_eoi_slave(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/pit/pit.S b/RockOS/kernel/drivers/pit/pit.S new file mode 100644 index 0000000..0271c60 --- /dev/null +++ b/RockOS/kernel/drivers/pit/pit.S @@ -0,0 +1,13 @@ +.code32 +.global init_pit +init_pit: + movb $0x36, %al + outb %al, $0x43 + + movb $0xA9, %al + outb %al, $0x40 + + movb $0x04, %al + outb %al, $0x40 + + ret \ No newline at end of file diff --git a/RockOS/kernel/drivers/pit/pit.h b/RockOS/kernel/drivers/pit/pit.h new file mode 100644 index 0000000..1e18b2d --- /dev/null +++ b/RockOS/kernel/drivers/pit/pit.h @@ -0,0 +1,6 @@ +#ifndef DPIT_H +#define DPIT_H + +void init_pit(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/ps2/ps2.S b/RockOS/kernel/drivers/ps2/ps2.S new file mode 100644 index 0000000..7691020 --- /dev/null +++ b/RockOS/kernel/drivers/ps2/ps2.S @@ -0,0 +1,85 @@ +#include "drivers/ps2/ps2.h" + +.code32 + +.global ps2_wait_input_empty +.global ps2_wait_output_full +.global ps2_write_command +.global ps2_read_data +.global ps2_write_data +.global ps2_flush_output_buffer + +# helpers +ps2_wait_input_empty: #(void) -> void + push %ebp + mov %esp, %ebp +1: + inb $PS2_STATUS, %al + andb $0x02, %al + jnz 1b + + leave + ret + +ps2_wait_output_full: #(void) -> void + push %ebp + mov %esp, %ebp +1: + inb $PS2_STATUS, %al + andb $0x01, %al + jz 1b + + leave + ret + +ps2_write_command: #(uint8_t command) -> void + push %ebp + mov %esp, %ebp + + call ps2_wait_input_empty + + xor %eax, %eax + movb 8(%ebp), %al + outb %al, $PS2_COMMAND + + leave + ret + +ps2_read_data: #(void) -> uint8_t + push %ebp + mov %esp, %ebp + + call ps2_wait_output_full + + xor %eax, %eax + inb $PS2_DATA, %al + + leave + ret + +ps2_write_data: #(uint8_t) -> void + push %ebp + mov %esp, %ebp + + call ps2_wait_input_empty + + xor %eax, %eax + movb 8(%ebp), %al + outb %al, $PS2_DATA + + leave + ret + + +ps2_flush_output_buffer: #(void) -> void + push %ebp + mov %esp, %ebp +1: + inb $PS2_STATUS, %al + andb $0x01, %al + jz 2f + inb $PS2_DATA, %al + jmp 1b +2: + leave + ret \ No newline at end of file diff --git a/RockOS/kernel/drivers/ps2/ps2.c b/RockOS/kernel/drivers/ps2/ps2.c new file mode 100644 index 0000000..7146eff --- /dev/null +++ b/RockOS/kernel/drivers/ps2/ps2.c @@ -0,0 +1,91 @@ +#include + +#include + +static const char scancode_to_ascii[] = { + 0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', + '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', + 0, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', 0, + '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, '*', 0, ' ' +}; + +extern void ps2_wait_input_empty(void); +extern void ps2_wait_output_full(void); +extern void ps2_write_command(uint8_t); +extern void ps2_write_data(uint8_t); +extern void ps2_flush_output_buffer(void); +extern void io_wait(void); + +static uint8_t read_ccb() { + ps2_write_command(CMD_READ_CCB); + io_wait(); + return ps2_read_data(); +} + +static void write_ccb(uint8_t ccb) { + ps2_write_command(CMD_WRITE_CCB); + io_wait(); + ps2_write_data(ccb); + io_wait(); +} + +static int perform_self_test() { + ps2_write_command(CMD_SELF_TEST); + io_wait(); + return ps2_read_data(); +} + +static int test_port_1() { + ps2_write_command(CMD_TEST_P1); + io_wait(); + return ps2_read_data(); +} + +static void enable_port_1() { + ps2_write_command(CMD_ENABLE_P1); + io_wait(); +} + +int init_ps2() { + ps2_write_command(CMD_DISABLE_P1); + ps2_write_command(CMD_DISABLE_P2); + + ps2_flush_output_buffer(); + + uint8_t ccb = read_ccb(); + ccb = ccb & 0xEC; + write_ccb(ccb); + + int result = perform_self_test(); + if (result != SELF_TEST_SUCCESS) { + return -1; + } + + result = test_port_1(); + if (result != PORT_TEST_SUCCESS) { + return -1; + } + + enable_port_1(); + + ccb = read_ccb(); + ccb |= 0x01; // this enables interrupts for port 1, which we want + write_ccb(ccb); + + return 0; +} + +char ps2_get_ascii(uint8_t scancode) { + if (scancode & 0x80) { + return 0; + } + + if (scancode < sizeof(scancode_to_ascii)) { + char ascii = scancode_to_ascii[scancode]; + if (ascii != 0) { + return ascii; + } + } + + return 0; +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/ps2/ps2.h b/RockOS/kernel/drivers/ps2/ps2.h new file mode 100644 index 0000000..607cf64 --- /dev/null +++ b/RockOS/kernel/drivers/ps2/ps2.h @@ -0,0 +1,28 @@ +#ifndef KPS2_H +#define KPS2_H + +#define PS2_DATA 0x60 +#define PS2_STATUS 0x64 +#define PS2_COMMAND 0x64 + +#define CMD_DISABLE_P1 0xAD +#define CMD_DISABLE_P2 0xAE +#define CMD_READ_CCB 0x20 +#define CMD_WRITE_CCB 0x60 +#define CMD_SELF_TEST 0xAA +#define CMD_TEST_P1 0xAB +#define CMD_ENABLE_P1 0xAE + +#define SELF_TEST_SUCCESS 0x55 +#define PORT_TEST_SUCCESS 0x00 + +#ifndef __ASSEMBLER__ +#include + +int init_ps2(); +uint8_t ps2_read_data(); + +char ps2_get_ascii(uint8_t scancode); +#endif + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/pty/pty.c b/RockOS/kernel/drivers/pty/pty.c new file mode 100644 index 0000000..cc9e8d3 --- /dev/null +++ b/RockOS/kernel/drivers/pty/pty.c @@ -0,0 +1,65 @@ +#include "lib/ringbuf.h" + +#include + +#include + +uint32_t pty_master_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + pty_t* pty = (pty_t*)node->data; + uint32_t bytes_read = 0; + while (bytes_read < size) { + char c; + if (ring_buf_read(&pty->slave_rb, &c) == 0) { + buffer[bytes_read++] = c; + } else { + break; + } + } + return bytes_read; +} + +uint32_t pty_master_write(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + pty_t* pty = (pty_t*)node->data; + uint32_t bytes_written = 0; + + while (bytes_written < size) { + if (ring_buf_write(&pty->master_rb, buffer[bytes_written]) == 0) { + bytes_written++; + ring_buf_write(&pty->slave_rb, buffer[bytes_written-1]); + } else { + break; + } + } + return bytes_written; +} + +uint32_t pty_slave_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + pty_t* pty = (pty_t*)node->data; + uint32_t bytes_read = 0; + + while (bytes_read < size) { + char c; + if (ring_buf_read(&pty->master_rb, &c) == 0) { + buffer[bytes_read++] = c; + } else { + break; + } + } + + return bytes_read; +} + +uint32_t pty_slave_write(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + pty_t* pty = (pty_t*)node->data; + uint32_t bytes_written = 0; + + while (bytes_written < size) { + if (ring_buf_write(&pty->slave_rb, buffer[bytes_written]) == 0) { + bytes_written++; + } else { + break; + } + } + + return bytes_written; +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/pty/pty.h b/RockOS/kernel/drivers/pty/pty.h new file mode 100644 index 0000000..0127163 --- /dev/null +++ b/RockOS/kernel/drivers/pty/pty.h @@ -0,0 +1,27 @@ +#ifndef KPTY_H +#define KPTY_H + +#include +#include +#include + +typedef struct { + +} wait_queue_t; + +typedef struct { + ring_buf_t master_rb; + ring_buf_t slave_rb; + wait_queue_t master_wq; + wait_queue_t slave_wq; + uint32_t flags; + uint32_t pid; +} pty_t; + +uint32_t pty_master_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); +uint32_t pty_master_write(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); + +uint32_t pty_slave_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); +uint32_t pty_slave_write(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/serial/serial.c b/RockOS/kernel/drivers/serial/serial.c new file mode 100644 index 0000000..ec3f407 --- /dev/null +++ b/RockOS/kernel/drivers/serial/serial.c @@ -0,0 +1,37 @@ +#include +#include + +#define COM1 0x3F8 + +int is_transmit_empty() { + return inb(COM1 + 5) & 0x20; +} + +void write_serial(char a) { + while (is_transmit_empty() == 0); + outb(COM1, a); +} + +void print_serial(const char* str) { + for (int i = 0; str[i] != '\0'; i++) { + write_serial(str[i]); + } +} + +void print_serial_hex(uint32_t val) { + char hex_chars[] = "0123456789ABCDEF"; + print_serial("0x"); + for (int i = 28; i >= 0; i -= 4) { + write_serial(hex_chars[(val >> i) & 0x0F]); + } +} + +void init_serial() { + outb(COM1 + 1, 0x00); // Disable all interrupts + outb(COM1 + 3, 0x80); // Enable DLAB (set baud rate divisor) + outb(COM1 + 0, 0x01); // Set divisor to 1 (lo byte) -> 115200 baud + outb(COM1 + 1, 0x00); // (hi byte) + outb(COM1 + 3, 0x03); // 8 bits, no parity, one stop bit + outb(COM1 + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold + outb(COM1 + 4, 0x0B); // IRQs enabled, RTS/DSR set +} diff --git a/RockOS/kernel/drivers/serial/serial.h b/RockOS/kernel/drivers/serial/serial.h new file mode 100644 index 0000000..a8bb0de --- /dev/null +++ b/RockOS/kernel/drivers/serial/serial.h @@ -0,0 +1,12 @@ +#ifndef D_SERIAL_H +#define D_SERIAL_H + +#include + +void init_serial(); +void print_serial_hex(uint32_t val); +void print_serial(const char* str); +void write_serial(char a); +int is_transmit_empty(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/drivers/vga/vga.c b/RockOS/kernel/drivers/vga/vga.c new file mode 100644 index 0000000..984e0cb --- /dev/null +++ b/RockOS/kernel/drivers/vga/vga.c @@ -0,0 +1,68 @@ +#include +#include + +#include + +#include +#include + +static uint32_t framebuffer_address; +static uint32_t framebuffer_width; +static uint32_t framebuffer_height; +static uint32_t framebuffer_total_pixels; +static uint32_t framebuffer_pitch; +static uint32_t framebuffer_bpp; + +void vga_init( + uint32_t fb_paddr, + uint32_t fb_width, + uint32_t fb_height, + uint32_t fb_pitch, + uint8_t fb_bpp +) { + uint32_t fb_size_bytes = fb_height * fb_pitch; + uint32_t num_pages = (fb_size_bytes + 4095) / 4096; + for (uint32_t i = 0; i < num_pages; i++) { + uint32_t phys_addr = fb_paddr + (i * 4096); + uint32_t virt_addr = VGA_FRAMEBUFFER + (i * 4096); + map_page(virt_addr, phys_addr, PAGE_PRESENT | PAGE_WRITABLE); + } + + framebuffer_address = VGA_FRAMEBUFFER; + framebuffer_width = fb_width; + framebuffer_height = fb_height; + framebuffer_pitch = fb_pitch; + framebuffer_bpp = fb_bpp; + framebuffer_total_pixels = framebuffer_width * framebuffer_height; +} + +uint32_t vga_get_fb() { + return framebuffer_address; +} + +uint32_t vga_get_width() { + return framebuffer_width; +} + +uint32_t vga_get_height() { + return framebuffer_height; +} + +uint32_t vga_get_pitch() { + return framebuffer_pitch; +} + +uint8_t vga_get_bpp() { + return framebuffer_bpp; +} + +uint32_t vga_write(vfs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buf) { + // probably just memcpy here + return size; +} + +void vga_clear_scrn(uint32_t color) { + for (uint32_t i = 0; i < framebuffer_total_pixels; i++) { + ((uint32_t*)framebuffer_address)[i] = color; + } +} \ No newline at end of file diff --git a/RockOS/kernel/drivers/vga/vga.h b/RockOS/kernel/drivers/vga/vga.h new file mode 100644 index 0000000..8740ef6 --- /dev/null +++ b/RockOS/kernel/drivers/vga/vga.h @@ -0,0 +1,46 @@ +#ifndef DVGA_H +#define DVGA_H + +#include +#include + +#define VGA_FRAMEBUFFER 0xFF700000 + +enum vga_color { + VGA_COLOR_BLACK = 0, + VGA_COLOR_BLUE = 1, + VGA_COLOR_GREEN = 2, + VGA_COLOR_CYAN = 3, + VGA_COLOR_RED = 4, + VGA_COLOR_MAGENTA = 5, + VGA_COLOR_BROWN = 6, + VGA_COLOR_LIGHT_GREY = 7, + VGA_COLOR_DARK_GREY = 8, + VGA_COLOR_LIGHT_BLUE = 9, + VGA_COLOR_LIGHT_GREEN = 10, + VGA_COLOR_LIGHT_CYAN = 11, + VGA_COLOR_LIGHT_RED = 12, + VGA_COLOR_LIGHT_MAGENTA = 13, + VGA_COLOR_LIGHT_BROWN = 14, + VGA_COLOR_WHITE = 15, +}; + +void vga_init( + uint32_t fb_paddr, + uint32_t fb_width, + uint32_t fb_height, + uint32_t fb_pitch, + uint8_t fb_bpp +); + +uint32_t vga_get_fb(); +uint32_t vga_get_width(); +uint32_t vga_get_height(); +uint32_t vga_get_pitch(); +uint8_t vga_get_bpp(); + +uint32_t vga_write(vfs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buf); + +void vga_clear_scrn(uint32_t color); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/elf.c b/RockOS/kernel/elf.c new file mode 100644 index 0000000..50f3ece --- /dev/null +++ b/RockOS/kernel/elf.c @@ -0,0 +1,68 @@ +#include "elf.h" +#include "vfs.h" +#include "memory/mm.h" +#include "process.h" +#include "scheduler.h" + +#include +#include + +uint32_t load_elf_program(const char* prgm) { + int fd = vfs_open(prgm, 0); + if (fd == -1) { + return 0; + } + + elf_header_t* e_hdr = kalloc(sizeof(elf_header_t)); + memset((void*)e_hdr, 0, sizeof(elf_header_t)); + + uint32_t bytes_rd = vfs_read(fd, e_hdr, sizeof(elf_header_t)); + if (bytes_rd <= 0) { + return 0; + } + + uint32_t ph_table_ptr = e_hdr->e_phoff; + elf_program_header_t* ph = kalloc(sizeof(elf_program_header_t)); + uint32_t heap_start = 0; + + for (uint32_t i = 0; i < e_hdr->e_phnum; i++) { + vfs_seek(fd, ph_table_ptr); + memset((void*)ph, 0, sizeof(elf_program_header_t)); + vfs_read(fd, ph, sizeof(elf_program_header_t)); + + if (ph->p_type == PT_LOAD) { + uint32_t vstart = ph->p_vaddr; + uint32_t vend = vstart + ph->p_memsz; + + if (vend > heap_start) { + heap_start = vend; + } + + uint32_t page_start = vstart & ~(PAGE_SIZE - 1); + uint32_t page_end = (vend + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); + + for (uint32_t v = page_start; v < page_end; v += PAGE_SIZE) { + void* phys_frame = p_alloc_frame(); + map_page(v, (uint32_t)phys_frame, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); + } + + uint32_t data_ptr = ph->p_offset; + vfs_seek(fd, data_ptr); + vfs_read(fd, (void*)vstart, ph->p_filesz); + + // 0 out bss + if (ph->p_memsz > ph->p_filesz) { + size_t bss_size = ph->p_memsz - ph->p_filesz; + memset((void*)(vstart + ph->p_filesz), 0, bss_size); + } + } + + ph_table_ptr += sizeof(elf_program_header_t); + } + + uint32_t eip = e_hdr->e_entry; + kfree(ph); + kfree(e_hdr); + + return eip; +} diff --git a/RockOS/kernel/elf.h b/RockOS/kernel/elf.h new file mode 100644 index 0000000..524354f --- /dev/null +++ b/RockOS/kernel/elf.h @@ -0,0 +1,39 @@ +#ifndef KELF_H +#define KELF_H + +#include + +#define ELF_MAGIC 0x464C457F +#define PT_LOAD 1 + +typedef struct { + uint8_t e_ident[16]; + uint16_t e_type; + uint16_t e_machine; + uint32_t e_version; + uint32_t e_entry; + uint32_t e_phoff; + uint32_t e_shoff; + uint32_t e_flags; + uint16_t e_ehsize; + uint16_t e_phentsize; + uint16_t e_phnum; + uint16_t e_shentsize; + uint16_t e_shnum; + uint16_t e_shstrndx; +} __attribute__((packed)) elf_header_t; + +typedef struct { + uint32_t p_type; + uint32_t p_offset; + uint32_t p_vaddr; + uint32_t p_paddr; + uint32_t p_filesz; + uint32_t p_memsz; + uint32_t p_flags; + uint32_t p_align; +} __attribute__((packed)) elf_program_header_t; + +uint32_t load_elf_program(const char* prgm); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/gdt.S b/RockOS/kernel/gdt.S new file mode 100644 index 0000000..09fddd3 --- /dev/null +++ b/RockOS/kernel/gdt.S @@ -0,0 +1,21 @@ +.code32 + +.extern gdtr +.global load_gdt +load_gdt: + lgdt gdtr + ljmpl $0x08, $reload_segments +reload_segments: + mov $0x10, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + mov %ax, %ss + ret + +.global tss_flush +tss_flush: + mov $0x28, %ax + ltr %ax + ret \ No newline at end of file diff --git a/RockOS/kernel/gdt.c b/RockOS/kernel/gdt.c new file mode 100644 index 0000000..1b18673 --- /dev/null +++ b/RockOS/kernel/gdt.c @@ -0,0 +1,114 @@ +#include + +#define SEG_DESCTYPE(x) ((x) << 0x04) // Descriptor type (0 for system, 1 for code/data) +#define SEG_PRES(x) ((x) << 0x07) // Present +#define SEG_SAVL(x) ((x) << 0x0C) // Available for system use +#define SEG_LONG(x) ((x) << 0x0D) // Long mode +#define SEG_SIZE(x) ((x) << 0x0E) // Size (0 for 16-bit, 1 for 32) +#define SEG_GRAN(x) ((x) << 0x0F) // Granularity (0 for 1B - 1MB, 1 for 4KB - 4GB) +#define SEG_PRIV(x) (((x) & 0x03) << 0x05) // Set privilege level (0 - 3) + +#define SEG_DATA_RD 0x00 // Read-Only +#define SEG_DATA_RDA 0x01 // Read-Only, accessed +#define SEG_DATA_RDWR 0x02 // Read/Write +#define SEG_DATA_RDWRA 0x03 // Read/Write, accessed +#define SEG_DATA_RDEXPD 0x04 // Read-Only, expand-down +#define SEG_DATA_RDEXPDA 0x05 // Read-Only, expand-down, accessed +#define SEG_DATA_RDWREXPD 0x06 // Read/Write, expand-down +#define SEG_DATA_RDWREXPDA 0x07 // Read/Write, expand-down, accessed +#define SEG_CODE_EX 0x08 // Execute-Only +#define SEG_CODE_EXA 0x09 // Execute-Only, accessed +#define SEG_CODE_EXRD 0x0A // Execute/Read +#define SEG_CODE_EXRDA 0x0B // Execute/Read, accessed +#define SEG_CODE_EXC 0x0C // Execute-Only, conforming +#define SEG_CODE_EXCA 0x0D // Execute-Only, conforming, accessed +#define SEG_CODE_EXRDC 0x0E // Execute/Read, conforming +#define SEG_CODE_EXRDCA 0x0F // Execute/Read, conforming, accessed + +#define GDT_CODE_PL0 SEG_DESCTYPE(1) | SEG_PRES(1) | SEG_SAVL(0) | \ + SEG_LONG(0) | SEG_SIZE(1) | SEG_GRAN(1) | \ + SEG_PRIV(0) | SEG_CODE_EXRD + +#define GDT_DATA_PL0 SEG_DESCTYPE(1) | SEG_PRES(1) | SEG_SAVL(0) | \ + SEG_LONG(0) | SEG_SIZE(1) | SEG_GRAN(1) | \ + SEG_PRIV(0) | SEG_DATA_RDWR + +#define GDT_CODE_PL3 SEG_DESCTYPE(1) | SEG_PRES(1) | SEG_SAVL(0) | \ + SEG_LONG(0) | SEG_SIZE(1) | SEG_GRAN(1) | \ + SEG_PRIV(3) | SEG_CODE_EXRD + +#define GDT_DATA_PL3 SEG_DESCTYPE(1) | SEG_PRES(1) | SEG_SAVL(0) | \ + SEG_LONG(0) | SEG_SIZE(1) | SEG_GRAN(1) | \ + SEG_PRIV(3) | SEG_DATA_RDWR + +typedef struct __attribute__((packed)) { + uint16_t limit; + uint32_t base; +} gdt_ptr_t; + +uint64_t gdt[6]; +gdt_ptr_t gdtr; + +tss_entry_t tss; + +extern void load_gdt(); +extern void tss_flush(); + +static uint64_t create_descriptor(uint32_t base, uint32_t limit, uint16_t flag) +{ + uint64_t descriptor; + + descriptor = limit & 0x000F0000; + descriptor |= (flag << 8) & 0x00F0FF00; + descriptor |= (base >> 16) & 0x000000FF; + descriptor |= base & 0xFF000000; + + descriptor <<= 32; + + descriptor |= base << 16; + descriptor |= limit & 0x0000FFFF; + + return descriptor; +} + +static uint64_t create_tss_descriptor(uint32_t base, uint32_t limit) +{ + uint64_t descriptor; + uint16_t tss_flags = SEG_PRES(1) | SEG_PRIV(0) | SEG_DESCTYPE(0) | 0x09; + + descriptor = limit & 0x000F0000; + descriptor |= (tss_flags << 8) & 0x00F0FF00; + descriptor |= (base >> 16) & 0x000000FF; + descriptor |= base & 0xFF000000; + + descriptor <<= 32; + + descriptor |= base << 16; + descriptor |= limit & 0x0000FFFF; + + return descriptor; +} + +void init_gdt() { + gdt[0] = create_descriptor(0, 0, 0); + gdt[1] = create_descriptor(0, 0x000FFFFF, (GDT_CODE_PL0)); + gdt[2] = create_descriptor(0, 0x000FFFFF, (GDT_DATA_PL0)); + gdt[3] = create_descriptor(0, 0x000FFFFF, (GDT_CODE_PL3)); + gdt[4] = create_descriptor(0, 0x000FFFFF, (GDT_DATA_PL3)); + + for (uint32_t i = 0; i < sizeof(tss_entry_t); i++) { + ((char*)&tss)[i] = 0; + } + + tss.ss0 = 0x10; + tss.iomap_base = sizeof(tss_entry_t); + + gdt[5] = create_tss_descriptor((uint32_t)&tss, sizeof(tss_entry_t) - 1); + + gdtr.limit = 6 * sizeof(uint64_t) - 1; + gdtr.base = (uint32_t)&gdt; + + load_gdt(); + tss_flush(); +} + diff --git a/RockOS/kernel/gdt.h b/RockOS/kernel/gdt.h new file mode 100644 index 0000000..f4338bb --- /dev/null +++ b/RockOS/kernel/gdt.h @@ -0,0 +1,41 @@ +#ifndef KGDT_H +#define KGDT_H + +#include + +typedef struct __attribute__((packed)) { + uint32_t prev_tss; + uint32_t esp0; + uint32_t ss0; + uint32_t esp1; + uint32_t ss1; + uint32_t esp2; + uint32_t ss2; + uint32_t cr3; + uint32_t eip; + uint32_t eflags; + uint32_t eax; + uint32_t ecx; + uint32_t edx; + uint32_t ebx; + uint32_t esp; + uint32_t ebp; + uint32_t esi; + uint32_t edi; + uint32_t es; + uint32_t cs; + uint32_t ss; + uint32_t ds; + uint32_t fs; + uint32_t gs; + uint32_t ldt; + uint16_t trap; + uint16_t iomap_base; +} tss_entry_t; + +void init_gdt(); +void tss_flush(); + +extern tss_entry_t tss; + +#endif \ No newline at end of file diff --git a/RockOS/kernel/globals.c b/RockOS/kernel/globals.c new file mode 100644 index 0000000..f83e2de --- /dev/null +++ b/RockOS/kernel/globals.c @@ -0,0 +1,11 @@ +#include + +#include "multiboot.h" + +multiboot_info* grub_boot_struct_ptr = NULL; + +extern char __kernel_start; +extern char __kernel_end; +size_t kernel_size() { + return (size_t)(&__kernel_end - &__kernel_start); +} \ No newline at end of file diff --git a/RockOS/kernel/interrupts.S b/RockOS/kernel/interrupts.S new file mode 100644 index 0000000..c04a73f --- /dev/null +++ b/RockOS/kernel/interrupts.S @@ -0,0 +1,79 @@ +.code32 +.macro ISR_NOERRCODE num +.global isr\num +isr\num: + pushl $0 + pushl $\num + jmp isr_common_stub +.endm + +.macro ISR_ERRCODE num +.global isr\num +isr\num: + pushl $\num + jmp isr_common_stub +.endm + +.extern common_interrupt_handler # interrupts.c +isr_common_stub: + pushal + + xor %eax, %eax + mov %ds, %ax + pushl %eax + + mov $0x10, %ax + mov %ax, %ds + mov %ax, %es + + pushl %esp + call common_interrupt_handler + addl $4, %esp + + popl %eax + mov %ax, %ds + mov %ax, %es + + popal + addl $8, %esp + iret + +.extern idtr +.global load_idt +load_idt: + lidt idtr + ret + +ISR_NOERRCODE 0 # Divide by Zero +ISR_NOERRCODE 1 # Debug +ISR_ERRCODE 8 # Double Fault (Has Error Code!) +ISR_ERRCODE 13 # General Protection Fault (Has Error Code!) +ISR_ERRCODE 14 # Page Fault (Has Error Code!) + +// This is a special case so we need to handle it for task switching +.global isr32 +.extern switch_context # scheduler.c +.extern send_eoi_master # drivers/pic/pic.S +isr32: + cli + pushal + push %ds + + mov $0x10, %ax + mov %ax, %ds + + pushl %esp + call switch_context + movl %eax, %esp + + call send_eoi_master + + pop %ds + popal + sti + iret + +ISR_NOERRCODE 33 # IRQ1 - Keyboard + +ISR_NOERRCODE 46 # IRQ14 +ISR_NOERRCODE 47 # IRQ15 \ No newline at end of file diff --git a/RockOS/kernel/interrupts.c b/RockOS/kernel/interrupts.c new file mode 100644 index 0000000..7209d46 --- /dev/null +++ b/RockOS/kernel/interrupts.c @@ -0,0 +1,222 @@ +#include + +#include + +#include + +#include "kbd.h" +#include "syscall.h" +#include "common.h" +#include "gdt.h" +#include "scheduler.h" +#include "process.h" + +#include +#include +#include + +#define IDT_MAX_DESCRIPTORS 256 +#define ATTR_KERN_32 0x8E // active(1), ring 0 (00), interrupt gate(0), 32 bit (1110) +#define ATTR_USER_32 0xEE // active, ring 3, 32bit +#define SEGMENT_KERN 0x08 + +typedef struct __attribute__((packed)) { + uint16_t isr_low; + uint16_t selector; + uint8_t reserved; + uint8_t attributes; + uint16_t isr_high; +} idt_entry; + +typedef struct __attribute__((packed)) { + uint16_t limit; + uint32_t base; +} idt_ptr; + +// (interrupts.S) +extern void load_idt(void); +extern void isr0(); +extern void isr1(); +extern void isr8(); +extern void isr13(); +extern void isr14(); +extern void isr32(); +extern void isr33(); + +static void* isr_stub_table[256] = { + [0] = isr0, + [1] = isr1, + [8] = isr8, + [13] = isr13, + [14] = isr14, + [32] = isr32, + [33] = isr33, +}; + +static const char* err_messages[32] = { + [0] = "Divide by 0", + [1] = "Debug", + [4] = "Overflow", + [6] = "Undefined Opcode", + [8] = "", + [13] = "General Protection Fault", + [14] = "Page Fault", +}; + +idt_entry idt[IDT_MAX_DESCRIPTORS]; +idt_ptr idtr; + +static void set_idtr(uint8_t vector, void* isr, uint16_t sel, uint8_t attributes) { + idt_entry* desc = &idt[vector]; + + desc->isr_low = (uint32_t)isr & 0xFFFF; + desc->selector = SEGMENT_KERN; + desc->reserved = 0; + desc->attributes = attributes; + desc->isr_high = ((uint32_t)isr >> 16) & 0xFFFF; +} + +void init_idt() { + idtr.limit = (sizeof(idt_entry) * IDT_MAX_DESCRIPTORS) - 1; + idtr.base = (uint32_t)&idt; + + for (int i = 0; i < IDT_MAX_DESCRIPTORS; i++) { + if (isr_stub_table[i] != 0) { + set_idtr(i, isr_stub_table[i], SEGMENT_KERN, ATTR_KERN_32); + } else { + set_idtr(i, 0, SEGMENT_KERN, ATTR_KERN_32); + } + } + + set_idtr(0x80, syscall_handler, SEGMENT_KERN, ATTR_USER_32); + + load_idt(); +} + +typedef struct __attribute__((packed)) { + uint32_t ds; + uint32_t edi, esi, ebp, dummy, ebx, edx, ecx, eax; + + uint32_t int_no; + uint32_t error_code; + + uint32_t eip, cs, eflags, u_esp, u_ss; +} intr_regs_t; +void common_interrupt_handler(intr_regs_t *args) { + switch (args->int_no) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 15: + case 16: { + process_t* task = current_task(); + kprintf("\n--- CPU Exception ---\n"); + kprintf("Current Task PID: %d\n", task->pid); + kprintf("Error: [%d] %s\n", args->int_no, err_messages[args->int_no]); + kprintf("Error Code: 0x%x\n", args->error_code); + kprintf("Instruction Pointer: 0x%x\n", args->eip); + kprintf("Current Stack Pointer: 0x%x\n", (void*)args); + kprintf("EAX: 0x%x\n", args->eax); + kprintf("EFLAGS: 0x%x\n", args->eflags); + kprintf("Code Segment: 0x%x\n", args->cs); + kprintf("Calling Data Segment: 0x%x\n", args->ds); + kprintf("Current cr3: 0x%x\n", fetch_cr3()); + kprintf("tss.esp0: 0x%x\n", tss.esp0); + kprintf("instruction: 0x%x\n", *(uint32_t*)args->eip); + kpanic(); + break; + } + case 14:{ + uint32_t faulting_address; + asm volatile("mov %%cr2, %0" : "=r"(faulting_address)); + + if (is_cow(faulting_address)) { + uint32_t pde_entry = faulting_address >> 22; + uint32_t pte_entry = (faulting_address >> 12) & 0x3FF; + uint32_t* tablev = (uint32_t*)(CUR_PAGE_TABLES + (pde_entry * PAGE_SIZE)); + + uint32_t p_dst = (uint32_t)p_alloc_frame(); + uint32_t p_src = (uint32_t)tablev[pte_entry] & 0xFFFFF000; + + map_page(TEMP_PT_SRC, p_src, PAGE_WRITABLE | PAGE_PRESENT); + map_page(TEMP_PT_DST, p_dst, PAGE_WRITABLE | PAGE_PRESENT); + + memcpy((void*)TEMP_PT_SRC, (void*)TEMP_PT_DST, PAGE_SIZE); + + unmap_page(TEMP_PT_SRC); + unmap_page(TEMP_PT_DST); + + uint32_t flags = tablev[pte_entry] & 0xFFF; + flags &= ~PAGE_COW; + tablev[pte_entry] = p_dst | flags | PAGE_WRITABLE; + + flush_tlb(); + break; + } + + process_t* task = current_task(); + kprintf("\n--- PAGE FAULT ---\n"); + kprintf("Current Task PID: %d\n", task->pid); + kprintf("Faulted Virtual Address: 0x%x\n", faulting_address); + kprintf("Error Code: 0x%x\n", args->error_code); + kprintf("Instruction Pointer: 0x%x\n", args->eip); + kprintf("Current Stack Pointer: 0x%x\n", (void*)args); + kprintf("EAX: 0x%x\n", args->eax); + kprintf("EFLAGS: 0x%x\n", args->eflags); + kprintf("Code Segment: 0x%x\n", args->cs); + kprintf("Current cr3: 0x%x\n", fetch_cr3()); + if (args->cs == 0x1b) { + kprintf("User ESP: 0x%x\n", args->u_esp); + kprintf("ESP: 0x%x\t0x%x\t0x%x\t0x%x\n", + *(uint32_t*)args->u_esp, + *(uint32_t*)(args->u_esp + 4), + *(uint32_t*)(args->u_esp + 8), + *(uint32_t*)(args->u_esp + 12)); + kprintf("User SS: 0x%x\n", args->u_ss); + } + kprintf("Caused by: %s, %s, running in %s mode\n", + (args->error_code & 0x01) ? "Protection Violation" : "Page Not Present", + (args->error_code & 0x02) ? "Write" : "Read", + (args->error_code & 0x04) ? "User" : "Supervisor"); + kpanic(); + break; + } + case 32: { + + break; + } + case 33: { + uint8_t data = ps2_read_data(); + char ascii = ps2_get_ascii(data); + if (ascii != 0) { + kbd_push(ascii); + } + send_eoi_master(); + break; + } + case 46: { // IDE PRIMARY + kprintf("IDE PRIMARY interrupt\n"); + send_eoi_slave(); + break; + } + case 47: { // IDE SLAVE + kprintf("IDE SLAVE interrupt\n"); + send_eoi_slave(); + break; + } + default: + kprintf("Received unhandled interrupt: %d\n", args->int_no); + return; + } +} \ No newline at end of file diff --git a/RockOS/kernel/interrupts.h b/RockOS/kernel/interrupts.h new file mode 100644 index 0000000..83ca29a --- /dev/null +++ b/RockOS/kernel/interrupts.h @@ -0,0 +1,6 @@ +#ifndef KIDT_H +#define KIDT_H + +void init_idt(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/kbd.c b/RockOS/kernel/kbd.c new file mode 100644 index 0000000..7e3a3d6 --- /dev/null +++ b/RockOS/kernel/kbd.c @@ -0,0 +1,86 @@ +#include "kbd.h" +#include "process.h" +#include "scheduler.h" +#include "common.h" + +#include +#include + +#include + +#define KBD_BUFFER_SIZE 256 + +static spinlock_t kbd_lock = {0}; +static process_t* kbd_waiting_task = NULL; + +static char kbd_buffer[KBD_BUFFER_SIZE]; +static int kbd_head = 0; +static int kbd_tail = 0; + +static void lock_kbd() { + disable_interrupts(); + spin_lock(&kbd_lock); +} + +static void unlock_kbd() { + spin_unlock(&kbd_lock); + enable_interrupts(); +} + +static void kbd_set_waiting(process_t* task) { + lock_kbd(); + if (kbd_head == kbd_tail) { + kbd_waiting_task = task; + } + unlock_kbd(); +} + +static char kbd_pop() { + char c = 0; + lock_kbd(); + if (kbd_head != kbd_tail) { + c = kbd_buffer[kbd_tail]; + kbd_tail = (kbd_tail + 1) % KBD_BUFFER_SIZE; + } + unlock_kbd(); + return c; +} + +void kbd_push(char c) { + spin_lock(&kbd_lock); + // push to buffer first, very important + int next_head = (kbd_head + 1) % KBD_BUFFER_SIZE; + if (next_head != kbd_tail) { + kbd_buffer[kbd_head] = c; + kbd_head = next_head; + } + + if (kbd_waiting_task != NULL) { + wake(kbd_waiting_task); + kbd_waiting_task = NULL; + } + spin_unlock(&kbd_lock); +} + +int kbd_ready() { + int ready = 0; + lock_kbd(); + ready = (kbd_head != kbd_tail); + unlock_kbd(); + return ready; +} + +void kbd_wait() { + process_t* task = current_task(); + while (!kbd_ready()) { + task->state = STATE_BLOCKED; + kbd_set_waiting(task); + yield(); + } +} + +uint32_t kbd_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) { + if (!kbd_ready()) return -1; + buffer[0] = kbd_pop(); + return 1; +} \ No newline at end of file diff --git a/RockOS/kernel/kbd.h b/RockOS/kernel/kbd.h new file mode 100644 index 0000000..d6019f1 --- /dev/null +++ b/RockOS/kernel/kbd.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +uint32_t kbd_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); +void kbd_push(char c); +int kbd_ready(); +void kbd_wait(); \ No newline at end of file diff --git a/RockOS/kernel/kmain.c b/RockOS/kernel/kmain.c new file mode 100644 index 0000000..e9557d4 --- /dev/null +++ b/RockOS/kernel/kmain.c @@ -0,0 +1,179 @@ +#include "multiboot.h" +#include "interrupts.h" +#include "gdt.h" +#include "common.h" +#include "scheduler.h" +#include "vfs.h" +#include "elf.h" +#include "gdt.h" +#include "kbd.h" + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include + +extern char __kernel_start; +extern char __kernel_end; + +#define SERIAL_DBG + +extern uint32_t page_directory[1024]; +void* kernel_cr3 = page_directory; + +void parse_multiboot_modules(uint32_t mbi_vaddr) { + // find where grub put the boot module containing initrd + multiboot_info* mbi = (multiboot_info*)mbi_vaddr; + + uint32_t mod_count = mbi->mods_count; + multiboot_module_t* mod = (multiboot_module_t*)((uint32_t)mbi->mods_addr + 0xC0000000); + + for (uint32_t i = 0; i < mod_count; i++) { + uint32_t start = mod[i].mod_start; + uint32_t end = mod[i].mod_end; + uint32_t cmdline = mod[i].cmdline; + + multiboot_module_info_table[i].mod_start = start + 0xC0000000; + multiboot_module_info_table[i].mod_end = end + 0xC0000000; + multiboot_module_info_table[i].cmdline = cmdline + 0xC0000000; + } +} + +vfs_node_t* load_initrd() { + multiboot_module_t* initrd_module = &multiboot_module_info_table[0]; + kprintf("initrd found @ [v] 0x%x\n", initrd_module->mod_start); + return cpio_read_fs(initrd_module->mod_start); +} + +void load_root_program(const char* path) { + lock_scheduler(); + uint32_t kernel_cr3 = fetch_cr3(); + void* cr3 = create_new_pd(); + + load_pd(cr3); + flush_tlb(); + + uint32_t eip = load_elf_program(path); + if (eip == 0) { + kprintf("Failed to load elf program file\n"); + return; + } + + uint32_t stack_sz = PAGE_SIZE * 16; + uint32_t stack_top = 0xBFFF0000; + uint32_t stack_bottom = stack_top - stack_sz; + for (uint32_t vaddr = stack_bottom; vaddr < stack_top; vaddr += PAGE_SIZE) { + void* phys_frame = p_alloc_frame(); + map_page(vaddr, (uint32_t)phys_frame, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); + } + + uint32_t* u_esp = (uint32_t*)stack_top; + *(--u_esp) = 0; // envp = NULL + *(--u_esp) = 0; // argv = NULL + *(--u_esp) = 0; // argc = 0 + + process_t* process = kalloc(sizeof(process_t)); + init_task(process, eip, (uint32_t)cr3, 1, (uint32_t)u_esp); + add_task(process); + + unlock_scheduler(); + + load_pd((void*)kernel_cr3); + flush_tlb(); +} + +void kmain(multiboot_info* mbi) { + disable_interrupts(); + + init_serial(); + + // need mmap and fb info + if (!(mbi->flags & (1 << 6)) || !(mbi->flags & (1 << 12))) { + return; + } + + parse_multiboot_modules((uint32_t)mbi); + + uint32_t vga_fb_address = mbi->framebuffer_addr; + uint32_t vga_fb_width = mbi->framebuffer_width; + uint32_t vga_fb_height = mbi->framebuffer_height; + uint32_t vga_fb_pitch = mbi->framebuffer_pitch; + uint32_t vga_fb_bpp = mbi->framebuffer_bpp; + + init_gdt(); + init_idt(); + init_pic(); + init_pit(); + + uint32_t mmap_virtual_addr = mbi->mmap_addr + 0xC0000000; + init_pmm((void*)mmap_virtual_addr, mbi->mmap_length); + + init_page_tables(); + + vga_init(vga_fb_address, + vga_fb_width, + vga_fb_height, + vga_fb_pitch, + vga_fb_bpp); + + console_init(); + return; + + set_console_font("/fonts/cp850-8x16.psf"); + + console_putchar('a'); + + kprintf("basic initializations complete\n"); + + + vfs_node_t* vfs_root = vfs_create_root(); + vfs_node_t* initrd_root = load_initrd(); + + if (!initrd_root) { + kprintf("failed to load initrd\n"); + } + + vfs_mount(vfs_root, initrd_root); + kprintf("initrd read, mounted @ /\n"); + + vfs_node_t* devfs = create_devfs(); + if (!devfs) { + kprintf("failed to create devfs\n"); + return; + } + + vfs_node_t* vga_dev = devfs->create(devfs, "vga"); + vga_dev->write = vga_write; + + vfs_node_t* kbd_dev = devfs->create(devfs, "kbd"); + kbd_dev->read = kbd_read; + + vfs_node_t* dev = vfs_find("/dev"); + if (dev) { + dev->mnt = devfs; + } + + disable_interrupts(); + init_scheduler(); + enable_interrupts(); + + kprintf("loading terminal program\n"); + load_root_program("/bin/vga_text_term.elf"); + + kprintf("kernel going to sleep...\n"); +} diff --git a/RockOS/kernel/lib/console.c b/RockOS/kernel/lib/console.c new file mode 100644 index 0000000..04df1fe --- /dev/null +++ b/RockOS/kernel/lib/console.c @@ -0,0 +1,73 @@ +#include + +#include +#include + +static psf_font_t* font; + +static uint32_t console_row; +static uint32_t console_col; +static uint32_t console_text_color; +static uint32_t console_backgrnd_color; + +static uint32_t console_total_rows; +static uint32_t console_total_cols; + +static void write_vga_char(char c) { + uint32_t vga_pitch = vga_get_pitch(); + uint8_t* glyph = (uint8_t*)font->glyphs + (c * font->hdr->charsz); + + for (uint32_t y = 0; y < font->hdr->charsz; y++) { + uint8_t bits = glyph[y]; + uint32_t* row = (uint32_t*)((uintptr_t)VGA_FRAMEBUFFER + ((console_row + y) * vga_pitch)); + for (int x = 0; x < 8; x++) { + if (bits & (0b10000000 >> x)) { + row[console_col + x] = console_text_color; + } + } + } +} + +void set_console_font(const char* path) { + font = load_font(path); + + uint32_t scrn_height = vga_get_height(); + uint32_t scrn_width = vga_get_width(); + if (scrn_width == 0 || scrn_height == 0) return; + + console_total_rows = scrn_height / font->hdr->charsz; + console_total_cols = scrn_width / 8; +} + +void set_console_fg(uint32_t color) { + console_text_color = color; +} + +void set_console_bg(uint32_t color) { + console_backgrnd_color = color; +} + +void console_init() { + console_row = 0; + console_col = 0; + set_console_fg(0xFFFFFFFF); + set_console_bg(0x000000FF); + vga_clear_scrn(console_backgrnd_color); +} + +void console_putchar(char c) { + switch (c) { + case '\n': + console_row++; + console_col = 0; + + if (console_row >= console_total_rows) console_row = 0; + return; + } + + write_vga_char(c); + + console_col++; + if (console_col >= console_total_cols) console_row++; console_col = 0; + if (console_row >= console_total_rows) console_row = 0; +} \ No newline at end of file diff --git a/RockOS/kernel/lib/console.h b/RockOS/kernel/lib/console.h new file mode 100644 index 0000000..7587531 --- /dev/null +++ b/RockOS/kernel/lib/console.h @@ -0,0 +1,13 @@ +#ifndef D_CONSOLE_H +#define D_CONSOLE_H + +#include + +void console_putchar(char c); + +void set_console_font(const char* path); +void set_console_fg(uint32_t color); +void set_console_bg(uint32_t color); +void console_init(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/font.c b/RockOS/kernel/lib/font.c new file mode 100644 index 0000000..e39ea6c --- /dev/null +++ b/RockOS/kernel/lib/font.c @@ -0,0 +1,44 @@ +#include "vfs.h" +#include +#include + +#include + +psf_font_t* load_font(const char* path) { + int fd = vfs_open(path, 0); + if (fd == -1) { + return NULL; + } + + psf_hdr_t* header = kalloc(sizeof(psf_hdr_t)); + int rd = vfs_read(fd, header, sizeof(psf_hdr_t)); + if (rd <= 0) { + kfree(header); + return NULL; + } + + uint32_t num_glyphs = (header->mode & (1 << 0)) ? 512 : 256; + uint32_t glyph_sz = header->charsz; + uint32_t glyph_buf_sz = num_glyphs * glyph_sz; + + void* glyphs = kalloc(glyph_buf_sz); + + rd = 0; + rd = vfs_read(fd, glyphs, glyph_buf_sz); + if (rd <= 0) { + kfree(header); + kfree(glyphs); + return NULL; + } + + psf_font_t* font = kalloc(sizeof(psf_font_t)); + font->hdr = header; + font->glyphs = glyphs; + return font; +} + +void free_font(psf_font_t* font) { + kfree(font->glyphs); + kfree(font->hdr); + kfree(font); +} \ No newline at end of file diff --git a/RockOS/kernel/lib/font.h b/RockOS/kernel/lib/font.h new file mode 100644 index 0000000..5d69eb6 --- /dev/null +++ b/RockOS/kernel/lib/font.h @@ -0,0 +1,20 @@ +#ifndef KFONT_H +#define KFONT_H + +#include + +typedef struct { + uint8_t magic[2]; + uint8_t mode; + uint8_t charsz; +} psf_hdr_t; + +typedef struct { + psf_hdr_t* hdr; + void* glyphs; +} psf_font_t; + +psf_font_t* load_font(const char* path); +void free_font(psf_font_t* font); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/memory.c b/RockOS/kernel/lib/memory.c new file mode 100644 index 0000000..8a19e4c --- /dev/null +++ b/RockOS/kernel/lib/memory.c @@ -0,0 +1,141 @@ +#include "lib/memory.h" +#include "memory/mm.h" + +#define KHEAP_START 0xE0000000 + +typedef struct __attribute__((packed)) { + size_t size; + uint8_t free; + void* next_blk; +} alloc_header_t; + +void memcpy(const void* src, void* dst, size_t sz) { + for (size_t i = 0; i < sz; i++) { + ((uint8_t*)dst)[i] = ((uint8_t*)src)[i]; + } +} + +void memset(uint8_t* dst, uint8_t val, size_t sz) { + for (size_t i = 0; i < sz; i++) { + ((uint8_t*)dst)[i] = val; + } +} + +int strcmp(const char* s1, const char* s2) { + while (*s1 && (*s1 == *s2)) { + s1++; + s2++; + } + return *(const uint8_t*)s1 - *(const uint8_t*)s2; +} + +int strlen(const char* str) { + int len = 0; + while(*str != 0) { + str++; + len++; + } + return len; +} + +int strncmp(const char *s1, const char *s2, size_t n) { + // If n is 0, we don't compare anything and strings are "equal" + while (n > 0) { + // If characters don't match, or we hit the null-terminator of s1 + if (*s1 != *s2) { + return *(unsigned char *)s1 - *(unsigned char *)s2; + } + + // If we reached the end of the strings simultaneously + if (*s1 == '\0') { + break; + } + + s1++; + s2++; + n--; + } + return 0; +} + +char* strcpy(char* dest, const char* src) { + char* saved_dest = dest; + + while ((*dest++ = *src++) != '\0') {} + + return saved_dest; +} + +static void* kernel_heap_start = (void*)KHEAP_START; +static void* kernel_heap_end = (void*)KHEAP_START; +alloc_header_t* blk_list = NULL; + +void kgrow(size_t pages) { + for (size_t p = 0; p < pages; p++) { + void* frame = p_alloc_frame(); + map_page((uint32_t)kernel_heap_end, (uint32_t)frame, PAGE_PRESENT | PAGE_WRITABLE); + kernel_heap_end = (void*)((uint32_t)kernel_heap_end + PAGE_SIZE); + } +} + +#define ALIGNMENT 4 +#define ALIGN(size) (((size) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1)) +void* kalloc(size_t sz) { + sz = ALIGN(sz); + + if (kernel_heap_end == kernel_heap_start) { + // probaably not great, but if we don't have a heap yet, allocate the first (or only) frame requested. + // Then initialize the first block header for the allocator + kgrow(4); + + blk_list = (alloc_header_t*)kernel_heap_start; + blk_list->size = ((uint32_t)kernel_heap_end - (uint32_t)kernel_heap_start) - sizeof(alloc_header_t); + blk_list->free = 1; + blk_list->next_blk = NULL; + } + + alloc_header_t* curr = blk_list; + alloc_header_t* prev = NULL; + + while (curr != NULL) { + if (curr->free && curr->size >= sz) { + if (curr->size >= sz + sizeof(alloc_header_t) + ALIGNMENT) { + alloc_header_t* new_blk = (alloc_header_t*)((uint32_t)curr + sizeof(alloc_header_t) + sz); + + new_blk->size = curr->size - sz - sizeof(alloc_header_t); + new_blk->free = 1; + new_blk->next_blk = curr->next_blk; + + curr->size = sz; + curr->next_blk = new_blk; + } + + curr->free = 0; + return (void*)((uint32_t)curr + sizeof(alloc_header_t)); + } + prev = curr; + curr = curr->next_blk; + } + + // no more space, grow!! + size_t required_space = sz + sizeof(alloc_header_t); + size_t pages_to_grow = (required_space + PAGE_SIZE - 1) / PAGE_SIZE; + + alloc_header_t* new_heap_blk = (alloc_header_t*)kernel_heap_end; + + kgrow(pages_to_grow); + + new_heap_blk->size = (pages_to_grow * PAGE_SIZE) - sizeof(alloc_header_t); + new_heap_blk->free = 1; + new_heap_blk->next_blk = NULL; + + if (prev != NULL) { + prev->next_blk = new_heap_blk; + } + + return kalloc(sz); +} + +void kfree(void* ptr) { + +} \ No newline at end of file diff --git a/RockOS/kernel/lib/memory.h b/RockOS/kernel/lib/memory.h new file mode 100644 index 0000000..14bc51b --- /dev/null +++ b/RockOS/kernel/lib/memory.h @@ -0,0 +1,19 @@ +#ifndef KMEMORY_H +#define KMEMORY_H + +#include +#include + +void memcpy(const void* src, void* dst, size_t sz); +void memset(uint8_t* dst, uint8_t val, size_t sz); + +int strcmp(const char *s1, const char *s2); +int strncmp(const char *s1, const char *s2, size_t n); +int strlen(const char* str); +char* strcpy(char* dest, const char* src); + +void kgrow(size_t pages); +void* kalloc(size_t sz); +void kfree(void* ptr); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/print.c b/RockOS/kernel/lib/print.c new file mode 100644 index 0000000..1e2d0f8 --- /dev/null +++ b/RockOS/kernel/lib/print.c @@ -0,0 +1,106 @@ +#include "print.h" +#include "tasks.h" + +#include + +#include + +spinlock_t kwrite_lock = {0}; + +extern psf_font_t* kfont; + +static char* hex_chars = "0123456789abcdef"; + +static void kprint(const char *str) { + while (*str) { + console_putchar(*str); + str++; + } +} + +static void kputd(int d) { + if (d == 0) { + console_putchar('0'); + return; + } + char buffer[12]; + int i = 0; + while (d > 0) { + buffer[i++] = '0' + (d % 10); + d /= 10; + } + for (int j = i - 1; j >= 0; j--) { + console_putchar(buffer[j]); + } +} + +static void kputx(unsigned int x) { + if (x == 0) { + console_putchar('0'); + return; + } + char buffer[8]; + + int i = 0; + while (x > 0) { + buffer[i++] = hex_chars[x & 0xF]; + x >>= 4; + } + for (int j = i - 1; j >= 0; j--) { + console_putchar(buffer[j]); + } +} + +void kputc(const char c) { + spin_lock(&kwrite_lock); + console_putchar(c); + spin_unlock(&kwrite_lock); +} + +void kprintf(const char* fmt, ...) { + spin_lock(&kwrite_lock); + va_list args; + va_start(args, fmt); + + while (*fmt) { + if (*fmt == '%') { + fmt++; + switch (*fmt) { + case 's': { + const char* str = va_arg(args, const char*); + kprint(str); + break; + } + case 'd': { + int d = va_arg(args, int); + kputd(d); + break; + } + case 'x': { + unsigned int x = va_arg(args, unsigned int); + kputx(x); + break; + } + case 'c': { + int c = va_arg(args, int); + console_putchar((char)c); + break; + } + case '%': + console_putchar('%'); + break; + default: + console_putchar('%'); + console_putchar(*fmt); + break; + } + fmt++; + } else { + console_putchar(*fmt); + fmt++; + } + } + + va_end(args); + spin_unlock(&kwrite_lock); +} \ No newline at end of file diff --git a/RockOS/kernel/lib/print.h b/RockOS/kernel/lib/print.h new file mode 100644 index 0000000..ae76fca --- /dev/null +++ b/RockOS/kernel/lib/print.h @@ -0,0 +1,7 @@ +#ifndef KLIBPRINT_H +#define KLIBPRINT_H + +void kputc(const char c); +void kprintf(const char* fmt, ...); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/ringbuf.c b/RockOS/kernel/lib/ringbuf.c new file mode 100644 index 0000000..e537ccc --- /dev/null +++ b/RockOS/kernel/lib/ringbuf.c @@ -0,0 +1,34 @@ +#include + +void ring_buf_init(ring_buf_t* rb) { + rb->head = 0; + rb->tail = 0; +} + +int ring_buf_is_empty(ring_buf_t* rb) { + return rb->head == rb->tail; +} + +int ring_buf_is_full(ring_buf_t* rb) { + return ((rb->head + 1) % PTY_BUFFER_SIZE) == rb->tail; +} + +int ring_buf_write(ring_buf_t *buf, char c) { + if (ring_buf_is_full(buf)) { + return -1; + } + + buf->data[buf->head] = c; + buf->head = (buf->head + 1) % PTY_BUFFER_SIZE; + return 0; +} + +int ring_buf_read(ring_buf_t *buf, char *c) { + if (ring_buf_is_empty(buf)) { + return -1; + } + + *c = buf->data[buf->tail]; + buf->tail = (buf->tail + 1) % PTY_BUFFER_SIZE; + return 0; +} \ No newline at end of file diff --git a/RockOS/kernel/lib/ringbuf.h b/RockOS/kernel/lib/ringbuf.h new file mode 100644 index 0000000..5c23511 --- /dev/null +++ b/RockOS/kernel/lib/ringbuf.h @@ -0,0 +1,20 @@ +#ifndef KRINGBUF_H +#define KRINGBUF_H + +#include + +#define PTY_BUFFER_SIZE 1024 + +typedef struct { + char data[PTY_BUFFER_SIZE]; + size_t head; + size_t tail; +} ring_buf_t; + +void ring_buf_init(ring_buf_t* rb); +int ring_buf_is_empty(ring_buf_t* rb); +int ring_buf_is_full(ring_buf_t* rb); +int ring_buf_write(ring_buf_t *buf, char c); +int ring_buf_read(ring_buf_t *buf, char *c); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/string.h b/RockOS/kernel/lib/string.h new file mode 100644 index 0000000..b9ac67c --- /dev/null +++ b/RockOS/kernel/lib/string.h @@ -0,0 +1,6 @@ +#ifndef KSTRING_H +#define KSTRING_H + +char* strtok_r(char *s, const char *delim, char **saveptr); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/lib/strtok.c b/RockOS/kernel/lib/strtok.c new file mode 100644 index 0000000..5269f8f --- /dev/null +++ b/RockOS/kernel/lib/strtok.c @@ -0,0 +1,65 @@ +#include + +#include + +static size_t kernel_strspn(const char *s, const char *accept) { + const char *p; + const char *a; + size_t count = 0; + + for (p = s; *p != '\0'; ++p) { + for (a = accept; *a != '\0'; ++a) { + if (*p == *a) + break; + } + if (*a == '\0') + return count; + ++count; + } + return count; +} + +static char *kernel_strpbrk(const char *s, const char *accept) { + while (*s != '\0') { + const char *a = accept; + while (*a != '\0') { + if (*s == *a) { + return (char *)s; + } + a++; + } + s++; + } + return NULL; +} + +char *strtok_r(char *str, const char *delim, char **saveptr) { + char *token; + + if (str == NULL) { + str = *saveptr; + } + + if (str == NULL || *str == '\0') { + *saveptr = NULL; + return NULL; + } + + str += kernel_strspn(str, delim); + if (*str == '\0') { + *saveptr = NULL; + return NULL; + } + + token = str; + str = kernel_strpbrk(token, delim); + + if (str == NULL) { + *saveptr = NULL; + } else { + *str = '\0'; + *saveptr = str + 1; + } + + return token; +} \ No newline at end of file diff --git a/RockOS/kernel/lib/tasks.c b/RockOS/kernel/lib/tasks.c new file mode 100644 index 0000000..64f2751 --- /dev/null +++ b/RockOS/kernel/lib/tasks.c @@ -0,0 +1,11 @@ +#include + +void spin_lock(spinlock_t *lock) { + while (__sync_lock_test_and_set(&lock->locked, 1)) { + asm volatile("pause"); + } +} + +void spin_unlock(spinlock_t *lock) { + __sync_lock_release(&lock->locked); +} \ No newline at end of file diff --git a/RockOS/kernel/lib/tasks.h b/RockOS/kernel/lib/tasks.h new file mode 100644 index 0000000..b6e67a4 --- /dev/null +++ b/RockOS/kernel/lib/tasks.h @@ -0,0 +1,13 @@ +#ifndef KTASKS_H +#define KTASKS_H + +#include + +typedef struct { + volatile uint32_t locked; +} spinlock_t; + +void spin_lock(spinlock_t *lock); +void spin_unlock(spinlock_t *lock); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/linker.ld b/RockOS/kernel/linker.ld new file mode 100644 index 0000000..d1565a2 --- /dev/null +++ b/RockOS/kernel/linker.ld @@ -0,0 +1,35 @@ +ENTRY(_start) + +KERNEL_VMA = 0xC0000000; +KERNEL_LMA = 0x00200000; + +SECTIONS +{ + . = KERNEL_VMA + KERNEL_LMA; + __kernel_start = .; + .text : AT(ADDR(.text) - KERNEL_VMA) + { + *(.multiboot) + *(.text*) + } + + .rodata : AT(ADDR(.rodata) - KERNEL_VMA) + { + *(.rodata*) + } + + .data : AT(ADDR(.data) - KERNEL_VMA) + { + *(.data*) + } + + .bss : AT(ADDR(.bss) - KERNEL_VMA) + { + __bss_start = .; + *(.bss*) + *(COMMON) + __bss_end = .; + } + + __kernel_end = .; +} \ No newline at end of file diff --git a/RockOS/kernel/memory/mm.S b/RockOS/kernel/memory/mm.S new file mode 100644 index 0000000..2de6d53 --- /dev/null +++ b/RockOS/kernel/memory/mm.S @@ -0,0 +1,25 @@ +.code32 +.global flush_tlb +flush_tlb: + mov %cr3, %eax + mov %eax, %cr3 + ret + +.global disable_pae +disable_pae: + mov %cr4, %edx + and $0xFFFFFFEF, %edx + mov %edx, %cr4 + ret + +.global load_pd +load_pd: + push %ebp + mov %esp, %ebp + mov 8(%ebp), %eax + mov %eax, %cr3 + lea flush, %ecx + jmp *%ecx +flush: + leave + ret \ No newline at end of file diff --git a/RockOS/kernel/memory/mm.c b/RockOS/kernel/memory/mm.c new file mode 100644 index 0000000..973821b --- /dev/null +++ b/RockOS/kernel/memory/mm.c @@ -0,0 +1,274 @@ +#include "memory/mm.h" +#include "multiboot.h" + +#include +#include + +extern uint8_t __kernel_start; +extern uint8_t __kernel_end; + +extern uint32_t page_directory[1024]; + +static uint32_t max_address = 0; +static uint32_t total_available_memory = 0; +static uint8_t memory_bitmap[BITMAP_SIZE]; + +static void mark_free(uint32_t addr) { + uint32_t page_index = addr / PAGE_SIZE; + uint32_t byte_index = page_index / 8; + uint32_t bit_index = page_index % 8; + memory_bitmap[byte_index] &= ~(1 << bit_index); +} + +static void mark_used(uint32_t addr) { + uint32_t page_index = addr / PAGE_SIZE; + uint32_t byte_index = page_index / 8; + uint32_t bit_index = page_index % 8; + memory_bitmap[byte_index] |= (1 << bit_index); +} + +static uint32_t align(uint32_t addr, uint32_t len, uint32_t* usable_start, uint32_t* usable_end) { + uint32_t start = addr; + uint32_t end = addr + len; + *usable_start = (start + 4095) & ~0xFFF; + *usable_end = end & ~0xFFF; + return *usable_end - *usable_start; +} + +static void parse_multiboot_mmap(void* base, uint32_t limit) { + multiboot_mmap_entry* entry = (multiboot_mmap_entry*)base; + void* end = (void*)((uint32_t)base + limit); + total_available_memory = 0; + while ((void*)entry < end) { + uint32_t entry_size = entry->size + sizeof(entry->size); + if (entry->type == 1) { + uint32_t region_start = (uint32_t)(entry->addr); + uint32_t region_end = (uint32_t)(entry->addr + entry->len); + if (region_end > max_address) { + max_address = region_end; + } + + uint32_t usable_start, usable_end, usable_size; + usable_size = align(region_start, entry->len, &usable_start, &usable_end); + if (usable_size <= 4096) { + entry = (multiboot_mmap_entry*)((uint32_t)entry + entry_size); + continue; + } + + uint32_t kernel_phys_start = (uint32_t)&__kernel_start - 0xC0000000; + uint32_t kernel_phys_end = (uint32_t)&__kernel_end - 0xC0000000; + for (uint32_t addr = usable_start; addr < usable_end; addr += 4096) { + if (addr <= kernel_phys_end && addr >= kernel_phys_start) { + continue; + } + + if (addr >= (uint32_t)entry && addr <= (uint32_t)entry + entry_size) { + continue; + } + + if (addr <= 0x200000) { + continue; + } + + total_available_memory += 4096; + + mark_free(addr); + } + } + entry = (multiboot_mmap_entry*)((uint32_t)entry + entry_size); + } +} + +void* p_alloc_frame() { + for (uint32_t i = 0; i < BITMAP_SIZE; i++) { + uint8_t b = memory_bitmap[i]; + if (b == 0xFF) { + continue; + } + + for (int bit = 0; bit < 8; bit++) { + if ((b & (1 << bit)) == 0) { + uint32_t page_addr = (i * 8 + bit) * PAGE_SIZE; + mark_used(page_addr); + return (void*)page_addr; + } + } + } + + return 0; +} + +void p_free_frame(void* addr) { + mark_free((uint32_t)addr); +} + +// MODIFIES THE ACTIVE PAGE TABLE AT THE PHYSICAL ADDRESS LOADED INTO CR3 VIA RECURSIVE MAPPING +void map_page(uint32_t vaddr, uint32_t paddr, uint32_t flags) { + uint32_t pde_entry = vaddr >> 22; + uint32_t pte_entry = (vaddr >> 12) & 0x3FF; + uint32_t* pd = (uint32_t*)CUR_PAGE_DIRECTORY; + uint32_t* tablev = (uint32_t*)(CUR_PAGE_TABLES + (pde_entry * PAGE_SIZE)); + + if ((pd[pde_entry] & PAGE_PRESENT) == 0) { + uint32_t new_table = (uint32_t)p_alloc_frame(); + pd[pde_entry] = new_table | flags; + flush_tlb(); + for (int i = 0; i < 1024; i++) { + tablev[i] = 0; + } + } + + tablev[pte_entry] = paddr | flags; + flush_tlb(); +} + +void unmap_page(uint32_t vaddr) { + uint32_t pde_entry = vaddr >> 22; + uint32_t pte_entry = (vaddr >> 12) & 0x3FF; + uint32_t* tablev = (uint32_t*)(CUR_PAGE_TABLES + (pde_entry * PAGE_SIZE)); + tablev[pte_entry] = 0; + flush_tlb(); +} + +int is_cow(uint32_t vaddr) { + uint32_t pde_entry = vaddr >> 22; + uint32_t pte_entry = (vaddr >> 12) & 0x3FF; + uint32_t* pd = (uint32_t*)CUR_PAGE_DIRECTORY; + uint32_t* tablev = (uint32_t*)(CUR_PAGE_TABLES + (pde_entry * PAGE_SIZE)); + + if (!(pd[pde_entry] & PAGE_PRESENT)) { + return 0; + } + + if (tablev[pte_entry] & PAGE_WRITABLE) { + return 0; + } + + if (!(tablev[pte_entry] & PAGE_COW)) { + return 0; + } + + return 1; +} + +void init_pmm(void* mmap_base, uint32_t mmap_limit) { + for (int i = 0; i < BITMAP_SIZE; i++) { + memory_bitmap[i] = 0xFF; + } + + if (mmap_base != NULL && mmap_limit > 0) { + parse_multiboot_mmap(mmap_base, mmap_limit); + } +} + +void init_page_tables() { + uint32_t kernel_size = (uint32_t)&__kernel_end - (uint32_t)&__kernel_start; + uint32_t num_pages = kernel_size / PAGE_SIZE + 1; + uint32_t num_page_tables = (num_pages + 1023) / 1024; + for (uint32_t table = 0; table < num_page_tables; table++) { + uint32_t* kernel_table = p_alloc_frame(); + for (int i = 0; i < 1024; i++) { + kernel_table[i] = (i * PAGE_SIZE) | 0x3; + } + page_directory[768 + table] = (uint32_t)(kernel_table) | 0x3; + } + page_directory[0] = 0; + disable_pae(); + flush_tlb(); +} + +uint32_t total_free_memory() { + return total_available_memory; +} + +void* create_new_pd() { + uint32_t task_pd_addr = (uint32_t)p_alloc_frame(); + if (task_pd_addr == 0) { + return NULL; // outta mem + } + + map_page(TEMP_TASKPD_VADDR, task_pd_addr, PAGE_PRESENT | PAGE_WRITABLE); + + uint32_t* task_pd = (uint32_t*)TEMP_TASKPD_VADDR; + uint32_t* parent_pd = (uint32_t*)CUR_PAGE_DIRECTORY; + + for(int i = 768; i < 1023; i++) { + task_pd[i] = parent_pd[i]; + } + + task_pd[1023] = task_pd_addr | PAGE_PRESENT | PAGE_WRITABLE; + + for(int i = 0; i < 768; i++) { + task_pd[i] = 0; + } + + unmap_page(TEMP_TASKPD_VADDR); + + return (void*)task_pd_addr; +} + +void* clone_current_pd() { + uint32_t task_pd_addr = (uint32_t)p_alloc_frame(); + if (task_pd_addr == 0) { + return NULL; // outta mem + } + + map_page(TEMP_TASKPD_VADDR, task_pd_addr, PAGE_PRESENT | PAGE_WRITABLE); + + uint32_t* task_pd = (uint32_t*)TEMP_TASKPD_VADDR; + uint32_t* parent_pd = (uint32_t*)CUR_PAGE_DIRECTORY; + + for(int i = 768; i < 1023; i++) { + task_pd[i] = parent_pd[i]; + } + + task_pd[1023] = task_pd_addr | PAGE_PRESENT | PAGE_WRITABLE; + + for(int i = 0; i < 768; i++) { + task_pd[i] = 0; + } + + for (int i = 0; i < 768; i++) { + uint32_t pde = parent_pd[i]; + if (!(pde & PAGE_PRESENT)) continue; + + uint32_t task_pt = (uint32_t)p_alloc_frame(); + task_pd[i] = task_pt | (pde & 0xFFF); + + uint32_t parent_pt = pde & 0xFFFFF000; + + map_page(TEMP_PT_DST, task_pt, PAGE_PRESENT | PAGE_WRITABLE); + map_page(TEMP_PT_SRC, parent_pt, PAGE_PRESENT | PAGE_WRITABLE); + + uint32_t* pt_dst = (uint32_t*)TEMP_PT_DST; + uint32_t* pt_src = (uint32_t*)TEMP_PT_SRC; + + for(int j = 0; j < 1024; j++) { + uint32_t pte_src = pt_src[j]; + if (!(pte_src & PAGE_PRESENT)) continue; + + if (!(pte_src & PAGE_WRITABLE)) { + pt_dst[j] = pt_src[j]; + continue; + } + + // the src page is writable, mark the pte src as read only and COW, then copy to dst pte + pt_src[j] &= ~(PAGE_WRITABLE); + pt_src[j] |= PAGE_COW; + flush_tlb(); // huge performance hit here, and probably everywhere else too where we aren't switching cr3s + + pt_dst[j] = pt_src[j]; + } + + unmap_page(TEMP_PT_DST); + unmap_page(TEMP_PT_SRC); + } + + unmap_page(TEMP_TASKPD_VADDR); + + return (void*)task_pd_addr; +} + +void clear_current_pd() { + +} \ No newline at end of file diff --git a/RockOS/kernel/memory/mm.h b/RockOS/kernel/memory/mm.h new file mode 100644 index 0000000..0877456 --- /dev/null +++ b/RockOS/kernel/memory/mm.h @@ -0,0 +1,49 @@ +#ifndef KMM_H +#define KMM_H + +#include + +#define PAGE_PRESENT (1 << 0) +#define PAGE_WRITABLE (1 << 1) +#define PAGE_USER (1 << 2) +#define PAGE_COW (1 << 9) + +#define TEMP_KERNPD_VADDR 0xDFF90000 +#define TEMP_TASKPD_VADDR 0xDFFA0000 +#define TEMP_PT_SRC 0xDFFB0000 +#define TEMP_PT_DST 0xDFFC0000 + +#define PAGE_SIZE 4096 + +#define MAX_RAM 0xFFFFFFFF // 4GB +#define BITMAP_SIZE ((MAX_RAM / PAGE_SIZE) / 8) + +#define CUR_PAGE_DIRECTORY 0xFFFFF000 +#define CUR_PAGE_TABLES 0xFFC00000 + +typedef struct __attribute__((packed)) { + uint32_t addr; +} mem_page_t; + +void init_pmm(void* mmap_base, uint32_t mmap_limit); +void init_page_tables(); + +void* p_alloc_frame(); + +uint32_t total_free_memory(); + +void* create_new_pd(); +void* clone_current_pd(); +void clear_current_pd(); + +int is_cow(uint32_t vaddr); + +void map_page(uint32_t vaddr, uint32_t paddr, uint32_t flags); +void unmap_page(uint32_t vaddr); + +void load_pd(void* paddr); + +void flush_tlb(); +void disable_pae(); + +#endif diff --git a/RockOS/kernel/multiboot.c b/RockOS/kernel/multiboot.c new file mode 100644 index 0000000..bf0db44 --- /dev/null +++ b/RockOS/kernel/multiboot.c @@ -0,0 +1,3 @@ +#include "multiboot.h" + +multiboot_module_t multiboot_module_info_table[32]; \ No newline at end of file diff --git a/RockOS/kernel/multiboot.h b/RockOS/kernel/multiboot.h new file mode 100644 index 0000000..da4f5f4 --- /dev/null +++ b/RockOS/kernel/multiboot.h @@ -0,0 +1,61 @@ +#ifndef KMULTIBOOT_H +#define KMULTIBOOT_H + +#include + +typedef struct { + uint32_t flags; + uint32_t mem_lower; + uint32_t mem_upper; + uint32_t boot_device; + uint32_t cmdline; + uint32_t mods_count; + uint32_t mods_addr; + uint32_t num; + uint32_t size; + uint32_t addr; + uint32_t shndx; + uint32_t mmap_length; + uint32_t mmap_addr; + uint32_t drives_length; + uint32_t drives_addr; + uint32_t config_table; + uint32_t boot_loader_name; + uint32_t apm_table; + uint32_t vbe_control_info; + uint32_t vbe_mode_info; + uint16_t vbe_mode; + uint16_t vbe_interface_seg; + uint16_t vbe_interface_off; + uint16_t vbe_interface_len; + uint64_t framebuffer_addr; + uint32_t framebuffer_pitch; + uint32_t framebuffer_width; + uint32_t framebuffer_height; + uint8_t framebuffer_bpp; + uint8_t framebuffer_type; + uint8_t red_field_position; + uint8_t red_mask_size; + uint8_t green_field_position; + uint8_t green_mask_size; + uint8_t blue_field_position; + uint8_t blue_mask_size; +} __attribute__((packed)) multiboot_info; + +typedef struct { + uint32_t size; + uint64_t addr; + uint64_t len; + uint32_t type; +} __attribute__((packed)) multiboot_mmap_entry; + +typedef struct { + uint32_t mod_start; // Physical start address of user.elf in memory + uint32_t mod_end; // Physical end address of user.elf + uint32_t cmdline; // Pointer to a string (e.g., "/boot/user.elf") + uint32_t pad; +} __attribute__((packed)) multiboot_module_t; + +extern multiboot_module_t multiboot_module_info_table[32]; + +#endif \ No newline at end of file diff --git a/RockOS/kernel/process.h b/RockOS/kernel/process.h new file mode 100644 index 0000000..b815226 --- /dev/null +++ b/RockOS/kernel/process.h @@ -0,0 +1,40 @@ +#ifndef KPROCESS_H +#define KPROCESS_H + +#include + +#include + +#define MAX_PROCESS_FDS 32 + +typedef enum { + STATE_READY = 1, + STATE_SLEEPING = 2, + STATE_BLOCKED = 3, + STATE_DEAD = 4, + STATE_ZOMBIE = 5, +} process_state_t; + +typedef enum { + PROCESS_FLAG_NONE = 0, + PROCESS_FLAG_KERNEL = 1 << 0, + PROCESS_FLAG_USER = 1 << 1 +} process_flags_t; + +struct process_t; +typedef struct process_t { + uint32_t pid; + uint32_t esp; + uint32_t kstack_top; + uint32_t cr3; + process_state_t state; + uint32_t sleep; + uint32_t heap_end; + uint32_t flags; + file_t* fd_table[MAX_PROCESS_FDS]; + struct process_t* sched_next; + struct process_t* waiting; + int exit_status; +} __attribute__((packed)) process_t; + +#endif \ No newline at end of file diff --git a/RockOS/kernel/scheduler.S b/RockOS/kernel/scheduler.S new file mode 100644 index 0000000..18f1e9a --- /dev/null +++ b/RockOS/kernel/scheduler.S @@ -0,0 +1,36 @@ + + +.code32 +.global yield +.extern schedule_next_task +yield: # void yield() + cli + + popl %ecx + + pushfl // EFLAGS + pushl %cs // CS + pushl %ecx // EIP + + pushal + call send_eoi_master + + xor %eax, %eax + mov %ds, %ax + pushl %eax + + mov $0x10, %ax + mov %ax, %ds + mov %ax, %es + + pushl %esp + call switch_context + movl %eax, %esp + + popl %eax + mov %ax, %ds + mov %ax, %es + + popal + sti + iret \ No newline at end of file diff --git a/RockOS/kernel/scheduler.c b/RockOS/kernel/scheduler.c new file mode 100644 index 0000000..25bde99 --- /dev/null +++ b/RockOS/kernel/scheduler.c @@ -0,0 +1,198 @@ +#include +#include +#include + +#include + +#include + +#include "common.h" +#include "process.h" +#include "scheduler.h" +#include "gdt.h" + +static process_t* process_table = NULL; +static process_t* current_process = NULL; +static process_t* idle_task = NULL; + +static int total_processes = 0; + +void lock_scheduler() { + disable_interrupts(); +} + +void unlock_scheduler() { + enable_interrupts(); +} + +uint32_t switch_context(uint32_t current_esp) { + current_process->esp = current_esp; + + process_t* next_process = current_process->sched_next; + int found_ready = 0; + while (next_process != NULL) { + if (next_process != idle_task && next_process->state == STATE_READY) { + found_ready = 1; + break; + } + + if (next_process == current_process) { + break; + } + + next_process = (process_t*)next_process->sched_next; + } + + if (!found_ready) { + if (current_process && current_process->state == STATE_READY) { + next_process = current_process; + } else { + next_process = idle_task; + } + } + + current_process = next_process; + + uint32_t current_cr3 = fetch_cr3(); + if (current_cr3 != current_process->cr3) { + load_pd((void*)current_process->cr3); + flush_tlb(); + } + + if (current_process->flags & PROCESS_FLAG_USER) { + tss.esp0 = current_process->kstack_top; + } + + + + return current_process->esp; +} + +void init_scheduler() { + process_t* root = kalloc(sizeof(process_t)); + root->pid = 0; + root->esp = 0; + root->cr3 = fetch_cr3(); + root->state = STATE_READY; + root->sleep = 0; + root->flags = PROCESS_FLAG_KERNEL; + root->sched_next = NULL; + + current_process = root; + idle_task = root; + process_table = root; + + total_processes = 1; +} + +void init_task ( + process_t* process, + uint32_t entry_point, + uint32_t cr3, + int user, + uint32_t u_esp +) { + process->pid = get_next_pid(); + process->cr3 = cr3; + process->state = STATE_READY; + process->sleep = 0; + process->flags = user ? PROCESS_FLAG_USER : PROCESS_FLAG_KERNEL; + total_processes++; + + if (process->kstack_top != 0) { + kfree((void*)process->kstack_top); + } + + void* kstack_bottom = kalloc(PAGE_SIZE); + uint32_t kstack_top = (uint32_t)kstack_bottom + PAGE_SIZE; + process->kstack_top = kstack_top; + + uint32_t* esp = (uint32_t*)kstack_top; + if (user) { + *(--esp) = 0x23; // User Data Segment (SS) with RPL 3 (0x20 | 3) + *(--esp) = u_esp; // User Stack Pointer (ESP) - location mapped in user space + *(--esp) = 0x202; // EFLAGS (Interrupts enabled) + *(--esp) = 0x1B; // User Code Segment (CS) with RPL 3 (0x18 | 3) + *(--esp) = entry_point; // EIP + } else { + // IRET values for Ring 0 + *(--esp) = 0x202; // EFLAGS + *(--esp) = 0x08; // Kernel Code Segment (CS) + *(--esp) = entry_point; // EIP + } + + *(--esp) = 0; // EAX + *(--esp) = 0; // ECX + *(--esp) = 0; // EDX + *(--esp) = 0; // EBX + *(--esp) = 0; // ESP + *(--esp) = 0; // EBP + *(--esp) = 0; // ESI + *(--esp) = 0; // EDI + + if (user) { + *(--esp) = 0x23; // User Data Segment Selector (RPL 3) + } else { + *(--esp) = 0x10; // Kernel Data Segment Selector (RPL 0) + } + + process->esp = (uint32_t)esp; +} + +int get_next_pid() { + int pid = total_processes; + total_processes++; + return pid; +} + +void add_task(process_t* task) { + if (!task) { + return; + } + + if (process_table->sched_next == NULL) { + process_table->sched_next = task; + task->sched_next = process_table; + return; + } + + process_t* curr = process_table; + while (curr->sched_next != process_table) { + curr = curr->sched_next; + } + + curr->sched_next = task; + task->sched_next = process_table; +} + +process_t* current_task() { + process_t* rtn = current_process; + return rtn; +} + +void sleep(uint32_t ms) { + if (ms == 0) return; + current_process->sleep = ms; + current_process->state = STATE_SLEEPING; + yield(); +} + +void exit() { + current_process->state = STATE_DEAD; + yield(); // yield forever +} + +void wake(process_t* task) { + if (task->state == STATE_SLEEPING || task->state == STATE_BLOCKED) { + task->state = STATE_READY; + } +} + +process_t* get_task_by_pid(uint32_t pid) { + process_t* cur = process_table; + while (cur) { + if (cur->pid == pid) break; + cur = cur->sched_next; + } + return cur; +} \ No newline at end of file diff --git a/RockOS/kernel/scheduler.h b/RockOS/kernel/scheduler.h new file mode 100644 index 0000000..dc76995 --- /dev/null +++ b/RockOS/kernel/scheduler.h @@ -0,0 +1,24 @@ +#ifndef KSCHEDULER_H +#define KSCHEDULER_H + +#include "process.h" +#include + +void lock_scheduler(); +void unlock_scheduler(); + +void init_scheduler(); +void init_task(process_t* process, uint32_t entry_point, uint32_t cr3, int user, uint32_t u_esp); + +process_t* current_task(); +process_t* get_task_by_pid(uint32_t pid); + +int get_next_pid(); +void add_task(process_t* task); + +void sleep(uint32_t ms); +void yield(); +void exit(); +void wake(process_t* task); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/syscall.S b/RockOS/kernel/syscall.S new file mode 100644 index 0000000..3663c5b --- /dev/null +++ b/RockOS/kernel/syscall.S @@ -0,0 +1,19 @@ +.code32 +.global syscall_handler +.extern syscall +syscall_handler: + cli + + pushal + push %ds + + mov $0x10, %ax + mov %ax, %ds + + push %esp + call syscall + add $4, %esp + + pop %ds + popal + iret \ No newline at end of file diff --git a/RockOS/kernel/syscall.c b/RockOS/kernel/syscall.c new file mode 100644 index 0000000..75f497f --- /dev/null +++ b/RockOS/kernel/syscall.c @@ -0,0 +1,262 @@ +#include +#include + +#include "lib/memory.h" +#include "lib/ringbuf.h" + +#include "memory/mm.h" + +#include "process.h" +#include "scheduler.h" +#include "vfs.h" +#include "elf.h" + +#include +#include + +#include +#include + +typedef struct registers { + uint32_t ds; // push %ds + uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; // pushal + uint32_t eip, cs, eflags, useresp, ss; // pushed by cpu +} __attribute__((packed)) registers_t; + +static int32_t sys_exit(int status) { + process_t* task = current_task(); + task->state = STATE_ZOMBIE; + task->exit_status = status; + if (task->waiting) { + wake(task->waiting); + } + exit(); + return 0; +} + +static int32_t sys_write(int fd, const void* buf, size_t count) { + if (fd < 0 || fd >= MAX_PROCESS_FDS) return -1; + + file_t* f = current_task()->fd_table[fd]; + if (!f || !f->node) return -1; + + uint32_t rd = f->node->write(f->node, f->offset, count, (uint8_t*)buf); + f->offset += rd; + + return rd; +} + +static int32_t sys_read(int fd, void* buf, size_t count) { + if (fd < 0 || fd >= MAX_PROCESS_FDS) return -1; + + file_t* f = current_task()->fd_table[fd]; + if (!f || !f->node) return -1; + + uint32_t rd = f->node->read(f->node, f->offset, count, (uint8_t*)buf); + f->offset += rd; + + return rd; +} + +static int32_t sys_open(const char* filename, int flags) { + return vfs_open(filename, flags); +} + +static int32_t sys_close(int fd) { + process_t* task = current_task(); + task->fd_table[fd] = NULL; + return 1; +} + +static int32_t sys_brk(uint32_t new_break) { + process_t* current = current_task(); + + if (new_break == 0) { + return current->heap_end; + } + + if (new_break < current->heap_end) { + current->heap_end = new_break; + return current->heap_end; + } + + uint32_t page_start = (current->heap_end + 4095) & ~4095; + uint32_t page_end = (new_break + 4095) & ~4095; + + for (uint32_t addr = page_start; addr < page_end; addr += 4096) { + // 1. Allocate a physical frame using your PMM (Physical Memory Manager) + void* phys = p_alloc_frame(); + + // 2. Map it into the current page directory using your VMM (Virtual Memory Manager) + map_page(addr, (uint32_t)phys, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); + } + + current->heap_end = new_break; + return current->heap_end; +} + +static int32_t sys_sbrk(int32_t inc) { + process_t* current = current_task(); + + if (inc <= 0) { // can't shrink yet + return current->heap_end; + } + + uint32_t page_start = (current->heap_end + 4095) & ~4095; + current->heap_end += inc; + uint32_t page_end = (current->heap_end + 4095) & ~4095; + + for (uint32_t addr = page_start; addr < page_end; addr += 4096) { + void* phys = p_alloc_frame(); + map_page(addr, (uint32_t)phys, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); + } + + return current->heap_end; +} + +static int32_t sys_pty(int* slave_fd) { + pty_t* pty = (pty_t*)kalloc(sizeof(pty_t)); + ring_buf_init(&pty->master_rb); + ring_buf_init(&pty->slave_rb); + + vfs_node_t* master =(vfs_node_t*)kalloc(sizeof(vfs_node_t)); + master->flags = VFS_CHARDEVICE; + master->size = 0; + master->read = pty_master_read; + master->write = pty_master_write; + master->find = NULL; + master->data = pty; + + vfs_node_t* slave =(vfs_node_t*)kalloc(sizeof(vfs_node_t)); + slave->flags = VFS_CHARDEVICE; + slave->size = 0; + slave->read = pty_slave_read; + slave->write = pty_slave_write; + slave->find = NULL; + slave->data = pty; + + file_t* fmaster = (file_t*)kalloc(sizeof(file_t)); + fmaster->node = master; + fmaster->offset = 0; + fmaster->flags = 0; + + file_t* fslave = (file_t*)kalloc(sizeof(file_t)); + fslave->node = slave; + fslave->offset = 0; + fslave->flags = 0; + + *slave_fd = alloc_fd(fslave); + return alloc_fd(fmaster); +} + +static int32_t sys_fork(registers_t* parent_regs) { + process_t* parent = current_task(); + process_t* child = kalloc(sizeof(process_t)); + if (!child) { + return -1; + } + + child->pid = get_next_pid(); + child->state = STATE_READY; + child->flags = parent->flags; + child->heap_end = parent->heap_end; + child->sleep = 0; + + for (int i = 0; i < MAX_PROCESS_FDS; i++) { + child->fd_table[i] = parent->fd_table[i]; + } + + uint32_t kstack_size = 4096; + void* kstack_alloc = kalloc(kstack_size); + child->kstack_top = (uint32_t)kstack_alloc + kstack_size; + + registers_t* child_regs = (registers_t*)(child->kstack_top - sizeof(registers_t)); + memcpy(parent_regs, child_regs, sizeof(registers_t)); + child_regs->eax = 0; + child->esp = (uint32_t)child_regs; + + uint32_t cr3 = (uint32_t)clone_current_pd(); + child->cr3 = cr3; + + add_task(child); + return child->pid; +} + +static int32_t sys_exec(registers_t* regs, const char* prgm) { + clear_current_pd(); + + uint32_t eip = load_elf_program(prgm); + if (eip == 0) { + return 0; + } + + uint32_t stack_sz = PAGE_SIZE * 16; + uint32_t stack_top = 0xBFFF0000; + uint32_t stack_bottom = stack_top - stack_sz; + for (uint32_t vaddr = stack_bottom; vaddr < stack_top; vaddr += PAGE_SIZE) { + void* phys_frame = p_alloc_frame(); + map_page(vaddr, (uint32_t)phys_frame, PAGE_PRESENT | PAGE_WRITABLE | PAGE_USER); + } + + uint32_t* u_esp = (uint32_t*)stack_top; + *(--u_esp) = 0; // envp = NULL + *(--u_esp) = 0; // argv = NULL + *(--u_esp) = 0; // argc = 0 + + regs->eax = 0; + regs->ecx = 0; + regs->edx = 0; + regs->ebp = 0; + regs->esi = 0; + regs->edi = 0; + regs->eip = eip; + regs->useresp = (uint32_t)u_esp; + + return 0; +} + +static int32_t sys_dup2(int src, int dst) { + process_t* task = current_task(); + task->fd_table[dst] = task->fd_table[src]; + return dst; +} + +static int32_t sys_lseek(int fd, size_t offset, int whence) { + if (fd < 0) return 0; + process_t* task = current_task(); + file_t* file = task->fd_table[fd]; + if (!file) return 0; + file->node->seek(file->node, offset, whence); + return 1; +} + +static int32_t sys_waitpid(int pid, int* exit_status) { + process_t* current = current_task(); + process_t* child = get_task_by_pid(pid); + current->state = STATE_BLOCKED; + child->waiting = current; + yield(); + *exit_status = child->exit_status; + return 1; +} + +void syscall(registers_t* regs) { + int32_t ret; + switch(regs->eax) { + case 1: ret = sys_exit(regs->ebx); break; + case 3: ret = sys_read(regs->ebx, (void*)regs->ecx, regs->edx); break; + case 4: ret = sys_write(regs->ebx, (const void*)regs->ecx, regs->edx); break; + case 5: ret = sys_open((const char*)regs->ebx, regs->ecx); break; + case 6: ret = sys_close(regs->ebx); break; + case 12: ret = sys_brk(regs->ebx); break; + case 13: ret = sys_sbrk(regs->ebx); break; + case 20: ret = sys_pty((int*)regs->ebx); break; + case 21: ret = sys_fork(regs); break; + case 22: ret = sys_exec(regs, (const char*)regs->ebx); break; + case 23: ret = sys_dup2(regs->ebx, regs->ecx); break; + case 24: ret = sys_lseek(regs->ebx, regs->ecx, regs->edx); break; + case 25: ret = sys_waitpid(regs->ebx, (int*)regs->ecx); break; + default: ret = -1; + } + regs->eax = ret; +} \ No newline at end of file diff --git a/RockOS/kernel/syscall.h b/RockOS/kernel/syscall.h new file mode 100644 index 0000000..7d0387f --- /dev/null +++ b/RockOS/kernel/syscall.h @@ -0,0 +1,6 @@ +#ifndef KSYSCALL_H +#define KSYSCALL_H + +void syscall_handler(); + +#endif \ No newline at end of file diff --git a/RockOS/kernel/vfs.c b/RockOS/kernel/vfs.c new file mode 100644 index 0000000..40e6a56 --- /dev/null +++ b/RockOS/kernel/vfs.c @@ -0,0 +1,130 @@ +#include +#include +#include + +#include +#include +#include + +vfs_node_t* root = NULL; + +vfs_node_t* vfs_create_root() { + root = kalloc(sizeof(vfs_node_t)); + memset((uint8_t*)root, 0, sizeof(vfs_node_t)); + + strcpy(root->name, "root"); + + root->flags |= VFS_DIRECTORY; + root->size = 0; + root->find = NULL; + + return root; +} + +void vfs_mount(vfs_node_t* _mnt, vfs_node_t* _fs) { + if (!_fs || !_mnt || !(_mnt->flags & VFS_DIRECTORY)) return; + _mnt->mnt = _fs; +} + +vfs_node_t* vfs_find(const char* path) { + vfs_node_t* current = root; + if (current->mnt) { + current = current->mnt; + } + + char* sav = NULL; + size_t path_sz = strlen(path) + 1; + char* path_cpy = kalloc(path_sz); + memset((uint8_t*)path_cpy, 0, path_sz); + memcpy(path, path_cpy, path_sz); + + char* tkn = strtok_r(path_cpy, "/", &sav); + while (tkn != NULL) { + if (current && current->mnt) { + current = current->mnt; + } + + if (!current || !current->find) { + return NULL; + } + + current = current->find(current, tkn); + + if (current == NULL) { + return NULL; + } + + tkn = strtok_r(NULL, "/", &sav); + if (tkn && !(current->flags & VFS_DIRECTORY)) { + return NULL; + } + } + + kfree(path_cpy); + return current; +} + +vfs_node_t* vfs_mkdir(vfs_node_t* parent, const char* name) { + if (!parent || !name) { + return NULL; + } + + if (strlen(name) == 0) { + return NULL; + } + + return parent->mkdir(parent, name); +} + +int vfs_open(const char* _path, int flags) { + vfs_node_t* file = vfs_find(_path); + if (!file) return -1; + + file_t* f = (file_t*)kalloc(sizeof(file_t)); + f->node = file; + f->offset = 0; + f->flags = flags; + + return alloc_fd(f); +} + +int vfs_read(int fd, void* buf, size_t sz) { + process_t* curr_p = current_task(); + if (fd < 0 || fd >= MAX_PROCESS_FDS || !curr_p->fd_table[fd]->node) { + return -1; + } + + file_t* file = curr_p->fd_table[fd]; + + if (!file->node->read) return -1; + + uint32_t bytes_read = file->node->read(file->node, file->offset, sz, buf); + file->offset += bytes_read; + + return bytes_read; +} + +int vfs_seek(int fd, size_t offset) { + process_t* curr_p = current_task(); + if (fd < 0 || fd >= MAX_PROCESS_FDS || !curr_p->fd_table[fd]->node) { + return 0; + } + + file_t* file = curr_p->fd_table[fd]; + file->offset = offset; + return 1; +} + +int alloc_fd(file_t* f) { + process_t* curr_p = current_task(); + if (!curr_p) return -1; + + for (int i = 0; i < MAX_PROCESS_FDS; i++) { + if (curr_p->fd_table[i] == NULL) { + curr_p->fd_table[i] = f; + return i; + } + } + + return -1; +} \ No newline at end of file diff --git a/RockOS/kernel/vfs.h b/RockOS/kernel/vfs.h new file mode 100644 index 0000000..365e8e7 --- /dev/null +++ b/RockOS/kernel/vfs.h @@ -0,0 +1,60 @@ +#ifndef KVFS_H +#define KVFS_H + +#include +#include + +#define VFS_FILE 0x01 +#define VFS_DIRECTORY 0x02 +#define VFS_CHARDEVICE 0x03 +#define VFS_BLOCKDEVICE 0x04 +#define VFS_PIPE 0x05 + +struct vfs_node; + +typedef uint32_t (*read_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); +typedef uint32_t (*write_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer); +typedef uint32_t (*seek_type_t)(struct vfs_node* node, uint32_t offset, int whence); +typedef struct vfs_node* (*finddir_type_t)(struct vfs_node* node, const char* name); +typedef struct vfs_node* (*mkdir_type_t)(struct vfs_node* node, const char* name); +typedef struct vfs_node* (*create_type_t)(struct vfs_node* node, const char* name); + +typedef struct vfs_node { + char name[128]; + uint32_t flags; // File, directory, device, etc. + uint32_t size; // Size of file in bytes + + struct vfs_node* first_child; + struct vfs_node* next_sibling; + + read_type_t read; + write_type_t write; + finddir_type_t find; + mkdir_type_t mkdir; + create_type_t create; + seek_type_t seek; + + struct vfs_node* mnt; + void* data; +} vfs_node_t; + +typedef struct { + vfs_node_t* node; // The actual CPIO/VFS node + uint32_t offset; // Current read/write cursor position + uint32_t flags; // Permissions (O_RDONLY, etc.) +} file_t; + +vfs_node_t* vfs_create_root(); +vfs_node_t* vfs_mkdir(vfs_node_t* parent, const char* name); + +vfs_node_t* vfs_find(const char* path); + +void vfs_mount(vfs_node_t* _mnt, vfs_node_t* _fs); +int vfs_open(const char* path, int flags); +int vfs_read(int fd, void* buf, size_t sz); + +int vfs_seek(int fd, size_t offset); + +int alloc_fd(file_t* f); + +#endif \ No newline at end of file diff --git a/RockOS/make_img.sh b/RockOS/make_img.sh new file mode 100755 index 0000000..8a211b2 --- /dev/null +++ b/RockOS/make_img.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +mkdir -p initrd +rm -f initrd/bin/*.elf + +mkdir -p initrd/dev +mkdir -p initrd/bin +cp programs/bin/* initrd/bin + +cd initrd +find . -depth -print | cpio -o -H newc > ../initrd.img +cd .. + +cp initrd.img isodir/boot \ No newline at end of file diff --git a/RockOS/makefile b/RockOS/makefile new file mode 100644 index 0000000..d06f6ac --- /dev/null +++ b/RockOS/makefile @@ -0,0 +1,40 @@ +CC = i686-elf-gcc +LD = i686-elf-ld + +OSNAME := rockos + +C_SOURCES := $(shell find kernel -type f -name '*.c') +S_SOURCES := $(shell find kernel -type f -name '*.S') + +OBJECTS := $(patsubst %, obj/%.o, $(C_SOURCES) $(S_SOURCES)) + +CFLAGS := -ffreestanding -O2 -Wall -Wextra -Ikernel +LDFLAGS := -T kernel/linker.ld + +.PHONY: all run clean + +all: $(OSNAME).iso + +$(OSNAME).bin: $(OBJECTS) kernel/linker.ld + $(LD) $(LDFLAGS) -o $@ $(OBJECTS) + +$(OSNAME).iso: $(OSNAME).bin grub.cfg + mkdir -p isodir/boot/grub + cp $(OSNAME).bin isodir/boot/$(OSNAME) + cp grub.cfg isodir/boot/grub/grub.cfg + grub-mkrescue -o $(OSNAME).iso isodir + +obj/%.c.o: %.c + @mkdir -p $(dir $@) + $(CC) -c $< -o $@ $(CFLAGS) + +obj/%.S.o: %.S + @mkdir -p $(dir $@) + $(CC) -c $< -o $@ $(CFLAGS) + +run: $(OSNAME).iso + qemu-system-i386 -cdrom $(OSNAME).iso + +clean: + @echo "Cleaning up build artifacts..." + rm -rf $(OSNAME).iso $(OSNAME).bin obj isodir \ No newline at end of file diff --git a/RockOS/programs/compile_commands.json b/RockOS/programs/compile_commands.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/RockOS/programs/compile_commands.json @@ -0,0 +1 @@ +[] diff --git a/RockOS/programs/lib/rlibc.a b/RockOS/programs/lib/rlibc.a new file mode 100644 index 0000000..d2c5b68 Binary files /dev/null and b/RockOS/programs/lib/rlibc.a differ diff --git a/RockOS/programs/rocksh/compile_commands.json b/RockOS/programs/rocksh/compile_commands.json new file mode 100644 index 0000000..33b6549 --- /dev/null +++ b/RockOS/programs/rocksh/compile_commands.json @@ -0,0 +1,36 @@ +[ + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "crt0.o", + "crt0.S" + ], + "directory": "/home/slinky/source/RockOS/programs/rocksh", + "file": "/home/slinky/source/RockOS/programs/rocksh/crt0.S", + "output": "/home/slinky/source/RockOS/programs/rocksh/crt0.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "main.o", + "main.c" + ], + "directory": "/home/slinky/source/RockOS/programs/rocksh", + "file": "/home/slinky/source/RockOS/programs/rocksh/main.c", + "output": "/home/slinky/source/RockOS/programs/rocksh/main.o" + } +] diff --git a/RockOS/programs/rocksh/crt0.S b/RockOS/programs/rocksh/crt0.S new file mode 100644 index 0000000..d97f158 --- /dev/null +++ b/RockOS/programs/rocksh/crt0.S @@ -0,0 +1,21 @@ +.global _start +.extern exit +.section .text +_start: + xor %ebp, %ebp + + mov (%esp), %eax + lea 4(%esp), %ebx + lea 8(%esp,%eax,4), %ecx + + and $-16, %esp + + push %ecx + push %ebx + push %eax + + call main + + push %eax + call exit + diff --git a/RockOS/programs/rocksh/linker.ld b/RockOS/programs/rocksh/linker.ld new file mode 100644 index 0000000..03d6e3c --- /dev/null +++ b/RockOS/programs/rocksh/linker.ld @@ -0,0 +1,31 @@ +ENTRY(_start) + +SECTIONS +{ + . = 0x40000000; + + .text ALIGN(4K) : + { + /* Force the crt0.o entry code to be placed FIRST in memory */ + KEEP(*crt0.o(.text)) + *(.text .text.*) + } + + .rodata ALIGN(4K) : + { + *(.rodata .rodata.*) + } + + .data ALIGN(4K) : + { + *(.data .data.*) + } + + .bss ALIGN(4K) : + { + _bss_start = .; + *(.bss .bss.*) + *(COMMON) + _bss_end = .; + } +} \ No newline at end of file diff --git a/RockOS/programs/rocksh/main.c b/RockOS/programs/rocksh/main.c new file mode 100644 index 0000000..201dc16 --- /dev/null +++ b/RockOS/programs/rocksh/main.c @@ -0,0 +1,68 @@ +#include "syscall.h" +#include +#include +#include +#include + +const char* shell_prompt = "rocksh> "; + +char buf[256]; +size_t buf_offset = 0; + +char path[256]; + +const char* bin_dir = "/bin/"; + +void parse_cmd() { + if (strcmp(buf, "exit") == 0) { + printf("bye!\n"); + exit(0); + } + + if (strcmp(buf, "motd") == 0) { + printf("rockos is the best!\n"); + return; + } + + strcpy(path, bin_dir); + strcat(path, buf); + + int pid = fork(); + if (pid == 0) { + if (!exec(path)) { + printf("failed to execute %s\n", path); + exit(0); + } + } + + int status; + waitpid(pid, &status); + printf("process exited with status %d\n", status); +} + +void reset() { + memset(buf, 0, 256); + buf_offset = 0; +} + +int main(int argc, char *argv[]) { + (void)argc; + (void)argv; + + printf(shell_prompt); + while (1) { + char c; + int rd = read(0, &c, 1); + if (rd > 0) { + if (c == '\n') { + parse_cmd(); + reset(); + printf(shell_prompt); + continue; + } + buf[buf_offset++] = c; + } + } + + return 0; +} \ No newline at end of file diff --git a/RockOS/programs/rocksh/makefile b/RockOS/programs/rocksh/makefile new file mode 100644 index 0000000..31e51e6 --- /dev/null +++ b/RockOS/programs/rocksh/makefile @@ -0,0 +1,23 @@ +CC = i686-elf-gcc +LD = i686-elf-ld + +CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include +LDFLAGS = -m elf_i386 -nostdlib + +TARGET = rocksh.elf + +all: $(TARGET) + +crt0.o: crt0.S + $(CC) $(CFLAGS) -c crt0.S -o crt0.o + +main.o: main.c + $(CC) $(CFLAGS) -c main.c -o main.o + +$(TARGET): crt0.o main.o ../lib/rlibc.a + $(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET) + +clean: + rm -f *.o $(TARGET) + +.PHONY: all clean test \ No newline at end of file diff --git a/RockOS/programs/test/compile_commands.json b/RockOS/programs/test/compile_commands.json new file mode 100644 index 0000000..63209b9 --- /dev/null +++ b/RockOS/programs/test/compile_commands.json @@ -0,0 +1,36 @@ +[ + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "crt0.o", + "crt0.S" + ], + "directory": "/home/slinky/source/RockOS/programs/test", + "file": "/home/slinky/source/RockOS/programs/test/crt0.S", + "output": "/home/slinky/source/RockOS/programs/test/crt0.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "main.o", + "main.c" + ], + "directory": "/home/slinky/source/RockOS/programs/test", + "file": "/home/slinky/source/RockOS/programs/test/main.c", + "output": "/home/slinky/source/RockOS/programs/test/main.o" + } +] diff --git a/RockOS/programs/test/crt0.S b/RockOS/programs/test/crt0.S new file mode 100644 index 0000000..d97f158 --- /dev/null +++ b/RockOS/programs/test/crt0.S @@ -0,0 +1,21 @@ +.global _start +.extern exit +.section .text +_start: + xor %ebp, %ebp + + mov (%esp), %eax + lea 4(%esp), %ebx + lea 8(%esp,%eax,4), %ecx + + and $-16, %esp + + push %ecx + push %ebx + push %eax + + call main + + push %eax + call exit + diff --git a/RockOS/programs/test/linker.ld b/RockOS/programs/test/linker.ld new file mode 100644 index 0000000..03d6e3c --- /dev/null +++ b/RockOS/programs/test/linker.ld @@ -0,0 +1,31 @@ +ENTRY(_start) + +SECTIONS +{ + . = 0x40000000; + + .text ALIGN(4K) : + { + /* Force the crt0.o entry code to be placed FIRST in memory */ + KEEP(*crt0.o(.text)) + *(.text .text.*) + } + + .rodata ALIGN(4K) : + { + *(.rodata .rodata.*) + } + + .data ALIGN(4K) : + { + *(.data .data.*) + } + + .bss ALIGN(4K) : + { + _bss_start = .; + *(.bss .bss.*) + *(COMMON) + _bss_end = .; + } +} \ No newline at end of file diff --git a/RockOS/programs/test/main.c b/RockOS/programs/test/main.c new file mode 100644 index 0000000..cf4c43c --- /dev/null +++ b/RockOS/programs/test/main.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char** argv) { + printf("hello, world!\n"); + return 0; +} \ No newline at end of file diff --git a/RockOS/programs/test/makefile b/RockOS/programs/test/makefile new file mode 100644 index 0000000..cca7c29 --- /dev/null +++ b/RockOS/programs/test/makefile @@ -0,0 +1,23 @@ +CC = i686-elf-gcc +LD = i686-elf-ld + +CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include +LDFLAGS = -m elf_i386 -nostdlib + +TARGET = test.elf + +all: $(TARGET) + +crt0.o: crt0.S + $(CC) $(CFLAGS) -c crt0.S -o crt0.o + +main.o: main.c + $(CC) $(CFLAGS) -c main.c -o main.o + +$(TARGET): crt0.o main.o ../lib/rlibc.a + $(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET) + +clean: + rm -f *.o $(TARGET) + +.PHONY: all clean test \ No newline at end of file diff --git a/RockOS/programs/vga_text_term/compile_commands.json b/RockOS/programs/vga_text_term/compile_commands.json new file mode 100644 index 0000000..6386dfb --- /dev/null +++ b/RockOS/programs/vga_text_term/compile_commands.json @@ -0,0 +1,36 @@ +[ + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "crt0.o", + "crt0.S" + ], + "directory": "/home/slinky/source/RockOS/programs/vga_text_term", + "file": "/home/slinky/source/RockOS/programs/vga_text_term/crt0.S", + "output": "/home/slinky/source/RockOS/programs/vga_text_term/crt0.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-I../../rocklibc/include", + "-c", + "-o", + "main.o", + "main.c" + ], + "directory": "/home/slinky/source/RockOS/programs/vga_text_term", + "file": "/home/slinky/source/RockOS/programs/vga_text_term/main.c", + "output": "/home/slinky/source/RockOS/programs/vga_text_term/main.o" + } +] diff --git a/RockOS/programs/vga_text_term/crt0.S b/RockOS/programs/vga_text_term/crt0.S new file mode 100644 index 0000000..d97f158 --- /dev/null +++ b/RockOS/programs/vga_text_term/crt0.S @@ -0,0 +1,21 @@ +.global _start +.extern exit +.section .text +_start: + xor %ebp, %ebp + + mov (%esp), %eax + lea 4(%esp), %ebx + lea 8(%esp,%eax,4), %ecx + + and $-16, %esp + + push %ecx + push %ebx + push %eax + + call main + + push %eax + call exit + diff --git a/RockOS/programs/vga_text_term/linker.ld b/RockOS/programs/vga_text_term/linker.ld new file mode 100644 index 0000000..03d6e3c --- /dev/null +++ b/RockOS/programs/vga_text_term/linker.ld @@ -0,0 +1,31 @@ +ENTRY(_start) + +SECTIONS +{ + . = 0x40000000; + + .text ALIGN(4K) : + { + /* Force the crt0.o entry code to be placed FIRST in memory */ + KEEP(*crt0.o(.text)) + *(.text .text.*) + } + + .rodata ALIGN(4K) : + { + *(.rodata .rodata.*) + } + + .data ALIGN(4K) : + { + *(.data .data.*) + } + + .bss ALIGN(4K) : + { + _bss_start = .; + *(.bss .bss.*) + *(COMMON) + _bss_end = .; + } +} \ No newline at end of file diff --git a/RockOS/programs/vga_text_term/main.c b/RockOS/programs/vga_text_term/main.c new file mode 100644 index 0000000..7c2f108 --- /dev/null +++ b/RockOS/programs/vga_text_term/main.c @@ -0,0 +1,69 @@ +#include + +#define VGA_TEXT_W 80 +#define VGA_TEXT_H 25 + +void term(); + +int ptys; +int ptym; + +int main(int argc, char *argv[]) { + (void)argc; + (void)argv; + + ptym = pty(&ptys); + + if (fork() == 0) { + close(ptym); + dup2(ptys, 0); + dup2(0, 1); + dup2(0, 2); + + exec("/bin/rocksh.elf"); + } + + close(ptys); + dup2(ptym, 0); + dup2(0, 1); + dup2(0, 2); + + term(); + + return 0; +} + +void clear(int fd) { + lseek(fd, 0, 0); + size_t bytes = VGA_TEXT_W * VGA_TEXT_H; + char c = ' '; + for (size_t i = 0; i < bytes; i++) { + write(fd, &c, 1); + } + lseek(fd, 0, 0); +} + +void term() { + int vga_fd = open("/dev/tvga"); + if (vga_fd == -1) return; + + int kbd_fd = open("/dev/kbd"); + if (kbd_fd == -1) return; + + clear(vga_fd); + + char c; + while (1) { + // first, get shell output + int rd = read(0, &c, 1); + if (rd > 0) { + write(vga_fd, &c, 1); + } + + // then read a byte from the kbd. If we got one, pass it to the shell + rd = read(kbd_fd, &c, 1); + if (rd > 0) { + write(1, &c, 1); + } + } +} \ No newline at end of file diff --git a/RockOS/programs/vga_text_term/makefile b/RockOS/programs/vga_text_term/makefile new file mode 100644 index 0000000..3b8f645 --- /dev/null +++ b/RockOS/programs/vga_text_term/makefile @@ -0,0 +1,23 @@ +CC = i686-elf-gcc +LD = i686-elf-ld + +CFLAGS = -ffreestanding -O2 -Wall -Wextra -I../../rocklibc/include +LDFLAGS = -m elf_i386 -nostdlib + +TARGET = vga_text_term.elf + +all: $(TARGET) + +crt0.o: crt0.S + $(CC) $(CFLAGS) -c crt0.S -o crt0.o + +main.o: main.c + $(CC) $(CFLAGS) -c main.c -o main.o + +$(TARGET): crt0.o main.o ../lib/rlibc.a + $(LD) $(LDFLAGS) -T linker.ld crt0.o main.o ../lib/rlibc.a -o $(TARGET) + +clean: + rm -f *.o $(TARGET) + +.PHONY: all clean test \ No newline at end of file diff --git a/RockOS/rocklibc/.gitignore b/RockOS/rocklibc/.gitignore new file mode 100644 index 0000000..aa00c4e --- /dev/null +++ b/RockOS/rocklibc/.gitignore @@ -0,0 +1 @@ +*.a \ No newline at end of file diff --git a/RockOS/rocklibc/compile_commands.json b/RockOS/rocklibc/compile_commands.json new file mode 100644 index 0000000..c1d5345 --- /dev/null +++ b/RockOS/rocklibc/compile_commands.json @@ -0,0 +1,104 @@ +[ + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/string.o", + "src/string.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/string.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/string.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/malloc.o", + "src/malloc.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/malloc.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/malloc.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/strcat.o", + "src/strcat.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/strcat.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/strcat.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/syscall.o", + "src/syscall.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/syscall.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/syscall.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/strtok.o", + "src/strtok.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/strtok.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/strtok.o" + }, + { + "arguments": [ + "/home/slinky/opt/cross/bin/i686-elf-gcc", + "-ffreestanding", + "-O2", + "-Wall", + "-Wextra", + "-Iinclude", + "-c", + "-o", + "src/stdio.o", + "src/stdio.c" + ], + "directory": "/home/slinky/source/RockOS/rocklibc", + "file": "/home/slinky/source/RockOS/rocklibc/src/stdio.c", + "output": "/home/slinky/source/RockOS/rocklibc/src/stdio.o" + } +] diff --git a/RockOS/rocklibc/include/stdio.h b/RockOS/rocklibc/include/stdio.h new file mode 100644 index 0000000..008aa81 --- /dev/null +++ b/RockOS/rocklibc/include/stdio.h @@ -0,0 +1,10 @@ +#ifndef RLIBC_STDIO_H +#define RLIBC_STDIO_H + +#include + +int printf(const char *format, ...); + +char getchar(void); + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/include/stdlib.h b/RockOS/rocklibc/include/stdlib.h new file mode 100644 index 0000000..a6ebd4a --- /dev/null +++ b/RockOS/rocklibc/include/stdlib.h @@ -0,0 +1,8 @@ +#ifndef RLIBC_STDLIB_H +#define RLIBC_STDLIB_H + +#include + +void* malloc(size_t size); + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/include/string.h b/RockOS/rocklibc/include/string.h new file mode 100644 index 0000000..6ab6e20 --- /dev/null +++ b/RockOS/rocklibc/include/string.h @@ -0,0 +1,15 @@ +#ifndef RLIBC_STRING_H +#define RLIBC_STRING_H + +#include + +void *memcpy(void *restrict dest, const void *restrict src, size_t n); +void *memmove(void *dest, const void *src, size_t n); +void *memset(void *s, int c, size_t n); + +size_t strlen(const char *s); +int strcmp(const char *s1, const char *s2); +char *strcpy(char *dest, const char *src); +char* strcat(char *dest, const char* src); + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/include/sys/types.h b/RockOS/rocklibc/include/sys/types.h new file mode 100644 index 0000000..4215af9 --- /dev/null +++ b/RockOS/rocklibc/include/sys/types.h @@ -0,0 +1,8 @@ +#ifndef RLIBC_SYS_TYPES_H +#define RLIBC_SYS_TYPES_H + +typedef long off_t; + +typedef int ssize_t; + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/include/syscall.h b/RockOS/rocklibc/include/syscall.h new file mode 100644 index 0000000..1ff4d32 --- /dev/null +++ b/RockOS/rocklibc/include/syscall.h @@ -0,0 +1,40 @@ +#ifndef RLIBC_SYSCALL_H +#define RLIBC_SYSCALL_H + +#include +#include + +#define SYS_EXIT 1 +#define SYS_READ 3 +#define SYS_WRITE 4 +#define SYS_OPEN 5 +#define SYS_CLOSE 6 +#define SYS_BRK 12 +#define SYS_SBRK 13 +#define SYS_PTY 20 +#define SYS_FORK 21 +#define SYS_EXEC 22 +#define SYS_DUP2 23 +#define SYS_LSEEK 24 +#define SYS_WAIT 25 + +int open(const char* path); +int write(int fd, const void *buf, size_t count); +int read(int fd, void *buf, size_t count); +int close(int fd); + +int lseek(int fd, size_t offset, int whence); + +void exit(int status) __attribute__((noreturn)); + +void* sbrk(int32_t increment); +int brk(void *addr); + +int pty(int* slave); + +int fork(); +int exec(const char* path); +int dup2(int src, int dst); +int waitpid(int pid, int* status); + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/include/unistd.h b/RockOS/rocklibc/include/unistd.h new file mode 100644 index 0000000..7fe0f4c --- /dev/null +++ b/RockOS/rocklibc/include/unistd.h @@ -0,0 +1,15 @@ +#ifndef RLIBC_UNISTD_H +#define RLIBC_UNISTD_H + +#include +#include + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#endif \ No newline at end of file diff --git a/RockOS/rocklibc/makefile b/RockOS/rocklibc/makefile new file mode 100644 index 0000000..8fdc2ba --- /dev/null +++ b/RockOS/rocklibc/makefile @@ -0,0 +1,20 @@ +CC = i686-elf-gcc +AR = i686-elf-ar +CFLAGS = -ffreestanding -O2 -Wall -Wextra -Iinclude +TARGET = rlibc.a + +SRCS = $(shell find src -name "*.c") +OBJS = $(SRCS:.c=.o) + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(AR) rcs $@ $(OBJS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(TARGET) + +.PHONY: all clean \ No newline at end of file diff --git a/RockOS/rocklibc/src/malloc.c b/RockOS/rocklibc/src/malloc.c new file mode 100644 index 0000000..3fa4ecb --- /dev/null +++ b/RockOS/rocklibc/src/malloc.c @@ -0,0 +1,74 @@ +#include +#include + +#define ALIGN(size) (((size) + 3) & ~3) +#define HEADER_SIZE sizeof(struct Header) + +struct Header { + size_t size; + int is_free; + struct Header* next; +}; + +static struct Header* free_list_head = NULL; + +static struct Header* find_free_block(struct Header** last, size_t size) { + struct Header* current = free_list_head; + while (current && !(current->is_free && current->size >= size)) { + *last = current; + current = current->next; + } + return current; +} + +static struct Header* request_space(struct Header* last, size_t size) { + struct Header* block = sbrk(0); + void* request = sbrk(size + HEADER_SIZE); + + if (request == (void*)-1) { + return NULL; + } + + if (last) { + last->next = block; + } + + block->size = size; + block->next = NULL; + block->is_free = 0; + return block; +} + +void* malloc(size_t size) { + if (size <= 0) { + return NULL; + } + + size = ALIGN(size); + + if (free_list_head == NULL) { + struct Header* block = request_space(NULL, size); + if (!block) return NULL; + free_list_head = block; + return (void*)(block + 1); + } + + struct Header* last = free_list_head; + struct Header* block = find_free_block(&last, size); + + if (block) { + block->is_free = 0; + } else { + block = request_space(last, size); + if (!block) return NULL; + } + + return (void*)(block + 1); +} + +void free(void* ptr) { + if (!ptr) return; + + struct Header* block = (struct Header*)ptr - 1; + block->is_free = 1; +} \ No newline at end of file diff --git a/RockOS/rocklibc/src/stdio.c b/RockOS/rocklibc/src/stdio.c new file mode 100644 index 0000000..f6c4415 --- /dev/null +++ b/RockOS/rocklibc/src/stdio.c @@ -0,0 +1,122 @@ +#include +#include + +static void utoa(unsigned int value, char *buf, int base) { + char temp[32]; + int i = 0; + + // Handle zero explicitly + if (value == 0) { + buf[0] = '0'; + buf[1] = '\0'; + return; + } + + // Convert digits in reverse order + while (value > 0) { + int remainder = value % base; + if (remainder < 10) { + temp[i++] = '0' + remainder; + } else { + temp[i++] = 'a' + (remainder - 10); + } + value /= base; + } + + // Reverse the string into the output destination buffer + int j = 0; + while (i > 0) { + buf[j++] = temp[--i]; + } + buf[j] = '\0'; +} + +/* Helper function to convert a signed integer to a string */ +static void itoa(int value, char *buf, int base) { + if (value < 0 && base == 10) { + *buf++ = '-'; + value = -value; + } + utoa((unsigned int)value, buf, base); +} + +int printf(const char *format, ...) { + va_list args; + va_start(args, format); + + int written_total = 0; + char num_buf[32]; // Stack-allocated scratchpad for string conversions + + while (*format != '\0') { + if (*format == '%') { + format++; // Move past '%' + + switch (*format) { + case 'c': { + char c = (char)va_arg(args, int); + write(1, &c, 1); + written_total++; + break; + } + case 's': { + char *s = va_arg(args, char *); + if (!s) s = "(null)"; + // Find length manually without dragging headers + int len = 0; + while (s[len] != '\0') len++; + write(1, s, len); + written_total += len; + break; + } + case 'd': + case 'i': { + int n = va_arg(args, int); + itoa(n, num_buf, 10); + int len = 0; + while (num_buf[len] != '\0') len++; + write(1, num_buf, len); + written_total += len; + break; + } + case 'x': { + unsigned int x = va_arg(args, unsigned int); + utoa(x, num_buf, 16); + int len = 0; + while (num_buf[len] != '\0') len++; + write(1, num_buf, len); + written_total += len; + break; + } + case '%': { + write(1, "%", 1); + written_total++; + break; + } + default: + // Unknown conversion, print verbatim + write(1, format - 1, 2); + written_total += 2; + break; + } + } else { + // Standard text character + write(1, format, 1); + written_total++; + } + format++; + } + + va_end(args); + return written_total; +} + +char getchar(void) { + char c; + int res = read(0, &c, 1); + + if (res <= 0) { + return -1; + } + + return (char)c; +} diff --git a/RockOS/rocklibc/src/strcat.c b/RockOS/rocklibc/src/strcat.c new file mode 100644 index 0000000..e31409f --- /dev/null +++ b/RockOS/rocklibc/src/strcat.c @@ -0,0 +1,8 @@ +#include +#include + +char* strcat(char* dest, const char* src) { + char* start = dest + strlen(dest); + strcpy(start, src); + return dest; +} \ No newline at end of file diff --git a/RockOS/rocklibc/src/string.c b/RockOS/rocklibc/src/string.c new file mode 100644 index 0000000..cd4a0e1 --- /dev/null +++ b/RockOS/rocklibc/src/string.c @@ -0,0 +1,68 @@ +#include + +void *memcpy(void *restrict dest, const void *restrict src, size_t n) { + char *d = (char *)dest; + const char *s = (const char *)src; + + for (size_t i = 0; i < n; i++) { + d[i] = s[i]; + } + return dest; +} + +/* Copy memory area: safely handles overlapping regions */ +void *memmove(void *dest, const void *src, size_t n) { + char *d = (char *)dest; + const char *s = (const char *)src; + + if (d < s) { + // Copy forward + for (size_t i = 0; i < n; i++) { + d[i] = s[i]; + } + } else if (d > s) { + // Copy backward to prevent overwriting uncopied data + for (size_t i = n; i > 0; i--) { + d[i - 1] = s[i - 1]; + } + } + return dest; +} + +/* Fill memory block with a constant byte */ +void *memset(void *s, int c, size_t n) { + unsigned char *p = (unsigned char *)s; + for (size_t i = 0; i < n; i++) { + p[i] = (unsigned char)c; + } + return s; +} + +/* Calculate the length of a string */ +size_t strlen(const char *s) { + size_t len = 0; + while (s[len] != '\0') { + len++; + } + return len; +} + +/* Compare two strings */ +int strcmp(const char *s1, const char *s2) { + while (*s1 && (*s1 == *s2)) { + s1++; + s2++; + } + return *(unsigned char *)s1 - *(unsigned char *)s2; +} + +/* Copy a string from src to dest */ +char *strcpy(char *dest, const char *src) { + size_t i = 0; + while (src[i] != '\0') { + dest[i] = src[i]; + i++; + } + dest[i] = '\0'; + return dest; +} \ No newline at end of file diff --git a/RockOS/rocklibc/src/strtok.c b/RockOS/rocklibc/src/strtok.c new file mode 100644 index 0000000..641f0d8 --- /dev/null +++ b/RockOS/rocklibc/src/strtok.c @@ -0,0 +1,63 @@ +#include + +static size_t kernel_strspn(const char *s, const char *accept) { + const char *p; + const char *a; + size_t count = 0; + + for (p = s; *p != '\0'; ++p) { + for (a = accept; *a != '\0'; ++a) { + if (*p == *a) + break; + } + if (*a == '\0') + return count; + ++count; + } + return count; +} + +static char *kernel_strpbrk(const char *s, const char *accept) { + while (*s != '\0') { + const char *a = accept; + while (*a != '\0') { + if (*s == *a) { + return (char *)s; + } + a++; + } + s++; + } + return NULL; +} + +char *strtok_r(char *str, const char *delim, char **saveptr) { + char *token; + + if (str == NULL) { + str = *saveptr; + } + + if (str == NULL || *str == '\0') { + *saveptr = NULL; + return NULL; + } + + str += kernel_strspn(str, delim); + if (*str == '\0') { + *saveptr = NULL; + return NULL; + } + + token = str; + str = kernel_strpbrk(token, delim); + + if (str == NULL) { + *saveptr = NULL; + } else { + *str = '\0'; + *saveptr = str + 1; + } + + return token; +} \ No newline at end of file diff --git a/RockOS/rocklibc/src/syscall.c b/RockOS/rocklibc/src/syscall.c new file mode 100644 index 0000000..87f67ff --- /dev/null +++ b/RockOS/rocklibc/src/syscall.c @@ -0,0 +1,76 @@ +#include + +static inline int syscall1(int num, uint32_t arg1) { + int ret; + asm volatile ( + "int $0x80" + : "=a"(ret) + : "a"(num), "b"(arg1) + : "memory" + ); + return ret; +} + +static inline int syscall3(int num, uint32_t arg1, uint32_t arg2, uint32_t arg3) { + int ret; + asm volatile ( + "int $0x80" + : "=a"(ret) + : "a"(num), "b"(arg1), "c"(arg2), "d"(arg3) + : "memory" + ); + return ret; +} + +void exit(int status) { + syscall1(SYS_EXIT, (uint32_t)status); + while(1); +} + +int open(const char* path) { + return syscall3(SYS_OPEN, (uint32_t)path, 0, 0); +} + +int write(int fd, const void* buf, size_t cnt) { + return syscall3(SYS_WRITE, (uint32_t)fd, (uint32_t)buf, (uint32_t)cnt); +} + +int read(int fd, void* buf, size_t cnt) { + return syscall3(SYS_READ, (uint32_t)fd, (uint32_t)buf, (uint32_t)cnt); +} + +int lseek(int fd, size_t offset, int whence) { + return syscall3(SYS_LSEEK, (uint32_t)fd, offset, whence); +} + +int close(int fd) { + return syscall1(SYS_CLOSE, fd); +} + +int pty(int* slave) { + return syscall1(SYS_PTY, (uint32_t)slave); +} + +int fork() { + return syscall1(SYS_FORK, 0); +} + +int exec(const char* path) { + return syscall1(SYS_EXEC, (uint32_t)path); +} + +int dup2(int src, int dst) { + return syscall3(SYS_DUP2, src, dst, 0); +} + +int waitpid(int pid, int* status) { + return syscall3(SYS_WAIT, pid, (uint32_t)status, 0); +} + +void* sbrk(int32_t increment) { + return (void*)syscall1(SYS_SBRK, increment); +} + +int brk(void *addr) { + return syscall1(SYS_BRK, (uint32_t)addr); +} \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/assert.h b/RockOS/sysroot/usr/include/assert.h new file mode 100644 index 0000000..34bea52 --- /dev/null +++ b/RockOS/sysroot/usr/include/assert.h @@ -0,0 +1,50 @@ +/* Diagnostics + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_ASSERT_H +#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H +_PDCLIB_PUBLIC void _PDCLIB_assert99( const char * const, const char * const, const char * const ); +_PDCLIB_PUBLIC void _PDCLIB_assert89( const char * const ); +#endif + +/* If NDEBUG is set, assert() is a null operation. */ +#undef assert + +#ifdef NDEBUG +#define assert( ignore ) ( (void) 0 ) +#else +#if __STDC_VERSION__ >= 199901L +#define assert( expression ) ( ( expression ) ? (void) 0 \ + : _PDCLIB_assert99( "Assertion failed: " #expression \ + ", function ", __func__, \ + ", file " __FILE__ \ + ", line " _PDCLIB_value2string( __LINE__ ) \ + ".\n" ) ) +#else +#define assert( expression ) ( ( expression ) ? (void) 0 \ + : _PDCLIB_assert89( "Assertion failed: " #expression \ + ", file " __FILE__ \ + ", line " _PDCLIB_value2string( __LINE__ ) \ + ".\n" ) ) +#endif +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_ASSERT_H +#include _PDCLIB_EXTEND_ASSERT_H +#endif + +#ifdef __cplusplus +} +#endif diff --git a/RockOS/sysroot/usr/include/ctype.h b/RockOS/sysroot/usr/include/ctype.h new file mode 100644 index 0000000..551667a --- /dev/null +++ b/RockOS/sysroot/usr/include/ctype.h @@ -0,0 +1,110 @@ +/* Character handling + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_CTYPE_H +#define _PDCLIB_CTYPE_H _PDCLIB_CTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +/* Character classification functions */ + +/* Note that there is a difference between "whitespace" (any printing, non- + graph character, like horizontal and vertical tab), and "blank" (the literal + ' ' space character). + + There will be masking macros for each of these later on, but right now I + focus on the functions only. +*/ + +/* Returns isalpha( c ) || isdigit( c ) */ +_PDCLIB_PUBLIC int isalnum( int c ); + +/* Returns isupper( c ) || islower( c ) in the "C" locale. + In any other locale, also returns true for a locale-specific set of + alphabetic characters which are neither control characters, digits, + punctation, or whitespace. +*/ +_PDCLIB_PUBLIC int isalpha( int c ); + +/* Returns true if the character isspace() and used for separating words within + a line of text. In the "C" locale, only ' ' and '\t' are considered blanks. +*/ +_PDCLIB_PUBLIC int isblank( int c ); + +/* Returns true if the character is a control character. */ +_PDCLIB_PUBLIC int iscntrl( int c ); + +/* Returns true if the character is a decimal digit. Locale-independent. */ +_PDCLIB_PUBLIC int isdigit( int c ); + +/* Returns true for every printing character except space (' '). + NOTE: This definition differs from that of iswgraph() in , + which considers any iswspace() character, not only ' '. +*/ +_PDCLIB_PUBLIC int isgraph( int c ); + +/* Returns true for lowercase letters in the "C" locale. + In any other locale, also returns true for a locale-specific set of + characters which are neither control characters, digits, punctation, or + space (' '). In a locale other than the "C" locale, a character might test + true for both islower() and isupper(). +*/ +_PDCLIB_PUBLIC int islower( int c ); + +/* Returns true for every printing character including space (' '). */ +_PDCLIB_PUBLIC int isprint( int c ); + +/* Returns true for a locale-specific set of punctuation charcters; these + may not be whitespace or alphanumeric. In the "C" locale, returns true + for every printing character that is not whitespace or alphanumeric. +*/ +_PDCLIB_PUBLIC int ispunct( int c ); + +/* Returns true for every standard whitespace character (' ', '\f', '\n', '\r', + '\t', '\v') in the "C" locale. In any other locale, also returns true for a + locale-specific set of characters for which isalnum() is false. +*/ +_PDCLIB_PUBLIC int isspace( int c ); + +/* Returns true for uppercase letters in the "C" locale. + In any other locale, also returns true for a locale-specific set of + characters which are neither control characters, digits, punctation, or + space (' '). In a locale other than the "C" locale, a character might test + true for both islower() and isupper(). +*/ +_PDCLIB_PUBLIC int isupper( int c ); + +/* Returns true for any hexadecimal-digit character. Locale-independent. */ +_PDCLIB_PUBLIC int isxdigit( int c ); + +/* Character case mapping functions */ + +/* Converts an uppercase letter to a corresponding lowercase letter. Input that + is not an uppercase letter remains unchanged. +*/ +_PDCLIB_PUBLIC int tolower( int c ); + +/* Converts a lowercase letter to a corresponding uppercase letter. Input that + is not a lowercase letter remains unchanged. +*/ +_PDCLIB_PUBLIC int toupper( int c ); + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_CTYPE_H +#include _PDCLIB_EXTEND_CTYPE_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/errno.h b/RockOS/sysroot/usr/include/errno.h new file mode 100644 index 0000000..28eaf5b --- /dev/null +++ b/RockOS/sysroot/usr/include/errno.h @@ -0,0 +1,202 @@ +/* Errors + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_ERRNO_H +#define _PDCLIB_ERRNO_H _PDCLIB_ERRNO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +/* FIXME: With , this needs to be in thread-specific storage. */ +#define errno (*_PDCLIB_errno_func()) + +/* C only requires the following three */ + +/* Result too large */ +#define ERANGE _PDCLIB_ERANGE +/* Mathematics argument out of domain of function */ +#define EDOM _PDCLIB_EDOM +/* Illegal byte sequence */ +#define EILSEQ _PDCLIB_EILSEQ + +/* C++ additionally requires the folloing */ + +/* Argument list too long */ +#define E2BIG _PDCLIB_E2BIG +/* Permission denied */ +#define EACCES _PDCLIB_EACCES +/* Address in use */ +#define EADDRINUSE _PDCLIB_EADDRINUSE +/* Address not available */ +#define EADDRNOTAVAIL _PDCLIB_EADDRNOTAVAIL +/* Address family not supported */ +#define EAFNOSUPPORT _PDCLIB_EAFNOSUPPORT +/* Resource unavailable, try again */ +#define EAGAIN _PDCLIB_EAGAIN +/* Connection already in progress */ +#define EALREADY _PDCLIB_EALREADY +/* Bad file descriptor */ +#define EBADF _PDCLIB_EBADF +/* Bad message */ +#define EBADMSG _PDCLIB_EBADMSG +/* Device or resource busy */ +#define EBUSY _PDCLIB_EBUSY +/* Operation canceled */ +#define ECANCELED _PDCLIB_ECANCELED +/* No child processes */ +#define ECHILD _PDCLIB_ECHILD +/* Connection aborted */ +#define ECONNABORTED _PDCLIB_ECONNABORTED +/* Connection refused */ +#define ECONNREFUSED _PDCLIB_ECONNREFUSED +/* Connection reset */ +#define ECONNRESET _PDCLIB_ECONNRESET +/* Resource deadlock would occur */ +#define EDEADLK _PDCLIB_EDEADLK +/* Destination address required */ +#define EDESTADDRREQ _PDCLIB_EDESTADDRREQ +/* File exists */ +#define EEXIST _PDCLIB_EEXIST +/* Bad address */ +#define EFAULT _PDCLIB_EFAULT +/* File too large */ +#define EFBIG _PDCLIB_EFBIG +/* Host is unreachable */ +#define EHOSTUNREACH _PDCLIB_EHOSTUNREACH +/* Identifier removed */ +#define EIDRM _PDCLIB_EIDRM +/* Operation in progress */ +#define EINPROGRESS _PDCLIB_EINPROGRESS +/* Interrupted function */ +#define EINTR _PDCLIB_EINTR +/* Invalid argument */ +#define EINVAL _PDCLIB_EINVAL +/* I/O error */ +#define EIO _PDCLIB_EIO +/* Socket is connected */ +#define EISCONN _PDCLIB_EISCONN +/* Is a directory */ +#define EISDIR _PDCLIB_EISDIR +/* Too many levels of symbolic links */ +#define ELOOP _PDCLIB_ELOOP +/* File descriptor value too large */ +#define EMFILE _PDCLIB_EMFILE +/* Too many links */ +#define EMLINK _PDCLIB_EMLINK +/* Message too large */ +#define EMSGSIZE _PDCLIB_EMSGSIZE +/* Filename too long */ +#define ENAMETOOLONG _PDCLIB_ENAMETOOLONG +/* Network is down */ +#define ENETDOWN _PDCLIB_ENETDOWN +/* Connection aborted by network */ +#define ENETRESET _PDCLIB_ENETRESET +/* Network unreachable */ +#define ENETUNREACH _PDCLIB_ENETUNREACH +/* Too many files open in system */ +#define ENFILE _PDCLIB_ENFILE +/* No buffer space available */ +#define ENOBUFS _PDCLIB_ENOBUFS +/* No message is available on the STREAM head read queue */ +#define ENODATA _PDCLIB_ENODATA +/* No such device */ +#define ENODEV _PDCLIB_ENODEV +/* No such file or directory */ +#define ENOENT _PDCLIB_ENOENT +/* Executable file format error */ +#define ENOEXEC _PDCLIB_ENOEXEC +/* No locks available */ +#define ENOLCK _PDCLIB_ENOLCK +/* Link has been severed */ +#define ENOLINK _PDCLIB_ENOLINK +/* Not enough space */ +#define ENOMEM _PDCLIB_ENOMEM +/* No message of the desired type */ +#define ENOMSG _PDCLIB_ENOMSG +/* Protocol not available */ +#define ENOPROTOOPT _PDCLIB_ENOPROTOOPT +/* No space left on device */ +#define ENOSPC _PDCLIB_ENOSPC +/* No STREAM resources */ +#define ENOSR _PDCLIB_ENOSR +/* Not a STREAM */ +#define ENOSTR _PDCLIB_ENOSTR +/* Function not supported */ +#define ENOSYS _PDCLIB_ENOSYS +/* The socket is not connected */ +#define ENOTCONN _PDCLIB_ENOTCONN +/* Not a directory */ +#define ENOTDIR _PDCLIB_ENOTDIR +/* Directory not empty */ +#define ENOTEMPTY _PDCLIB_ENOTEMPTY +/* State not recoverable */ +#define ENOTRECOVERABLE _PDCLIB_ENOTRECOVERABLE +/* Not a socket */ +#define ENOTSOCK _PDCLIB_ENOTSOCK +/* Not supported */ +#define ENOTSUP _PDCLIB_ENOTSUP +/* Inappropriate I/O control operation */ +#define ENOTTY _PDCLIB_ENOTTY +/* No such device or address */ +#define ENXIO _PDCLIB_ENXIO +/* Operation not supported on socket */ +#define EOPNOTSUPP _PDCLIB_EOPNOTSUPP +/* Value too large to be stored in data type */ +#define EOVERFLOW _PDCLIB_EOVERFLOW +/* Previous owner died */ +#define EOWNERDEAD _PDCLIB_EOWNERDEAD +/* Operation not permitted */ +#define EPERM _PDCLIB_EPERM +/* Broken pipe */ +#define EPIPE _PDCLIB_EPIPE +/* Protocol error */ +#define EPROTO _PDCLIB_EPROTO +/* Protocol not supported */ +#define EPROTONOSUPPORT _PDCLIB_EPROTONOSUPPORT +/* Protocol wrong type for socket */ +#define EPROTOTYPE _PDCLIB_EPROTOTYPE +/* Read-only file system */ +#define EROFS _PDCLIB_EROFS +/* Invalid seek */ +#define ESPIPE _PDCLIB_ESPIPE +/* No such process */ +#define ESRCH _PDCLIB_ESRCH +/* Stream ioctl() timeout */ +#define ETIME _PDCLIB_ETIME +/* Connection timed out */ +#define ETIMEDOUT _PDCLIB_ETIMEDOUT +/* Text file busy */ +#define ETXTBSY _PDCLIB_ETXTBSY +/* Operation would block */ +#define EWOULDBLOCK _PDCLIB_EWOULDBLOCK +/* Cross-device link */ +#define EXDEV _PDCLIB_EXDEV + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 +#ifndef _PDCLIB_ERRNO_T_DEFINED +#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED +typedef int errno_t; +#endif +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_ERRNO_H +#include _PDCLIB_EXTEND_ERRNO_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/fcntl.h b/RockOS/sysroot/usr/include/fcntl.h new file mode 100644 index 0000000..99d530f --- /dev/null +++ b/RockOS/sysroot/usr/include/fcntl.h @@ -0,0 +1,19 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +/* File access modes for open() */ +#define O_RDONLY 00000000 +#define O_WRONLY 00000001 +#define O_RDWR 00000002 + +/* File creation flags */ +#define O_CREAT 00000100 +#define O_EXCL 00000200 +#define O_NOCTTY 00000400 +#define O_TRUNC 00001000 +#define O_APPEND 00002000 +#define O_NONBLOCK 00004000 + +#define AT_FDCWD (-100) + +#endif /* _FCNTL_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/float.h b/RockOS/sysroot/usr/include/float.h new file mode 100644 index 0000000..49d5d2e --- /dev/null +++ b/RockOS/sysroot/usr/include/float.h @@ -0,0 +1,82 @@ +/* Characteristics of floating types + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_FLOAT_H +#define _PDCLIB_FLOAT_H _PDCLIB_FLOAT_H + +#include "pdclib/_PDCLIB_config.h" + +#define FLT_ROUNDS _PDCLIB_FLT_ROUNDS +#define FLT_EVAL_METHOD _PDCLIB_FLT_EVAL_METHOD +#define DECIMAL_DIG _PDCLIB_DECIMAL_DIG + +/* Radix of exponent representation */ +#define FLT_RADIX __FLT_RADIX__ +/* Number of base-FLT_RADIX digits in the significand of a float */ +#define FLT_MANT_DIG __FLT_MANT_DIG__ +/* Number of decimal digits of precision in a float */ +#define FLT_DIG __FLT_DIG__ +/* Difference between 1.0 and the minimum float greater than 1.0 */ +#define FLT_EPSILON __FLT_EPSILON__ +/* Minimum int x such that FLT_RADIX**(x-1) is a normalised float */ +#define FLT_MIN_EXP __FLT_MIN_EXP__ +/* Minimum normalised float */ +#define FLT_MIN __FLT_MIN__ +/* Minimum int x such that 10**x is a normalised float */ +#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ +/* Maximum int x such that FLT_RADIX**(x-1) is a representable float */ +#define FLT_MAX_EXP __FLT_MAX_EXP__ +/* Maximum float */ +#define FLT_MAX __FLT_MAX__ +/* Maximum int x such that 10**x is a representable float */ +#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ + +/* Number of base-FLT_RADIX digits in the significand of a double */ +#define DBL_MANT_DIG __DBL_MANT_DIG__ +/* Number of decimal digits of precision in a double */ +#define DBL_DIG __DBL_DIG__ +/* Difference between 1.0 and the minimum double greater than 1.0 */ +#define DBL_EPSILON __DBL_EPSILON__ +/* Minimum int x such that FLT_RADIX**(x-1) is a normalised double */ +#define DBL_MIN_EXP __DBL_MIN_EXP__ +/* Minimum normalised double */ +#define DBL_MIN __DBL_MIN__ +/* Minimum int x such that 10**x is a normalised double */ +#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ +/* Maximum int x such that FLT_RADIX**(x-1) is a representable double */ +#define DBL_MAX_EXP __DBL_MAX_EXP__ +/* Maximum double */ +#define DBL_MAX __DBL_MAX__ +/* Maximum int x such that 10**x is a representable double */ +#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ + +/* Number of base-FLT_RADIX digits in the significand of a long double */ +#define LDBL_MANT_DIG __LDBL_MANT_DIG__ +/* Number of decimal digits of precision in a long double */ +#define LDBL_DIG __LDBL_DIG__ +/* Difference between 1.0 and the minimum long double greater than 1.0 */ +#define LDBL_EPSILON __LDBL_EPSILON__ +/* Minimum int x such that FLT_RADIX**(x-1) is a normalised long double */ +#define LDBL_MIN_EXP __LDBL_MIN_EXP__ +/* Minimum normalised long double */ +#define LDBL_MIN __LDBL_MIN__ +/* Minimum int x such that 10**x is a normalised long double */ +#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ +/* Maximum int x such that FLT_RADIX**(x-1) is a representable long double */ +#define LDBL_MAX_EXP __LDBL_MAX_EXP__ +/* Maximum long double */ +#define LDBL_MAX __LDBL_MAX__ +/* Maximum int x such that 10**x is a representable long double */ +#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_FLOAT_H +#include _PDCLIB_EXTEND_FLOAT_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/inttypes.h b/RockOS/sysroot/usr/include/inttypes.h new file mode 100644 index 0000000..0be401d --- /dev/null +++ b/RockOS/sysroot/usr/include/inttypes.h @@ -0,0 +1,368 @@ +/* Format conversion of integer types + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_INTTYPES_H +#define _PDCLIB_INTTYPES_H _PDCLIB_INTTYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct _PDCLIB_imaxdiv_t imaxdiv_t; + +/* 7.8.1 Macros for format specifiers */ + +/* The various leastN_t, fastN_t, intmax_t, and intptr_t types are typedefs + to native types. But the user does not know which ones, which gives some + problems when trying to *printf() / *scanf() those types. The various + macros defined below allow to give the correct conversion specifiers + without knowing the actual native type they represent. +*/ + +#if _PDCLIB_INT_LEAST8_MAX > _PDCLIB_INT_MAX +#define PRIdLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) +#define PRIiLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) +#define PRIoLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) +#define PRIuLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) +#define PRIxLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) +#define PRIXLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, X ) ) +#else +#define PRIdLEAST8 "d" +#define PRIiLEAST8 "i" +#define PRIoLEAST8 "o" +#define PRIuLEAST8 "u" +#define PRIxLEAST8 "x" +#define PRIXLEAST8 "X" +#endif + +#if _PDCLIB_INT_FAST8_MAX > _PDCLIB_INT_MAX +#define PRIdFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, d ) ) +#define PRIiFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, i ) ) +#define PRIoFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, o ) ) +#define PRIuFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, u ) ) +#define PRIxFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, x ) ) +#define PRIXFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, X ) ) +#else +#define PRIdFAST8 "d" +#define PRIiFAST8 "i" +#define PRIoFAST8 "o" +#define PRIuFAST8 "u" +#define PRIxFAST8 "x" +#define PRIXFAST8 "X" +#endif + +#if _PDCLIB_INT_LEAST16_MAX > _PDCLIB_INT_MAX +#define PRIdLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) +#define PRIiLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) +#define PRIoLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) +#define PRIuLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) +#define PRIxLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) +#define PRIXLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, X ) ) +#else +#define PRIdLEAST16 "d" +#define PRIiLEAST16 "i" +#define PRIoLEAST16 "o" +#define PRIuLEAST16 "u" +#define PRIxLEAST16 "x" +#define PRIXLEAST16 "X" +#endif + +#if _PDCLIB_INT_FAST16_MAX > _PDCLIB_INT_MAX +#define PRIdFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, d ) ) +#define PRIiFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, i ) ) +#define PRIoFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, o ) ) +#define PRIuFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, u ) ) +#define PRIxFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, x ) ) +#define PRIXFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, X ) ) +#else +#define PRIdFAST16 "d" +#define PRIiFAST16 "i" +#define PRIoFAST16 "o" +#define PRIuFAST16 "u" +#define PRIxFAST16 "x" +#define PRIXFAST16 "X" +#endif + +#if _PDCLIB_INT_LEAST32_MAX > _PDCLIB_INT_MAX +#define PRIdLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) +#define PRIiLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) +#define PRIoLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) +#define PRIuLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) +#define PRIxLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) +#define PRIXLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, X ) ) +#else +#define PRIdLEAST32 "d" +#define PRIiLEAST32 "i" +#define PRIoLEAST32 "o" +#define PRIuLEAST32 "u" +#define PRIxLEAST32 "x" +#define PRIXLEAST32 "X" +#endif + +#if _PDCLIB_INT_FAST32_MAX > _PDCLIB_INT_MAX +#define PRIdFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, d ) ) +#define PRIiFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, i ) ) +#define PRIoFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, o ) ) +#define PRIuFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, u ) ) +#define PRIxFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, x ) ) +#define PRIXFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, X ) ) +#else +#define PRIdFAST32 "d" +#define PRIiFAST32 "i" +#define PRIoFAST32 "o" +#define PRIuFAST32 "u" +#define PRIxFAST32 "x" +#define PRIXFAST32 "X" +#endif + +#if _PDCLIB_INT_LEAST64_MAX > _PDCLIB_INT_MAX +#define PRIdLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) +#define PRIiLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) +#define PRIoLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) +#define PRIuLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) +#define PRIxLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) +#define PRIXLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, X ) ) +#else +#define PRIdLEAST64 "d" +#define PRIiLEAST64 "i" +#define PRIoLEAST64 "o" +#define PRIuLEAST64 "u" +#define PRIxLEAST64 "x" +#define PRIXLEAST64 "X" +#endif + +#if _PDCLIB_INT_FAST64_MAX > _PDCLIB_INT_MAX +#define PRIdFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, d ) ) +#define PRIiFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, i ) ) +#define PRIoFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, o ) ) +#define PRIuFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, u ) ) +#define PRIxFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, x ) ) +#define PRIXFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, X ) ) +#else +#define PRIdFAST64 "d" +#define PRIiFAST64 "i" +#define PRIoFAST64 "o" +#define PRIuFAST64 "u" +#define PRIxFAST64 "x" +#define PRIXFAST64 "X" +#endif + +#if _PDCLIB_INTMAX_MAX > _PDCLIB_INT_MAX +#define PRIdMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, d ) ) +#define PRIiMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, i ) ) +#define PRIoMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, o ) ) +#define PRIuMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, u ) ) +#define PRIxMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, x ) ) +#define PRIXMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, X ) ) +#else +#define PRIdMAX "d" +#define PRIiMAX "i" +#define PRIoMAX "o" +#define PRIuMAX "u" +#define PRIxMAX "x" +#define PRIXMAX "X" +#endif + +#if _PDCLIB_INTPTR_MAX > _PDCLIB_INT_MAX +#define PRIdPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, d ) ) +#define PRIiPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, i ) ) +#define PRIoPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, o ) ) +#define PRIuPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, u ) ) +#define PRIxPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, x ) ) +#define PRIXPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, X ) ) +#else +#define PRIdPTR "d" +#define PRIiPTR "i" +#define PRIoPTR "o" +#define PRIuPTR "u" +#define PRIxPTR "x" +#define PRIXPTR "X" +#endif + +#define SCNdLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) +#define SCNiLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) +#define SCNoLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) +#define SCNuLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) +#define SCNxLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) + +#define SCNdFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, d ) ) +#define SCNiFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, i ) ) +#define SCNoFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, o ) ) +#define SCNuFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, u ) ) +#define SCNxFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, x ) ) + +#define SCNdLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) +#define SCNiLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) +#define SCNoLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) +#define SCNuLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) +#define SCNxLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) + +#define SCNdFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, d ) ) +#define SCNiFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, i ) ) +#define SCNoFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, o ) ) +#define SCNuFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, u ) ) +#define SCNxFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, x ) ) + +#define SCNdLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) +#define SCNiLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) +#define SCNoLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) +#define SCNuLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) +#define SCNxLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) + +#define SCNdFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, d ) ) +#define SCNiFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, i ) ) +#define SCNoFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, o ) ) +#define SCNuFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, u ) ) +#define SCNxFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, x ) ) + +#define SCNdLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) +#define SCNiLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) +#define SCNoLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) +#define SCNuLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) +#define SCNxLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) + +#define SCNdFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, d ) ) +#define SCNiFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, i ) ) +#define SCNoFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, o ) ) +#define SCNuFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, u ) ) +#define SCNxFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, x ) ) + +#define SCNdMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, d ) ) +#define SCNiMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, i ) ) +#define SCNoMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, o ) ) +#define SCNuMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, u ) ) +#define SCNxMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, x ) ) + +#define SCNdPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, d ) ) +#define SCNiPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, i ) ) +#define SCNoPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, o ) ) +#define SCNuPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, u ) ) +#define SCNxPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, x ) ) + +/* The exact-width types (int8_t, int16_t, ...) are *optional*, as not all + architectures support the necessary 8-bits-per-byte two's complement + native types. +*/ + +#if _PDCLIB_TWOS_COMPLEMENT == 1 + +#if _PDCLIB_INT_LEAST8_MAX == 0x7f +#if _PDCLIB_INT_LEAST8_MAX > _PDCLIB_INT_MAX +#define PRId8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) +#define PRIi8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) +#define PRIo8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) +#define PRIu8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) +#define PRIx8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) +#define PRIX8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, X ) ) +#endif +#define SCNd8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) +#define SCNi8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) +#define SCNo8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) +#define SCNu8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) +#define SCNx8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) +#endif + +#if _PDCLIB_INT_LEAST16_MAX == 0x7fff +#if _PDCLIB_INT_LEAST16_MAX > _PDCLIB_INT_MAX +#define PRId16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) +#define PRIi16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) +#define PRIo16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) +#define PRIu16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) +#define PRIx16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) +#define PRIX16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, X ) ) +#endif +#define SCNd16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) +#define SCNi16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) +#define SCNo16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) +#define SCNu16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) +#define SCNx16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) +#endif + +#if _PDCLIB_INT_LEAST32_MAX == 0x7fffffffl +#if _PDCLIB_INT_LEAST32_MAX > _PDCLIB_INT_MAX +#define PRId32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) +#define PRIi32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) +#define PRIo32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) +#define PRIu32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) +#define PRIx32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) +#define PRIX32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, X ) ) +#endif +#define SCNd32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) +#define SCNi32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) +#define SCNo32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) +#define SCNu32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) +#define SCNx32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) +#endif + +#if _PDCLIB_INT_LEAST64_MAX == 0x7fffffffffffffffll +#if _PDCLIB_INT_LEAST64_MAX > _PDCLIB_INT_MAX +#define PRId64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) +#define PRIi64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) +#define PRIo64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) +#define PRIu64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) +#define PRIx64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) +#define PRIX64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, X ) ) +#endif +#define SCNd64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) +#define SCNi64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) +#define SCNo64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) +#define SCNu64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) +#define SCNx64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) +#endif + +#endif + +/* 7.8.2 Functions for greatest-width integer types */ + +/* Calculate the absolute value of j */ +_PDCLIB_PUBLIC intmax_t imaxabs( intmax_t j ); + +/* Return quotient (quot) and remainder (rem) of an integer division in the + imaxdiv_t struct. +*/ +_PDCLIB_PUBLIC imaxdiv_t imaxdiv( intmax_t numer, intmax_t denom ); + +/* Separate the character array nptr into three parts: A (possibly empty) + sequence of whitespace characters, a character representation of an integer + to the given base, and trailing invalid characters (including the terminating + null character). If base is 0, assume it to be 10, unless the integer + representation starts with 0x / 0X (setting base to 16) or 0 (setting base to + 8). If given, base can be anything from 0 to 36, using the 26 letters of the + base alphabet (both lowercase and uppercase) as digits 10 through 35. + The integer representation is then converted into the return type of the + function. It can start with a '+' or '-' sign. If the sign is '-', the result + of the conversion is negated. + If the conversion is successful, the converted value is returned. If endptr + is not a NULL pointer, a pointer to the first trailing invalid character is + returned in *endptr. + If no conversion could be performed, zero is returned (and nptr in *endptr, + if endptr is not a NULL pointer). If the converted value does not fit into + the return type, the functions return INTMAX_MIN, INTMAX_MAX, or UINTMAX_MAX, + respectively, depending on the sign of the integer representation and the + return type, and errno is set to ERANGE. +*/ +/* This function is equivalent to strtol() / strtoul() in , but on + the potentially larger type. +*/ +_PDCLIB_PUBLIC intmax_t strtoimax( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); +_PDCLIB_PUBLIC uintmax_t strtoumax( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); + +/* TODO: wcstoimax(), wcstoumax() */ + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_INTTYPES_H +#include _PDCLIB_EXTEND_INTTYPES_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/iso646.h b/RockOS/sysroot/usr/include/iso646.h new file mode 100644 index 0000000..88e521c --- /dev/null +++ b/RockOS/sysroot/usr/include/iso646.h @@ -0,0 +1,31 @@ +/* Alternative spellings + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_ISO646_H +#define _PDCLIB_ISO646_H _PDCLIB_ISO646_H + +#ifndef __cplusplus +#define and && +#define and_eq &= +#define bitand & +#define bitor | +#define compl ~ +#define not ! +#define not_eq != +#define or || +#define or_eq |= +#define xor ^ +#define xor_eq ^= +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_ISO646_H +#include _PDCLIB_EXTEND_ISO646_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/limits.h b/RockOS/sysroot/usr/include/limits.h new file mode 100644 index 0000000..72268a4 --- /dev/null +++ b/RockOS/sysroot/usr/include/limits.h @@ -0,0 +1,50 @@ +/* Sizes of integer types + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_LIMITS_H +#define _PDCLIB_LIMITS_H _PDCLIB_LIMITS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +/* TODO: Defined to 1 as multibyte characters are not supported yet. */ +#define MB_LEN_MAX 1 + +#define LLONG_MIN _PDCLIB_LLONG_MIN +#define LLONG_MAX _PDCLIB_LLONG_MAX +#define ULLONG_MAX _PDCLIB_ULLONG_MAX + +#define CHAR_BIT _PDCLIB_CHAR_BIT +#define CHAR_MAX _PDCLIB_CHAR_MAX +#define CHAR_MIN _PDCLIB_CHAR_MIN +#define SCHAR_MAX _PDCLIB_SCHAR_MAX +#define SCHAR_MIN _PDCLIB_SCHAR_MIN +#define UCHAR_MAX _PDCLIB_UCHAR_MAX +#define SHRT_MAX _PDCLIB_SHRT_MAX +#define SHRT_MIN _PDCLIB_SHRT_MIN +#define INT_MAX _PDCLIB_INT_MAX +#define INT_MIN _PDCLIB_INT_MIN +#define LONG_MAX _PDCLIB_LONG_MAX +#define LONG_MIN _PDCLIB_LONG_MIN +#define USHRT_MAX _PDCLIB_USHRT_MAX +#define UINT_MAX _PDCLIB_UINT_MAX +#define ULONG_MAX _PDCLIB_ULONG_MAX + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_LIMITS_H +#include _PDCLIB_EXTEND_LIMITS_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/locale.h b/RockOS/sysroot/usr/include/locale.h new file mode 100644 index 0000000..0c18446 --- /dev/null +++ b/RockOS/sysroot/usr/include/locale.h @@ -0,0 +1,114 @@ +/* Localization + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_LOCALE_H +#define _PDCLIB_LOCALE_H _PDCLIB_LOCALE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +/* The structure returned by localeconv(). + + The values for *_sep_by_space: + 0 - no space + 1 - if symbol and sign are adjacent, a space separates them from the value; + otherwise a space separates the symbol from the value + 2 - if symbol and sign are adjacent, a space separates them; otherwise a + space separates the sign from the value + + The values for *_sign_posn: + 0 - Parentheses surround value and symbol + 1 - sign precedes value and symbol + 2 - sign succeeds value and symbol + 3 - sign immediately precedes symbol + 4 - sign immediately succeeds symbol +*/ +struct lconv +{ + char * decimal_point; /* decimal point character */ /* LC_NUMERIC */ + char * thousands_sep; /* character for separating groups of digits */ /* LC_NUMERIC */ + char * grouping; /* string indicating the size of digit groups */ /* LC_NUMERIC */ + char * mon_decimal_point; /* decimal point for monetary quantities */ /* LC_MONETARY */ + char * mon_thousands_sep; /* thousands_sep for monetary quantities */ /* LC_MONETARY */ + char * mon_grouping; /* grouping for monetary quantities */ /* LC_MONETARY */ + char * positive_sign; /* string indicating nonnegative mty. qty. */ /* LC_MONETARY */ + char * negative_sign; /* string indicating negative mty. qty. */ /* LC_MONETARY */ + char * currency_symbol; /* local currency symbol (e.g. '$') */ /* LC_MONETARY */ + char * int_curr_symbol; /* international currency symbol (e.g. "USD" */ /* LC_MONETARY */ + char frac_digits; /* fractional digits in local monetary qty. */ /* LC_MONETARY */ + char p_cs_precedes; /* if currency_symbol precedes positive qty. */ /* LC_MONETARY */ + char n_cs_precedes; /* if currency_symbol precedes negative qty. */ /* LC_MONETARY */ + char p_sep_by_space; /* if it is separated by space from pos. qty. */ /* LC_MONETARY */ + char n_sep_by_space; /* if it is separated by space from neg. qty. */ /* LC_MONETARY */ + char p_sign_posn; /* positioning of positive_sign for mon. qty. */ /* LC_MONETARY */ + char n_sign_posn; /* positioning of negative_sign for mon. qty. */ /* LC_MONETARY */ + char int_frac_digits; /* Same as above, for international format */ /* LC_MONETARY */ + char int_p_cs_precedes; /* Same as above, for international format */ /* LC_MONETARY */ + char int_n_cs_precedes; /* Same as above, for international format */ /* LC_MONETARY */ + char int_p_sep_by_space; /* Same as above, for international format */ /* LC_MONETARY */ + char int_n_sep_by_space; /* Same as above, for international format */ /* LC_MONETARY */ + char int_p_sign_posn; /* Same as above, for international format */ /* LC_MONETARY */ + char int_n_sign_posn; /* Same as above, for international format */ /* LC_MONETARY */ +}; + +/* First arguments to setlocale(). + NOTE: If you add to / modify these, look at functions/locale/setlocale.c + and keep things in sync. +*/ +/* Entire locale */ +#define LC_ALL _PDCLIB_LC_ALL +/* Collation (strcoll(), strxfrm()) */ +#define LC_COLLATE _PDCLIB_LC_COLLATE +/* Character types (, ) */ +#define LC_CTYPE _PDCLIB_LC_CTYPE +/* Monetary formatting (as returned by localeconv) */ +#define LC_MONETARY _PDCLIB_LC_MONETARY +/* Decimal-point character (for printf() / scanf() functions), string + conversions, nonmonetary formatting as returned by localeconv +*/ +#define LC_NUMERIC _PDCLIB_LC_NUMERIC +/* Time formats (strftime(), wcsftime()) */ +#define LC_TIME _PDCLIB_LC_TIME +/* Messages (not specified but allowed by C99, and specified by POSIX) + (used by perror() / strerror()) +*/ +#define LC_MESSAGES _PDCLIB_LC_MESSAGES + +/* The category parameter can be any of the LC_* macros to specify if the call + to setlocale() shall affect the entire locale or only a portion thereof. + The category locale specifies which locale should be switched to, with "C" + being the minimal default locale, and "" being the locale-specific native + environment. A NULL pointer makes setlocale() return the *current* setting. + Otherwise, returns a pointer to a string associated with the specified + category for the new locale. +*/ +_PDCLIB_PUBLIC char * setlocale( int category, const char * locale ); + +/* Returns a struct lconv initialized to the values appropriate for the current + locale setting. +*/ +_PDCLIB_PUBLIC struct lconv * localeconv( void ); + +#ifdef __cplusplus +} +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_LOCALE_H +#include _PDCLIB_EXTEND_LOCALE_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/math.h b/RockOS/sysroot/usr/include/math.h new file mode 100644 index 0000000..88b6619 --- /dev/null +++ b/RockOS/sysroot/usr/include/math.h @@ -0,0 +1,467 @@ +/* Mathematics + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_MATH_H +#define _PDCLIB_MATH_H _PDCLIB_MATH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +typedef float float_t; +typedef double double_t; + +#define HUGE_VALF _PDCLIB_HUGE_VALF; +#define HUGE_VAL _PDCLIB_HUGE_VAL; +#define HUGE_VALL _PDCLIB_HUGE_VALL; + +#define INFINITY (_PDCLIB_FLT_MAX * 2) +#define NAN ( -(0.0f / 0.0f) ) + +#define FP_FAST_FMAF +#define FP_FAST_FMA +#define FP_FAST_FMAL + +#define FP_ILOGB0 INT_MIN +#define FP_ILOGBNAN INT_MAX + +#define MATH_ERRNO 1 +#define MATH_ERREXCEPT 2 + +#define math_errhandling + +/* Classification */ + +/* FP_ZERO, FP_SUBNORMAL, FP_NORMAL */ +#define isfinite( x ) _PDCLIB_GENERIC( isfinite, x ) + +/* FP_INFINITE */ +#define isinf( x ) _PDCLIB_GENERIC( isinf, x ) + +/* FP_NAN */ +#define isnan( x ) _PDCLIB_GENERIC( isnan, x ) + +/* FP_NORMAL */ +#define isnormal( x ) _PDCLIB_GENERIC( isnormal, x ) + +/* Negative */ +#define signbit( x ) _PDCLIB_GENERIC( signbit, x ) + +/* See FP_* classes */ +#define fpclassify( x ) _PDCLIB_GENERIC( fpclassify, x ) + +#define FP_INFINITE 1 +#define FP_NAN 2 +#define FP_NORMAL 3 +#define FP_SUBNORMAL 4 +#define FP_ZERO 5 + +/* Trigonometric functions */ + +/* The principal value of the arc cosine of x. + Domain error for arguments not in the interval -1..+1. + Returns the interval 0..Pi radians. +*/ +double acos( double x ); +float acosf( float x ); +long double acosl( long double x ); + +/* The principal value of the arc sine of x. + Domain error for arguments not in the interval -1..+1. + Returns the interval -Pi/2..Pi/2 radians. +*/ +double asin( double x ); +float asinf( float x ); +long double asinl( long double x ); + +/* The principal value of the arc tangent of x. + Returns the interval -Pi/2..Pi/2 radians. +*/ +double atan( double x ); +float atanf( float x ); +long double atanl( long double x ); + +/* The value of the arc tangent of y/x, using the signs of both + arguments to determine the quadrant of the return value. + Domain error if both arguments are zero. + Returns the interval -Pi..Pi radians. +*/ +double atan2( double y, double x ); +float atan2f( float y, float x ); +long double atan2l( long double y, long double x ); + +/* Cosine of x in radians. */ +double cos( double x ); +float cosf( float x ); +long double cosl( long double x ); + +/* Sine of x in radians. */ +double sin( double x ); +float sinf( float x ); +long double sinl( long double x ); + +/* Tangent of x in radians. */ +double tan( double x ); +float tanf( float x ); +long double tanl( long double x ); + +/* Hyperbolic functions */ + +/* The (nonnegative) arc hyberbolic cosine of x. + Domain error for arguments less than 1. + Returns the interval 0..INF. +*/ +double acosh( double x ); +float acoshf( float x ); +long double acoshl( long double x ); + +/* The arc hyberbolic sine of x. +*/ +double asinh( double x ); +float asinhf( float x ); +long double asinhl( long double x ); + +/* The arc hyberbolic tangent of x. + Domain error for arguments not in -1..1. + Range error if -1 or +1. +*/ +double atanh( double x ); +float atanhf( float x ); +long double atanhl( long double x ); + +/* The hyberbolic cosine of x. + Range error if magnitude of x is too large. +*/ +double cosh( double x ); +float coshf( float x ); +long double coshl( long double x ); + +/* The hyberbolic sine of x. + Range error if magnitude of x is too large. +*/ +double sinh( double x ); +float sinhf( float x ); +long double sinhl( long double x ); + +/* The hyberbolic tangent of x. + Range error if magnitude of x is too large. +*/ +double tanh( double x ); +float tanhf( float x ); +long double tanhl( long double x ); + +/* Exponential and logarithmic functions */ + +/* The base-e exponential of x. + Range error if magnitude of x is too large. +*/ +double exp( double x ); +float expf( float x ); +long double expl( long double x ); + +/* The base-2 exponential of x. + Range error if magnitude of x is too large. +*/ +double exp2( double x ); +float exp2f( float x ); +long double exp2l( long double x ); + +/* The base-e exponential of x, minus 1. + Range error if magnitude of x is too large. + Returns e^x - 1. +*/ +double expm1( double x ); +float expm1f( float x ); +long double expm1l( long double x ); + +/* Breaks a floating-point number into a normalized fraction + and an integral power of 2 (stored in the object pointed + to by exp). +*/ +double frexp( double value, int * exp ); +float frexpf( float value, int * exp ); +long double frexpl( long double value, int * exp ); + +/* Extract the exponent of x as a signed int. + * Returns FP_ILOGB0 if x is zero, INT_MAX if x is infinite, + * FP_ILOGBNAN if x is a NaN. Range error may occur if x is 0. +*/ +double ilogb( double x ); +float ilogbf( float x ); +long double ilogbl( long double x ); + +/* Multiply x by 2^exp. Range error may occur. */ +double ldexp( double x, int exp ); +float ldexpf( float x, int exp ); +long double ldexpl( long double x, int exp ); + +/* Compute the base-e logarithm of x. + Domain error if argument is negative. + Range error if argument is zero. +*/ +double log( double x ); +float logf( float x ); +long double logl( long double x ); + +/* Compute the base-10 logarithm of x. + Domain error if argument is negative. + Range error if argument is zero. +*/ +double log10( double x ); +float log10f( float x ); +long double log10l( long double x ); + +/* Compute the base-e logarithm of 1 plus x. + Domain error if argument is less than -1. + Range error if argument is -1. +*/ +double log1p( double x ); +float log1pf( float x ); +long double log1pl( long double x ); + +/* Compute the base-2 logarithm of x. + Domain error if argument is negative. + Range error if argument is zero. +*/ +double log2( double x ); +float log2f( float x ); +long double log2l( long double x ); + +/* Extract exponent of x, as signed integer in floating-point format. + Subnormal is treated as though normalized. + Domain error if argument is zero. +*/ +double logb( double x ); +float logbf( float x ); +long double logbl( long double x ); + +/* Breaks value into integral and fractional parts, each having + the same type and sign as the argument. The integral part is + stored in the object pointed to by iptr. +*/ +double modf( double value, double * exp ); +float modff( float value, float * exp ); +long double modfl( long double value, long double * exp ); + +/* Compute x * FLT_RADIX^n efficiently. Range error may occur. */ +double scalbn( double x, int n ); +float scalbnf( float x, int n ); +long double scalbnl( long double x, int n ); + +double scalbln( double x, long int * n ); +float scalblnf( float x, long int * n ); +long double scalblnl( long double x, long int * n ); + +/* Power and absolute-value functions */ + +/* Returns x^1/3. */ +double cbrt( double x ); +float cbrtf( float x ); +long double cbrtl( long double x ); + +/* Returns absolute value of x. */ +double fabs( double x ); +float fabsf( float x ); +long double fabsl( long double x ); + +/* Returns square root of the sum of squares of x and y. + Range error may occur. +*/ +double hypot( double x, double y ); +float hypotf( float x, float y ); +long double hypotl( long double x, long double y ); + +/* Returns x^y. + Domain error if x is finite and negative and y is finite and not + an integer value. + Domain error if x is zero and y is less or equal zero. + Range error may occur. +*/ +double pow( double x, double y ); +float powf( float x, float y ); +long double powl( long double x, long double y ); + +/* Returns x^1/2. */ +double sqrt( double x ); +float sqrtf( float x ); +long double sqrtl( long double x ); + +/* Error and gamma functions */ + +/* Compute the error function of x. */ +double erf( double x ); +float erff( float x ); +long double erfl( long double x ); + +/* Compute the complementary error function of x. + Range error if x is too large. +*/ +double erfc( double x ); +float erfcf( float x ); +long double erfcl( long double x ); + +/* Compute the natural logarithm of the absolute value of gamma(x). + Range error if x is too lange, x is negative, or zero. +*/ +double lgamma( double x ); +float lgammaf( float x ); +long double lgammal( long double x ); + +/* Compute the gamma function of x. + Range error if x is negative, or zero, too large or too small. +*/ +double tgamma( double x ); +float tgammaf( float x ); +long double tgammal( long double x ); + +/* Nearest integer functions */ + +/* The smallest integer no less than x. */ +double ceil( double x ); +float ceilf( float x ); +long double ceill( long double x ); + +/* The largest integer no greater than x. */ +double floor( double x ); +float floorf( float x ); +long double floorl( long double x ); + +/* Round in current rounding direction. No "inexact" exception. */ +double nearbyint( double x ); +float nearbyintf( float x ); +long double nearbyintl( long double x ); + +/* Round in current rounding direction. Raises "inexact" exception. */ +double rint( double x ); +float rintf( float x ); +long double rintl( long double x ); + +/* Round in current rounding direction. + Range error if magnitude is too large. +*/ +long int lrint( double x ); +long int lrintf( float x ); +long int lrintl( long double x ); +long long int llrint( double x ); +long long int llrintf( float x ); +long long int llrintl( long double x ); + +/* Round to nearest, breaking ties away from zero. */ +double round( double x ); +float roundf( float x ); +long double roundl( long double x ); + +/* Round to nearest, breaking ties away from zero. + Range error if magnitude is too large. +*/ +long int lround( double x ); +long int lroundf( float x ); +long int lroundl( long double x ); +long long int llround( double x ); +long long int llroundf( float x ); +long long int llroundl( long double x ); + +/* Round toward zero. */ +double trunc( double x ); +float truncf( float x ); +long double truncl( long double x ); + +/* Remainder functions */ + +/* Compute the remainder of x / y. */ +double fmod( double x, double y ); +float fmodf( float x, float y ); +long double fmodl( long double x, long double y ); + +/* Compute the remainder of x REM y. */ +double remainder( double x, double y ); +float remainderf( float x, float y ); +long double remainderl( long double x, long double y ); + +/* Compute the remainder of x REM y. In quo store a value with + the sign of the quotient and magnitude congruent mod 2^n to + the magnitude of the integral quotient of x / y, with n + an implementation-defined integer greater than or equal to 3. +*/ +double rmquo( double x, double y ); +float rmquof( float x, float y ); +long double rmquol( long double x, long double y ); + +/* Manipulation functions */ + +/* Returns a value with magnitude of x and sign of y. */ +double copysign( double x, double y ); +float copysignf( float x, float y ); +long double copysignl( long double x, long double y ); + +/* Returns a NaN value with the given n-char sequence. */ +double nan( const char * tagp ); +float nanf( const char * tagp ); +long double nanl( const char * tagp ); + +/* Determine the next representable value after x in direction y. + Range error if result is not representable. +*/ +double nextafter( double x, double y ); +float nextafterf( float x, float y ); +long double nextafterl( long double x, long double y ); + +/* As nextafter but with long double as second parameter. */ +double nexttoward( double x, double y ); +float nexttowardf( float x, float y ); +long double nexttowardl( long double x, long double y ); + +/* Maximum, minimum, and positive difference functions */ + +/* Positive difference. */ +double fdim( double x, double y ); +float fdimf( float x, float y ); +long double fdiml( long double x, long double y ); + +/* Maximum. */ +double fmax( double x, double y ); +float fmaxf( float x, float y ); +long double fmaxl( long double x, long double y ); + +/* Minimum. */ +double fmin( double x, double y ); +float fminf( float x, float y ); +long double fminl( long double x, long double y ); + +/* Multiply-add. */ +double fma( double x, double y, double z ); +float fmaf( float x, float y, float z ); +long double fmal( long double x, long double y, long double z ); + +/* Comparison macros (without "invalid" FP exception) */ + +#define isgreater( x, y ) + +#define isgreaterequal( x, y ) + +#define isless( x, y ) + +#define islessequal( x, y ) + +#define islessgreater( x, y ) + +#define isunordered( x, y ) + +#ifdef __cplusplus +} +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_MATH_H +#include _PDCLIB_EXTEND_MATH_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_config.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_config.h new file mode 100644 index 0000000..653f89e --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_config.h @@ -0,0 +1,915 @@ +/* Internal PDCLib configuration <_PDCLIB_config.h> + ("Example" platform target, for PDCLib development) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_CONFIG_H +#define _PDCLIB_CONFIG_H _PDCLIB_CONFIG_H + +/* -------------------------------------------------------------------------- */ +/* Misc */ +/* -------------------------------------------------------------------------- */ + +/* Helper macros also documented in _PDCLIB_internal.h, but defined here as */ +/* they are needed in this file already. */ +/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending. */ +/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */ +#define _PDCLIB_cc( x, y ) x ## y +#define _PDCLIB_concat( x, y ) _PDCLIB_cc( x, y ) + +/* exit() can signal success to the host environment by the value of zero or */ +/* the constant EXIT_SUCCESS. Failure is signaled by EXIT_FAILURE. Note that */ +/* any other return value is "implementation-defined", i.e. your environment */ +/* is not required to handle it gracefully. Set your definitions here. */ +#define _PDCLIB_SUCCESS 0 +#define _PDCLIB_FAILURE -1 + +/* qsort() in requires a function that swaps two memory areas. */ +/* Below is a naive implementation that can be improved significantly for */ +/* specific platforms, e.g. by swapping int instead of char. */ +#define _PDCLIB_memswp( i, j, size ) \ + char tmp; \ + do { \ + tmp = *i; \ + *i++ = *j; \ + *j++ = tmp; \ + } while ( --size ); + +/* Define this to some compiler directive that can be written after the */ +/* parameter list of a function declaration to indicate the function does */ +/* never return. If your compiler does not support such a directive, define */ +/* to nothing. (This is to avoid warnings with the exit functions under GCC */ +/* when compiling with C99/C++ settings, where C11 _Noreturn is unavailable.) */ +#define _PDCLIB_NORETURN __attribute__(( noreturn )) + +/* -------------------------------------------------------------------------- */ +/* Symbol Visibility */ +/* -------------------------------------------------------------------------- */ + +/* This defines _PDCLIB_PUBLIC to indicate external linkage, and _PDCLIB_LOCAL + to indicate local linkage. +*/ + +#ifdef _PDCLIB_STATIC_DEFINE + #define _PDCLIB_PUBLIC + #define _PDCLIB_LOCAL +#else + #if defined _WIN32 || defined __CYGWIN__ + #ifdef _PDCLIB_BUILD + #ifdef __GNUC__ + #define _PDCLIB_PUBLIC __attribute__ ((dllexport)) + #else + #define _PDCLIB_PUBLIC __declspec(dllexport) + #endif + #else + #ifdef __GNUC__ + #define _PDCLIB_PUBLIC __attribute__ ((dllimport)) + #else + #define _PDCLIB_PUBLIC __declspec(dllimport) + #endif + #endif + #define _PDCLIB_LOCAL + #else + #if __GNUC__ >= 4 + #define _PDCLIB_PUBLIC __attribute__ ((visibility ("default"))) + #define _PDCLIB_LOCAL __attribute__ ((visibility ("hidden"))) + #else + #define _PDCLIB_PUBLIC + #define _PDCLIB_LOCAL + #endif + #endif +#endif + +/* -------------------------------------------------------------------------- */ +/* Integers */ +/* -------------------------------------------------------------------------- */ +/* The defines below make use of predefines offered by GCC and clang. If you */ +/* adapt PDCLib for a different compiler family, you will have to use what */ +/* that compiler provides, or enter actual values. */ +/* -------------------------------------------------------------------------- */ + +/* At the point of writing, PDCLib makes no provisions for, nor has it been */ +/* tested, on a platform that uses signed magnitude or one's complement to */ +/* encode its integers. Most importantly, there are no guarantees that the */ +/* negative zero of those encodings is in any form handled gracefully. */ +#define _PDCLIB_TWOS_COMPLEMENT 1 + +/* 1234 for little endian, 4321 for big endian; other types not supported. */ +#define _PDCLIB_ENDIANESS __BYTE_ORDER__ + +/* Calculation of a minimum value from a given maximum for two's complement. */ +/* (For convenience only, used only in this header file below.) */ +#define _PDCLIB_MIN_CALC( max ) ( ( - max ) - 1 ) + +/* Now, introducting the various predefines to the _PDCLIB_* namespace, so */ +/* the rest of PDCLib can work with that and adapting to a different compiler */ +/* will require changes only in this one file. */ + +/* Bits in a char */ +#define _PDCLIB_CHAR_BIT __CHAR_BIT__ + +/* Maximum and minimum values of signed / unsigned char */ +#define _PDCLIB_SCHAR_MAX __SCHAR_MAX__ +#define _PDCLIB_SCHAR_MIN _PDCLIB_MIN_CALC( __SCHAR_MAX__ ) +#define _PDCLIB_UCHAR_MAX ( __SCHAR_MAX__ * 2 + 1 ) + +/* Whether the 'char' type is unsigned */ +#ifdef __CHAR_UNSIGNED__ +#define _PDCLIB_CHAR_MAX _PDCLIB_UCHAR_MAX +#define _PDCLIB_CHAR_MIN 0 +#else +#define _PDCLIB_CHAR_MAX _PDCLIB_SCHAR_MAX +#define _PDCLIB_CHAR_MIN _PDCLIB_SCHAR_MIN +#endif + +/* Maximum and minimum values of signed / unsigned short */ +#define _PDCLIB_SHRT_MAX __SHRT_MAX__ +#define _PDCLIB_SHRT_MIN _PDCLIB_MIN_CALC( __SHRT_MAX__ ) +#define _PDCLIB_USHRT_MAX ( __SHRT_MAX__ * 2u + 1 ) + +/* Maximum and minimum values of signed / unsigned int */ +#define _PDCLIB_INT_MAX __INT_MAX__ +#define _PDCLIB_INT_MIN _PDCLIB_MIN_CALC( __INT_MAX__ ) +#define _PDCLIB_UINT_MAX ( __INT_MAX__ * 2u + 1 ) + +/* Maximum and minimum values of signed / unsigned long */ +#define _PDCLIB_LONG_MAX __LONG_MAX__ +#define _PDCLIB_LONG_MIN _PDCLIB_MIN_CALC( __LONG_MAX__ ) +#define _PDCLIB_ULONG_MAX ( __LONG_MAX__ * 2ul + 1 ) + +/* Maximum and minimum values of signed / unsigned long long */ +#define _PDCLIB_LLONG_MAX __LONG_LONG_MAX__ +#define _PDCLIB_LLONG_MIN _PDCLIB_MIN_CALC( __LONG_LONG_MAX__ ) +#define _PDCLIB_ULLONG_MAX ( __LONG_LONG_MAX__ * 2ull + 1 ) + +/* -------------------------------------------------------------------------- */ +/* defines a set of integer types that are of a minimum width, and */ +/* "usually fastest" on the system. (If, for example, accessing a single char */ +/* requires the CPU to access a complete int and then mask out the char, the */ +/* "usually fastest" type of at least 8 bits would be int, not char.) */ +/* If you do not have information on the relative performance of the types, */ +/* the standard allows you to define any type that meets minimum width and */ +/* signedness requirements. */ +/* The first define is the appropriate basic type (e.g. "long int"), second */ +/* its max value, the third its min value (both expressed in the given type). */ +/* The same follows for the unsigned type (for which the minimum value is */ +/* obviously zero and need not be defined). */ +/* There *are* predefines provided for the printf()/scanf() length specifiers */ +/* but tunneling them through here would have added many lines of repetitive */ +/* and mostly redundant defines. They are determined in <_PDCLIB_internal.h>. */ +/* -------------------------------------------------------------------------- */ + +/* int_fast8_t / uint_fast8_t */ +#define _PDCLIB_int_fast8_t __INT_FAST8_TYPE__ +#define _PDCLIB_INT_FAST8_MAX __INT_FAST8_MAX__ +#define _PDCLIB_INT_FAST8_MIN _PDCLIB_MIN_CALC( __INT_FAST8_MAX__ ) +#define _PDCLIB_uint_fast8_t __UINT_FAST8_TYPE__ +#define _PDCLIB_UINT_FAST8_MAX __UINT_FAST8_MAX__ + +/* int_least8_t / uint_least8_t */ +#define _PDCLIB_int_least8_t __INT_LEAST8_TYPE__ +#define _PDCLIB_INT_LEAST8_MAX __INT_LEAST8_MAX__ +#define _PDCLIB_INT_LEAST8_MIN _PDCLIB_MIN_CALC( __INT_LEAST8_MAX__ ) +#define _PDCLIB_uint_least8_t __UINT_LEAST8_TYPE__ +#define _PDCLIB_UINT_LEAST8_MAX __UINT_LEAST8_MAX__ + +/* int_fast16_t / uint_fast16_t */ +#define _PDCLIB_int_fast16_t __INT_FAST16_TYPE__ +#define _PDCLIB_INT_FAST16_MAX __INT_FAST16_MAX__ +#define _PDCLIB_INT_FAST16_MIN _PDCLIB_MIN_CALC( __INT_FAST16_MAX__ ) +#define _PDCLIB_uint_fast16_t __UINT_FAST16_TYPE__ +#define _PDCLIB_UINT_FAST16_MAX __UINT_FAST16_MAX__ + +/* int_least16_t / uint_least16_t */ +#define _PDCLIB_int_least16_t __INT_LEAST16_TYPE__ +#define _PDCLIB_INT_LEAST16_MAX __INT_LEAST16_MAX__ +#define _PDCLIB_INT_LEAST16_MIN _PDCLIB_MIN_CALC( __INT_LEAST16_MAX__ ) +#define _PDCLIB_uint_least16_t __UINT_LEAST16_TYPE__ +#define _PDCLIB_UINT_LEAST16_MAX __UINT_LEAST16_MAX__ + +/* int_fast32_t / uint_fast32_t */ +#define _PDCLIB_int_fast32_t __INT_FAST32_TYPE__ +#define _PDCLIB_INT_FAST32_MAX __INT_FAST32_MAX__ +#define _PDCLIB_INT_FAST32_MIN _PDCLIB_MIN_CALC( __INT_FAST32_MAX__ ) +#define _PDCLIB_uint_fast32_t __UINT_FAST32_TYPE__ +#define _PDCLIB_UINT_FAST32_MAX __UINT_FAST32_MAX__ + +/* int_least32_t / uint_least32_t */ +#define _PDCLIB_int_least32_t __INT_LEAST32_TYPE__ +#define _PDCLIB_INT_LEAST32_MAX __INT_LEAST32_MAX__ +#define _PDCLIB_INT_LEAST32_MIN _PDCLIB_MIN_CALC( __INT_LEAST32_MAX__ ) +#define _PDCLIB_uint_least32_t __UINT_LEAST32_TYPE__ +#define _PDCLIB_UINT_LEAST32_MAX __UINT_LEAST32_MAX__ + +/* int_fast64_t / uint_fast64_t */ +#define _PDCLIB_int_fast64_t __INT_FAST64_TYPE__ +#define _PDCLIB_INT_FAST64_MAX __INT_FAST64_MAX__ +#define _PDCLIB_INT_FAST64_MIN _PDCLIB_MIN_CALC( __INT_FAST64_MAX__ ) +#define _PDCLIB_uint_fast64_t __UINT_FAST64_TYPE__ +#define _PDCLIB_UINT_FAST64_MAX __UINT_FAST64_MAX__ + +/* int_least64_t / uint_least64_t */ +#define _PDCLIB_int_least64_t __INT_LEAST64_TYPE__ +#define _PDCLIB_INT_LEAST64_MAX __INT_LEAST64_MAX__ +#define _PDCLIB_INT_LEAST64_MIN _PDCLIB_MIN_CALC( __INT_LEAST64_MAX__ ) +#define _PDCLIB_uint_least64_t __UINT_LEAST64_TYPE__ +#define _PDCLIB_UINT_LEAST64_MAX __UINT_LEAST64_MAX__ + +/* Exact-width integer types. These are *optional*. If your platform does not */ +/* support types of these exact widths in two's complement encoding, just */ +/* leave them undefined. */ +#define _PDCLIB_int8_t __INT8_TYPE__ +#define _PDCLIB_int16_t __INT16_TYPE__ +#define _PDCLIB_int32_t __INT32_TYPE__ +#define _PDCLIB_int64_t __INT64_TYPE__ +#define _PDCLIB_uint8_t __UINT8_TYPE__ +#define _PDCLIB_uint16_t __UINT16_TYPE__ +#define _PDCLIB_uint32_t __UINT32_TYPE__ +#define _PDCLIB_uint64_t __UINT64_TYPE__ + +/* INTn_C / UINTn_C macros to define int_leastN_t / uint_leastN_t literals. */ +#if defined( __INT8_C ) +/* GCC */ +#define _PDCLIB_INT_LEAST8_C __INT8_C +#define _PDCLIB_UINT_LEAST8_C __UINT8_C +#define _PDCLIB_INT_LEAST16_C __INT16_C +#define _PDCLIB_UINT_LEAST16_C __UINT16_C +#define _PDCLIB_INT_LEAST32_C __INT32_C +#define _PDCLIB_UINT_LEAST32_C __UINT32_C +#define _PDCLIB_INT_LEAST64_C __INT64_C +#define _PDCLIB_UINT_LEAST64_C __UINT64_C +#elif defined( __INT8_C_SUFFIX__ ) +/* Clang */ +#define _PDCLIB_INT_LEAST8_C(c) _PDCLIB_concat( c, __INT8_C_SUFFIX__ ) +#define _PDCLIB_UINT_LEAST8_C(c) _PDCLIB_concat( c, __UINT8_C_SUFFIX__ ) +#define _PDCLIB_INT_LEAST16_C(c) _PDCLIB_concat( c, __INT16_C_SUFFIX__ ) +#define _PDCLIB_UINT_LEAST16_C(c) _PDCLIB_concat( c, __UINT16_C_SUFFIX__ ) +#define _PDCLIB_INT_LEAST32_C(c) _PDCLIB_concat( c, __INT32_C_SUFFIX__ ) +#define _PDCLIB_UINT_LEAST32_C(c) _PDCLIB_concat( c, __UINT32_C_SUFFIX__ ) +#define _PDCLIB_INT_LEAST64_C(c) _PDCLIB_concat( c, __INT64_C_SUFFIX__ ) +#define _PDCLIB_UINT_LEAST64_C(c) _PDCLIB_concat( c, __UINT64_C_SUFFIX__ ) +#else +#error Please create your own _PDCLIB_config.h. Using the existing one as-is will not work. (Unsupported *INTn_C macros.) +#endif + +/* defines the div() function family that allows taking quotient */ +/* and remainder of an integer division in one operation. Many platforms */ +/* support this in hardware / opcode, and the standard permits ordering of */ +/* the return structure in any way to fit the hardware. That is why those */ +/* structs can be configured here. */ + +struct _PDCLIB_div_t +{ + int quot; + int rem; +}; + +struct _PDCLIB_ldiv_t +{ + long int quot; + long int rem; +}; + +struct _PDCLIB_lldiv_t +{ + long long int quot; + long long int rem; +}; + +/* -------------------------------------------------------------------------- */ +/* What follows are a couple of "special" typedefs and their limits. */ +/* -------------------------------------------------------------------------- */ + +/* The result type of substracting two pointers */ +#define _PDCLIB_ptrdiff_t __PTRDIFF_TYPE__ +#define _PDCLIB_PTRDIFF_MAX __PTRDIFF_MAX__ +#define _PDCLIB_PTRDIFF_MIN _PDCLIB_MIN_CALC( __PTRDIFF_MAX__ ) + +/* An integer type that can be accessed as atomic entity (think asynchronous */ +/* interrupts). In a freestanding environment, the type itself need not be */ +/* defined, but its limits must. (Don't ask.) GCC is so kind to predefine it, */ +/* but clang is only giving us its MAX value, so we use that to identify the */ +/* type in _PDCLIB_int.h if the type definition is unavailable. */ +#ifdef __SIG_ATOMIC_TYPE__ +#define _PDCLIB_sig_atomic_t __SIG_ATOMIC_TYPE__ +#endif +#define _PDCLIB_SIG_ATOMIC_MAX __SIG_ATOMIC_MAX__ +#define _PDCLIB_SIG_ATOMIC_MIN _PDCLIB_MIN_CALC( __SIG_ATOMIC_MAX__ ) + +/* Result type of the 'sizeof' operator (must be unsigned). */ +/* Note: In , this is taken as the base for RSIZE_MAX, the limit */ +/* for the bounds-checking interfaces of Annex K. The recommendation by the */ +/* standard is to use ( SIZE_MAX >> 1 ) when "targeting machines with large */ +/* addess spaces", whereas small address spaces should use SIZE_MAX directly. */ +#define _PDCLIB_size_t __SIZE_TYPE__ +#define _PDCLIB_SIZE_MAX __SIZE_MAX__ + +/* Large enough an integer to hold all character codes of the widest */ +/* supported locale. */ +#define _PDCLIB_wchar_t __WCHAR_TYPE__ +#define _PDCLIB_WCHAR_MAX __WCHAR_MAX__ +#define _PDCLIB_WCHAR_MIN __WCHAR_MIN__ + +/* Large enough an integer to hold all character codes of the widest */ +/* supported locale plus WEOF (which needs not to be equal to EOF, nor needs */ +/* to be of negative value). */ +#define _PDCLIB_wint_t __WINT_TYPE__ +#define _PDCLIB_WINT_MAX __WINT_MAX__ +#define _PDCLIB_WINT_MIN __WINT_MIN__ + +/* Integer types capable of taking the (cast) value of a void *, and having */ +/* the value cast back to void *, comparing equal to the original. */ +#define _PDCLIB_intptr_t __INTPTR_TYPE__ +#define _PDCLIB_INTPTR_MAX __INTPTR_MAX__ +#define _PDCLIB_INTPTR_MIN _PDCLIB_MIN_CALC( __INTPTR_MAX__ ) +#define _PDCLIB_uintptr_t __UINTPTR_TYPE__ +#define _PDCLIB_UINTPTR_MAX __UINTPTR_MAX__ + +/* Largest supported integer type. Implementation note: see _PDCLIB_atomax(). */ +#define _PDCLIB_intmax_t __INTMAX_TYPE__ +#define _PDCLIB_INTMAX_MAX __INTMAX_MAX__ +#define _PDCLIB_INTMAX_MIN _PDCLIB_MIN_CALC( __INTMAX_MAX__ ) +#define _PDCLIB_INTMAX_C __INTMAX_C +#define _PDCLIB_uintmax_t __UINTMAX_TYPE__ +#define _PDCLIB_UINTMAX_MAX __UINTMAX_MAX__ +#define _PDCLIB_UINTMAX_C __UINTMAX_C + +/* defines imaxdiv(), which is equivalent to the div() function */ +/* family (see further above) with intmax_t as basis. */ +struct _PDCLIB_imaxdiv_t +{ + _PDCLIB_intmax_t quot; + _PDCLIB_intmax_t rem; +}; + +/* -------------------------------------------------------------------------- */ +/* Time types, limits, constants, and paths */ +/* -------------------------------------------------------------------------- */ + +/* _PDCLIB_time is the type for type_t; _PDCLIB_clock for clock_t. Both types */ +/* are defined as "real types capable of representing times". The "range and */ +/* precision of times representable" is implementation-defined. */ + +/* For clock_t, the standard defines that dividing the result of clock() by */ +/* CLOCKS_PER_SEC gives the seconds elapsed. */ +#ifdef __CYGWIN__ +#define _PDCLIB_clock_t unsigned long +#else +#define _PDCLIB_clock_t long +#endif +#define _PDCLIB_CLOCKS_PER_SEC 1000000 + +/* For time_t, no such divider exists. Most implementations use a count of */ +/* seconds since a specified epoch. While PDCLib really should support other */ +/* encodings as well, for now "count of seconds" is the only supported one. */ +/* MIN / MAX values for time_t are not required by the standard (and they are */ +/* not "exported" from the _PDCLIB namespace), but they are useful in support */ +/* of the _tzcode implementation. */ +#ifdef __MINGW64__ +#define _PDCLIB_time_t long long +#define _PDCLIB_TIME_MAX __LONG_LONG_MAX__ +#define _PDCLIB_TIME_MIN _PDCLIB_MIN_CALC( __LONG_LONG_MAX__ ) +#else +#define _PDCLIB_time_t long +#define _PDCLIB_TIME_MAX __LONG_MAX__ +#define _PDCLIB_TIME_MIN _PDCLIB_MIN_CALC( __LONG_MAX__ ) +#endif + +/* "Unix time" uses 1970-01-01T00:00:00 as "epoch". If your system uses a */ +/* different "zero point" for its timestamps, set this to the offset between */ +/* your epoch and Unix epoch. (For example, NTP uses 1900-01-01T00:00:00 as */ +/* epoch, giving an offset of (70 * 365 + 17) * 86400 = 220898800 seconds.) */ +#define _PDCLIB_EPOCH_BIAS INT64_C( 0 ) + +/* Leave this alone for now. */ +#define _PDCLIB_TIME_UTC 1 + +/* Path to TZ data. */ +/* IMPORTANT: *Must* end with separator character! */ +/* It does make it much easier for the time data handling code if this detail */ +/* can be relied upon and need not be handled in code. */ +#define _PDCLIB_TZDIR "/usr/share/zoneinfo/" + +/* Path to default (local) timezone */ +#define _PDCLIB_TZDEFAULT "/etc/localtime" + +/* -------------------------------------------------------------------------- */ +/* Floating Point */ +/* -------------------------------------------------------------------------- */ + +/* Whether the implementation rounds toward zero (0), to nearest (1), toward */ +/* positive infinity (2), or toward negative infinity (3). (-1) signifies */ +/* indeterminable rounding, any other value implementation-specific rounding. */ +#define _PDCLIB_FLT_ROUNDS -1 + +/* Check for explanations on each of these values. */ +#define _PDCLIB_FLT_EVAL_METHOD __FLT_EVAL_METHOD__ + +#define _PDCLIB_FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +#define _PDCLIB_DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +#define _PDCLIB_LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ + +#define _PDCLIB_FLT_RADIX __FLT_RADIX__ + +#define _PDCLIB_FLT_MANT_DIG __FLT_MANT_DIG__ +#define _PDCLIB_DBL_MANT_DIG __DBL_MANT_DIG__ +#define _PDCLIB_LDBL_MANT_DIG __LDBL_MANT_DIG__ + +#define _PDCLIB_FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ +#define _PDCLIB_DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ +#define _PDCLIB_LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ + +#define _PDCLIB_DECIMAL_DIG __DECIMAL_DIG__ + +#define _PDCLIB_FLT_DIG __FLT_DIG__ +#define _PDCLIB_DBL_DIG __DBL_DIG__ +#define _PDCLIB_LDBL_DIG __LDBL_DIG__ + +#define _PDCLIB_FLT_MIN_EXP __FLT_MIN_EXP__ +#define _PDCLIB_DBL_MIN_EXP __DBL_MIN_EXP__ +#define _PDCLIB_LDBL_MIN_EXP __LDBL_MIN_EXP__ + +#define _PDCLIB_FLT_MIN_10_EXP __FLT_MIN_10_EXP__ +#define _PDCLIB_DBL_MIN_10_EXP __DBL_MIN_10_EXP__ +#define _PDCLIB_LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ + +#define _PDCLIB_FLT_MAX_EXP __FLT_MAX_EXP__ +#define _PDCLIB_DBL_MAX_EXP __DBL_MAX_EXP__ +#define _PDCLIB_LDBL_MAX_EXP __LDBL_MAX_EXP__ + +#define _PDCLIB_FLT_MAX_10_EXP __FLT_MAX_10_EXP__ +#define _PDCLIB_DBL_MAX_10_EXP __DBL_MAX_10_EXP__ +#define _PDCLIB_LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ + +#define _PDCLIB_FLT_MAX __FLT_MAX__ +#define _PDCLIB_DBL_MAX __DBL_MAX__ +#define _PDCLIB_LDBL_MAX __LDBL_MAX__ + +#define _PDCLIB_FLT_EPSILON __FLT_EPSILON__ +#define _PDCLIB_DBL_EPSILON __DBL_EPSILON__ +#define _PDCLIB_LDBL_EPSILON __LDBL_EPSILON__ + +#define _PDCLIB_FLT_MIN __FLT_MIN__ +#define _PDCLIB_DBL_MIN __DBL_MIN__ +#define _PDCLIB_LDBL_MIN __LDBL_MIN__ + +#define _PDCLIB_FLT_TRUE_MIN __FLT_DENORM_MIN__ +#define _PDCLIB_DBL_TRUE_MIN __DBL_DENORM_MIN__ +#define _PDCLIB_LDBL_TRUE_MIN __LDBL_DENORM_MIN__ + +/* Macros for deconstructing floating point values */ +/* This assumes that the floating point value has been memcpy'd into an array */ +/* of _PDCLIB_bigint_digit_t (see _PDCLIB_bigint_from_*dbl.c with the array */ +/* passed to the macro as parameter. */ +#define _PDCLIB_FLT_SIGN( data ) ( ( data[1] & 0x8000 ) >> 15 ) +#define _PDCLIB_FLT_EXP( data ) ( ( data[1] & 0x7f80 ) >> 7 ) +#define _PDCLIB_FLT_SIZE( data ) ( data[1] &= 0x007f, 2 ) + +#define _PDCLIB_DBL_SIGN( data ) ( ( data[3] & 0x8000 ) >> 15 ) +#define _PDCLIB_DBL_EXP( data ) ( ( data[3] & 0x7ff0u ) >> 4 ) +#define _PDCLIB_DBL_SIZE( data ) ( data[3] &= 0x000fu, 4 ) + +/* Most platforms today use IEEE 754 single precision for 'float', and double */ +/* precision for 'double'. But type 'long double' varies. We use what the */ +/* compiler states about LDBL_MANT_DIG to determine the type. */ +#if _PDCLIB_LDBL_MANT_DIG == 64 + +/* Intel "Extended Precision" format, using 80 bits (64bit mantissa) */ +#define _PDCLIB_LDBL_SIGN( data ) ( ( data[4] & 0x8000u ) >> 15 ) +#define _PDCLIB_LDBL_EXP( data ) ( data[4] & 0x7fffu ) +#define _PDCLIB_LDBL_SIZE( data ) ( data[3] &= 0x7fffu, 4 ) + +#elif _PDCLIB_LDBL_MANT_DIG == 113 + +/* IEEE "Quadruple Precision" format, using 128 bits (113bit mantissa) */ +#define _PDCLIB_LDBL_SIGN( data ) ( ( data[7] & 0x8000u ) >> 15 ) +#define _PDCLIB_LDBL_EXP( data ) ( data[7] & 0x7fffu ) +#define _PDCLIB_LDBL_SIZE( data ) 7 + +#else + +/* IEEE "Double Precision" format, using 64 bits (53bit mantissa) */ +/* (Same as DBL above) */ +#define _PDCLIB_LDBL_SIGN( data ) ( ( data[3] & 0x8000 ) >> 15 ) +#define _PDCLIB_LDBL_EXP( data ) ( ( data[3] & 0x7ff0u ) >> 4 ) +#define _PDCLIB_LDBL_SIZE( data ) ( data[3] &= 0x000fu, 4 ) + +#endif + +/* Given the definitions for *_MANT_START above, which resolve to "pointer + to most dignificant byte of mantissa", the operand to use to get at the + less significant bytes. (That would be - for i386, x86_64, and ARM.) +*/ +#define _PDCLIB_FLT_OP - + +/* -------------------------------------------------------------------------- */ +/* Big Integer Arithmetic */ +/* -------------------------------------------------------------------------- */ +/* In support of the floating point converstions required by printf() etc., */ +/* PDCLib provides rudimentary big integer arithmetics. The _PDCLIB_bigint_t */ +/* type stores values in a sequence of integer "digits", which may be of any */ +/* uint_leastN_t type with N being 32 or 16. Note that multiplication and */ +/* division require the help of the next larger type. So set the define to */ +/* 32 if efficient 64bit integer arithmetics are available on your platform, */ +/* and to 16 otherwise. */ +/* (The value range of _PDCLIB_bigint_t is not affected by this setting.) */ + +#define _PDCLIB_BIGINT_DIGIT_BITS 16 + +/* -------------------------------------------------------------------------- */ +/* Platform-dependent macros defined by the standard headers. */ +/* -------------------------------------------------------------------------- */ + +/* The offsetof macro */ +/* Contract: Expand to an integer constant expression of type size_t, which */ +/* represents the offset in bytes to the structure member from the beginning */ +/* of the structure. If the specified member is a bitfield, behaviour is */ +/* undefined. */ +/* There is no standard-compliant way to do this. */ +/* This implementation casts an integer zero to 'pointer to type', and then */ +/* takes the address of member. This is undefined behaviour but should work */ +/* on most compilers. */ +#define _PDCLIB_offsetof( type, member ) ( (size_t) &( ( (type *) 0 )->member ) ) + +/* Variable Length Parameter List Handling () */ +/* The macros defined by are highly dependent on the calling */ +/* conventions used, and you probably have to replace them with builtins of */ +/* your compiler. */ + +#if defined( __i386 ) + +/* The following generic implementation works only for pure stack-based */ +/* architectures, and only if arguments are aligned to pointer type. Credits */ +/* to Michael Moody, who contributed this to the Public Domain. */ + +/* Internal helper macro. va_round is not part of . */ +#define _PDCLIB_va_round( type ) ( (sizeof(type) + sizeof(void *) - 1) & ~(sizeof(void *) - 1) ) + +typedef char * _PDCLIB_va_list; +#define _PDCLIB_va_arg( ap, type ) ( (ap) += (_PDCLIB_va_round(type)), ( *(type*) ( (ap) - (_PDCLIB_va_round(type)) ) ) ) +#define _PDCLIB_va_copy( dest, src ) ( (dest) = (src), (void)0 ) +#define _PDCLIB_va_end( ap ) ( (ap) = (void *)0, (void)0 ) +#define _PDCLIB_va_start( ap, parmN ) ( (ap) = (char *) &parmN + ( _PDCLIB_va_round(parmN) ), (void)0 ) + +#elif defined( __x86_64 ) || defined( __arm__ ) || defined( __ARM_NEON ) + +/* No way to cover x86_64 or arm with a generic implementation, as it uses */ +/* register-based parameter passing. Using compiler builtins here. */ +typedef __builtin_va_list _PDCLIB_va_list; +#define _PDCLIB_va_arg( ap, type ) ( __builtin_va_arg( ap, type ) ) +#define _PDCLIB_va_copy( dest, src ) ( __builtin_va_copy( dest, src ) ) +#define _PDCLIB_va_end( ap ) ( __builtin_va_end( ap ) ) +#define _PDCLIB_va_start( ap, parmN ) ( __builtin_va_start( ap, parmN ) ) + +#else + +#error Please create your own _PDCLIB_config.h. Using the existing one as-is will not work. (Unsupported varargs.) + +#endif + +/* -------------------------------------------------------------------------- */ +/* OS "glue", part 1 */ +/* These are values and data type definitions that you would have to adapt to */ +/* the capabilities and requirements of your OS. */ +/* The actual *functions* of the OS interface are declared in _PDCLIB_glue.h. */ +/* -------------------------------------------------------------------------- */ + +/* I/O ---------------------------------------------------------------------- */ + +/* The type of the file descriptor returned by _PDCLIB_open(), i.e. whatever */ +/* the underlying kernel uses for stream identification. */ +typedef int _PDCLIB_fd_t; + +/* The value of type _PDCLIB_fd_t returned by _PDCLIB_open() if the operation */ +/* failed. */ +#define _PDCLIB_NOHANDLE ( (_PDCLIB_fd_t) -1 ) + +/* The default size for file buffers. Must be at least 256. */ +#define _PDCLIB_BUFSIZ 1024 + +/* The minimum number of files the implementation guarantees can opened */ +/* simultaneously. Must be at least 8. Depends largely on how the platform */ +/* does the bookkeeping in whatever is called by _PDCLIB_open(). PDCLib puts */ +/* no further limits on the number of open files other than available memory. */ +#define _PDCLIB_FOPEN_MAX 8 + +/* Length of the longest filename the implementation guarantees to support. */ +#define _PDCLIB_FILENAME_MAX 128 + +/* Maximum length of filenames generated by tmpnam(). (See tmpfile.c.) */ +#define _PDCLIB_L_tmpnam 52 + +/* Number of distinct file names that can be generated by tmpnam(). */ +#define _PDCLIB_TMP_MAX 50 + +/* The values of SEEK_SET, SEEK_CUR and SEEK_END, used by fseek(). */ +/* Since at least one platform (POSIX) uses the same symbols for its own */ +/* "seek" function, you should use whatever the host defines (if it does */ +/* define them). */ +#define _PDCLIB_SEEK_SET 0 +#define _PDCLIB_SEEK_CUR 1 +#define _PDCLIB_SEEK_END 2 + +/* The number of characters that can be buffered with ungetc(). The standard */ +/* guarantees only one (1); PDCLib supports larger values, but applications */ +/* relying on this would rely on implementation-defined behaviour (not good). */ +#define _PDCLIB_UNGETCBUFSIZE 1 + +/* The number of functions that can be registered with atexit(). Needs to be */ +/* at least 33 (32 guaranteed by the standard, plus _PDCLIB_closeall() which */ +/* is used internally by PDCLib to close all open streams). */ +/* TODO: Should expand dynamically. */ +#define _PDCLIB_ATEXIT_SLOTS 40 + +/* errno -------------------------------------------------------------------- */ + +/* These are the values that _PDCLIB_errno can be set to by the library. */ +/* */ +/* By keeping PDCLib's errno in the _PDCLIB_* namespace, the library is */ +/* capable of "translating" between errno values used by the hosting OS and */ +/* those used and passed out by the library. */ +/* */ +/* Example: In the example platform, the remove() function uses the unlink() */ +/* system call as backend. Linux sets its errno to EISDIR if you try to */ +/* unlink() a directory, but POSIX demands EPERM. Within the remove() */ +/* function, you can catch 'errno == EISDIR', and set '*_PDCLIB_errno_func() */ +/* = _PDCLIB_EPERM'. Anyone using PDCLib's will "see" EPERM instead */ +/* of EISDIR. */ +/* */ +/* If you do not want that kind of translation, you might want to "match" the */ +/* values used by PDCLib with those used by the host OS, to avoid confusion. */ +/* auxiliary/errno/errno_readout.c provides a convenience program to read */ +/* those errno values mandated by the standard from a platform's , */ +/* giving output that can readily be pasted here. */ +/* Either way, note that the list below, the list in PDCLib's , and */ +/* the list in _PDCLIB_stdinit.h, need to be kept in sync. */ +/* */ +/* The values below are read from a Linux system. */ + +/* Argument list too long */ +#define _PDCLIB_E2BIG 7 +/* Permission denied */ +#define _PDCLIB_EACCES 13 +/* Address in use */ +#define _PDCLIB_EADDRINUSE 98 +/* Address not available */ +#define _PDCLIB_EADDRNOTAVAIL 99 +/* Address family not supported */ +#define _PDCLIB_EAFNOSUPPORT 97 +/* Resource unavailable, try again */ +#define _PDCLIB_EAGAIN 11 +/* Connection already in progress */ +#define _PDCLIB_EALREADY 114 +/* Bad file descriptor */ +#define _PDCLIB_EBADF 9 +/* Bad message */ +#define _PDCLIB_EBADMSG 74 +/* Device or resource busy */ +#define _PDCLIB_EBUSY 16 +/* Operation canceled */ +#define _PDCLIB_ECANCELED 125 +/* No child processes */ +#define _PDCLIB_ECHILD 10 +/* Connection aborted */ +#define _PDCLIB_ECONNABORTED 103 +/* Connection refused */ +#define _PDCLIB_ECONNREFUSED 111 +/* Connection reset */ +#define _PDCLIB_ECONNRESET 104 +/* Resource deadlock would occur */ +#define _PDCLIB_EDEADLK 35 +/* Destination address required */ +#define _PDCLIB_EDESTADDRREQ 89 +/* Mathematics argument out of domain of function */ +#define _PDCLIB_EDOM 33 +/* File exists */ +#define _PDCLIB_EEXIST 17 +/* Bad address */ +#define _PDCLIB_EFAULT 14 +/* File too large */ +#define _PDCLIB_EFBIG 27 +/* Host is unreachable */ +#define _PDCLIB_EHOSTUNREACH 113 +/* Identifier removed */ +#define _PDCLIB_EIDRM 43 +/* Illegal byte sequence */ +#define _PDCLIB_EILSEQ 84 +/* Operation in progress */ +#define _PDCLIB_EINPROGRESS 115 +/* Interrupted function */ +#define _PDCLIB_EINTR 4 +/* Invalid argument */ +#define _PDCLIB_EINVAL 22 +/* I/O error */ +#define _PDCLIB_EIO 5 +/* Socket is connected */ +#define _PDCLIB_EISCONN 106 +/* Is a directory */ +#define _PDCLIB_EISDIR 21 +/* Too many levels of symbolic links */ +#define _PDCLIB_ELOOP 40 +/* File descriptor value too large */ +#define _PDCLIB_EMFILE 24 +/* Too many links */ +#define _PDCLIB_EMLINK 31 +/* Message too large */ +#define _PDCLIB_EMSGSIZE 90 +/* Filename too long */ +#define _PDCLIB_ENAMETOOLONG 36 +/* Network is down */ +#define _PDCLIB_ENETDOWN 100 +/* Connection aborted by network */ +#define _PDCLIB_ENETRESET 102 +/* Network unreachable */ +#define _PDCLIB_ENETUNREACH 101 +/* Too many files open in system */ +#define _PDCLIB_ENFILE 23 +/* No buffer space available */ +#define _PDCLIB_ENOBUFS 105 +/* No message is available on the STREAM head read queue */ +#define _PDCLIB_ENODATA 61 +/* No such device */ +#define _PDCLIB_ENODEV 19 +/* No such file or directory */ +#define _PDCLIB_ENOENT 2 +/* Executable file format error */ +#define _PDCLIB_ENOEXEC 8 +/* No locks available */ +#define _PDCLIB_ENOLCK 37 +/* Link has been severed */ +#define _PDCLIB_ENOLINK 67 +/* Not enough space */ +#define _PDCLIB_ENOMEM 12 +/* No message of the desired type */ +#define _PDCLIB_ENOMSG 42 +/* Protocol not available */ +#define _PDCLIB_ENOPROTOOPT 92 +/* No space left on device */ +#define _PDCLIB_ENOSPC 28 +/* No STREAM resources */ +#define _PDCLIB_ENOSR 63 +/* Not a STREAM */ +#define _PDCLIB_ENOSTR 60 +/* Function not supported */ +#define _PDCLIB_ENOSYS 38 +/* The socket is not connected */ +#define _PDCLIB_ENOTCONN 107 +/* Not a directory */ +#define _PDCLIB_ENOTDIR 20 +/* Directory not empty */ +#define _PDCLIB_ENOTEMPTY 39 +/* State not recoverable */ +#define _PDCLIB_ENOTRECOVERABLE 131 +/* Not a socket */ +#define _PDCLIB_ENOTSOCK 88 +/* Not supported */ +#define _PDCLIB_ENOTSUP 95 +/* Inappropriate I/O control operation */ +#define _PDCLIB_ENOTTY 25 +/* No such device or address */ +#define _PDCLIB_ENXIO 6 +/* Operation not supported on socket */ +#define _PDCLIB_EOPNOTSUPP 95 +/* Value too large to be stored in data type */ +#define _PDCLIB_EOVERFLOW 75 +/* Previous owner died */ +#define _PDCLIB_EOWNERDEAD 130 +/* Operation not permitted */ +#define _PDCLIB_EPERM 1 +/* Broken pipe */ +#define _PDCLIB_EPIPE 32 +/* Protocol error */ +#define _PDCLIB_EPROTO 71 +/* Protocol not supported */ +#define _PDCLIB_EPROTONOSUPPORT 93 +/* Protocol wrong type for socket */ +#define _PDCLIB_EPROTOTYPE 91 +/* Result too large */ +#define _PDCLIB_ERANGE 34 +/* Read-only file system */ +#define _PDCLIB_EROFS 30 +/* Invalid seek */ +#define _PDCLIB_ESPIPE 29 +/* No such process */ +#define _PDCLIB_ESRCH 3 +/* Stream ioctl() timeout */ +#define _PDCLIB_ETIME 62 +/* Connection timed out */ +#define _PDCLIB_ETIMEDOUT 110 +/* Text file busy */ +#define _PDCLIB_ETXTBSY 26 +/* Operation would block */ +#define _PDCLIB_EWOULDBLOCK 11 +/* Cross-device link */ +#define _PDCLIB_EXDEV 18 + +/* The highest defined errno value, plus one. This is used to set the size */ +/* of the array in struct _PDCLIB_lc_text_t holding error messages for the */ +/* strerror() and perror() functions. (If you change this value because you */ +/* are using additional errno values, you *HAVE* to provide appropriate error */ +/* messages for *ALL* locales.) */ +#define _PDCLIB_ERRNO_MAX 132 + +/* The error message used for unknown error codes (generated by errno_readout */ +/* for consistency between the 'holes' in the list of defined error messages */ +/* and the text generated by e.g. strerror() for out-of-range error values.) */ +#define _PDCLIB_EUNKNOWN_TEXT (char*)"unknown error" + +/* locale data -------------------------------------------------------------- */ + +/* The default path where PDCLib should look for its locale data. */ +/* Must end with the appropriate separator character. */ +#define _PDCLIB_LOCALE_PATH "/usr/share/pdclib/i18n/" + +/* The name of the environment variable that can be used to override that */ +/* path setting. */ +#define _PDCLIB_LOCALE_PATH_ENV PDCLIB_I18N + +#ifdef __CYGWIN__ +typedef unsigned int wint_t; +#endif + +/* threads ------------------------------------------------------------------ */ + +/* This is relying on underlying implementation to provide thread */ +/* support. */ +/* The problem here is we cannot just #include and access the */ +/* original definitions. The standard library must not drag identifiers into */ +/* the user's namespace, so we have to set our own definitions in the _PDCLIB */ +/* namespace. Which are, obviously, platform-specific. */ +/* If you do NOT want to provide threads support, define __STDC_NO_THREADS__ */ +/* to 1 and simply delete the threads.h header and the corresponding files in */ +/* functions/threads/. This makes PDCLib non-thread-safe (obviously), as the */ +/* safeguards against race conditions (e.g. in ) will be omitted. */ + +/* auxiliary/pthread/pthread_readout.c provides a convenience program to read */ +/* appropriate definitions from a platform's , giving output that */ +/* can be copy & pasted here. */ + +#define __STDC_NO_THREADS__ + +#ifndef __STDC_NO_THREADS__ + +typedef unsigned long int _PDCLIB_thrd_t; +typedef union { unsigned char _PDCLIB_cnd_t_data[ 48 ]; long long int _PDCLIB_cnd_t_align; } _PDCLIB_cnd_t; +#if defined( __arm__ ) || defined( __ARM_NEON ) +typedef union { unsigned char _PDCLIB_mtx_t_data[ 24 ]; long int _PDCLIB_mtx_t_align; } _PDCLIB_mtx_t; +#else +typedef union { unsigned char _PDCLIB_mtx_t_data[ 40 ]; long int _PDCLIB_mtx_t_align; } _PDCLIB_mtx_t; +#endif +typedef unsigned int _PDCLIB_tss_t; +typedef int _PDCLIB_once_flag; +#define _PDCLIB_ONCE_FLAG_INIT 0 +#define _PDCLIB_RECURSIVE_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER +/* This one is actually hidden in , and only if __USE_POSIX is */ +/* defined prior to #include (PTHREAD_DESTRUCTOR_ITERATIONS). */ +#define _PDCLIB_TSS_DTOR_ITERATIONS 4 +/* The following are not made public in any header, but used internally for */ +/* interfacing with the pthread API. */ +typedef union { unsigned char _PDCLIB_cnd_attr_t_data[ 4 ]; int _PDCLIB_cnd_attr_t_align; } _PDCLIB_cnd_attr_t; +typedef union { unsigned char _PDCLIB_mtx_attr_t_data[ 4 ]; int _PDCLIB_mtx_attr_t_align; } _PDCLIB_mtx_attr_t; +#if defined( __arm__ ) || defined( __ARM_NEON ) +typedef union { unsigned char _PDCLIB_thrd_attr_t_data[ 36 ]; long int _PDCLIB_thrd_attr_t_align; } _PDCLIB_thrd_attr_t; +#else +typedef union { unsigned char _PDCLIB_thrd_attr_t_data[ 56 ]; long int _PDCLIB_thrd_attr_t_align; } _PDCLIB_thrd_attr_t; +#endif +/* Static initialization of recursive mutex. */ +#if defined( __arm__ ) || defined( __ARM_NEON ) +#define _PDCLIB_MTX_RECURSIVE_INIT { {\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } +/* Static initialization of plain / timeout mutex (identical with pthread). */ +#define _PDCLIB_MTX_PLAIN_INIT { {\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } +#else +#define _PDCLIB_MTX_RECURSIVE_INIT { {\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } +/* Static initialization of plain / timeout mutex (identical with pthread). */ +#define _PDCLIB_MTX_PLAIN_INIT { {\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } +#endif + +#endif + +/* Termux defines atexit in crtbegin_so.o leading to a multiple definition */ +/* error from the linker. This is a crude workaround, which does NOT fix */ +/* various run-time issues on Termux likely also related to crt linkage. But */ +/* at least things compile OK, and SOME tests can be run. */ +#if defined( __ARM_NEON ) +#define atexit _PDCLIB_atexit +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_defguard.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_defguard.h new file mode 100644 index 0000000..cd51abe --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_defguard.h @@ -0,0 +1,29 @@ +/* Definition guard <_PDCLIB_defguard.h> + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_DEFGUARD_H +#define _PDCLIB_DEFGUARD_H _PDCLIB_DEFGUARD_H + +#if defined( __ANDROID__ ) +/* typedef sigset_t */ +#include "bits/signal_types.h" +#endif + +/* Linux defines its own version of struct timespec (from ) in + some internal header (depending on clib implementation), which leads + to problems when accessing e.g. sys/time.h (type redefinition). + The solution is to set the Linux header's include guard (to avoid + Linux' definition), and to include PDCLib's to define the + type unambiguously. +*/ + +#define _TIMESPEC_DEFINED +#define _SYS__TIMESPEC_H_ +#define _STRUCT_TIMESPEC + +#include + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_glue.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_glue.h new file mode 100644 index 0000000..3e59302 --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_glue.h @@ -0,0 +1,93 @@ +/* OS glue functions declaration <_PDCLIB_glue.h> + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_GLUE_H +#define _PDCLIB_GLUE_H _PDCLIB_GLUE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +/* -------------------------------------------------------------------------- */ +/* OS "glue", part 2 */ +/* These are the functions you will have to touch, as they are where PDCLib */ +/* interfaces with the operating system. */ +/* They operate on data types partially defined by _PDCLIB_config.h. */ +/* -------------------------------------------------------------------------- */ + +/* stdlib.h */ + +/* A system call that terminates the calling process, returning a given status + to the environment. +*/ +_PDCLIB_LOCAL _PDCLIB_Noreturn void _PDCLIB_Exit( int status ) _PDCLIB_NORETURN; + + +/* stdio.h */ + +/* A system call that opens a file identified by name in a given mode. Return + a file descriptor uniquely identifying that file. + (The mode is the return value of the _PDCLIB_filemode() function.) +*/ +_PDCLIB_LOCAL _PDCLIB_fd_t _PDCLIB_open( const char * const filename, unsigned int mode ); + +/* A system call that writes a stream's buffer. + Returns 0 on success, EOF on write error. + Sets stream error flags and errno appropriately on error. +*/ +_PDCLIB_LOCAL int _PDCLIB_flushbuffer( struct _PDCLIB_file_t * stream ); + +/* A system call that fills a stream's buffer. + Returns 0 on success, EOF on read error / EOF. + Sets stream EOF / error flags and errno appropriately on error. +*/ +_PDCLIB_LOCAL int _PDCLIB_fillbuffer( struct _PDCLIB_file_t * stream ); + +/* A system call that repositions within a file. Returns new offset on success, + -1 / errno on error. +*/ +_PDCLIB_LOCAL _PDCLIB_int_least64_t _PDCLIB_seek( struct _PDCLIB_file_t * stream, _PDCLIB_int_least64_t offset, int whence ); + +/* A system call that closes a file identified by given file descriptor. Return + zero on success, non-zero otherwise. +*/ +_PDCLIB_LOCAL int _PDCLIB_close( _PDCLIB_fd_t fd ); + +/* A system call that changes the mode of a given stream to that passed as + argument (the argument being the value returned by _PDCLIB_filemode()), + *without* closing the stream. See comments in example implementation + for details. Return zero if the requested mode change is not supported + for this stream and freopen() should try to close and reopen the stream; + return INT_MIN if the change is not supported and freopen() should close + and NOT try to close / reopen (i.e., fail). Return any other value on + success. +*/ +_PDCLIB_LOCAL int _PDCLIB_changemode( struct _PDCLIB_file_t * stream, unsigned int mode ); + +/* A system call that returns a canonicalized absolute filename in + dynamically allocated memory, or NULL if the file does not exist. +*/ +_PDCLIB_LOCAL char * _PDCLIB_realpath( const char * path ); + +/* A system call that removes a file. Return zero on success, non-zero + otherwise. +*/ +_PDCLIB_LOCAL int _PDCLIB_remove( const char * pathname ); + +/* A system call that renames a file from given old name to given new name. + Return zero on success, non-zero otherwise. In case of failure, the file + must still be accessible by old name. Any handling of open files etc. is + done by standard rename() already. +*/ +_PDCLIB_LOCAL int _PDCLIB_rename( const char * oldpath, const char * newpath ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_internal.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_internal.h new file mode 100644 index 0000000..1ad3c66 --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_internal.h @@ -0,0 +1,686 @@ +/* PDCLib internal logic <_PDCLIB_internal.h> + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_INTERNAL_H +#define _PDCLIB_INTERNAL_H _PDCLIB_INTERNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* -------------------------------------------------------------------------- */ +/* You should not have to edit anything in this file; if you DO have to, it */ +/* would be considered a bug / missing feature: notify the author(s). */ +/* -------------------------------------------------------------------------- */ + +#include "pdclib/_PDCLIB_config.h" + +/* -------------------------------------------------------------------------- */ +/* Standard Version */ +/* -------------------------------------------------------------------------- */ + +/* Many a compiler gets this wrong, so you might have to hardcode it instead. */ + +#if __STDC__ != 1 +#error Compiler does not define _ _STDC_ _ to 1 (not standard-compliant)! +#endif + +#ifndef __STDC_HOSTED__ +#error Compiler does not define _ _STDC_HOSTED_ _ (not standard-compliant)! +#elif __STDC_HOSTED__ != 0 && __STDC_HOSTED__ != 1 +#error Compiler does not define _ _STDC_HOSTED_ _ to 0 or 1 (not standard-compliant)! +#endif + +/* null pointer constant -- ((void *)0) in C, 0 in C++98, nullptr since C++11 */ +#ifdef __cplusplus +#if __cplusplus >= 201103L +#define _PDCLIB_NULL nullptr +#else +#define _PDCLIB_NULL 0 +#endif +#else +#define _PDCLIB_NULL ((void *)0) +#endif + +/* restrict / inline enabled for C99 onward only */ +#if defined( __cplusplus ) || ! defined( __STDC_VERSION ) || __STDC_VERSION__ < 199901L +#define _PDCLIB_restrict +#define _PDCLIB_inline +#else +#define _PDCLIB_restrict restrict +#define _PDCLIB_inline inline +#endif + +/* noreturn enabled for C11 onward only */ +#if defined( __cplusplus ) && __cplusplus >= 201103L +#define _PDCLIB_Noreturn [[noreturn]] +#else +#if defined( __STDC_VERSION__ ) >= 201112L +#define _PDCLIB_Noreturn _Noreturn +#else +#define _PDCLIB_Noreturn +#endif +#endif + +/* -------------------------------------------------------------------------- */ +/* Helper macros: */ +/* */ +/* (defined in _PDCLIB_config.h) */ +/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending. */ +/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */ +/* */ +/* (defined below) */ +/* _PDCLIB_static_assert( e, m ) does a compile-time assertion of expression */ +/* e, with m as the failure message. */ +/* _PDCLIB_symbol2string( x ) turn symbol into string literal (by adding ""). */ +/* _PDCLIB_value2string( x ) expands a preprocessor token and turns it into a */ +/* string literal (by adding ""). */ +/* _PDCLIB_TYPE_SIGNED( type ) resolves to true if type is signed. */ +/* _PDCLIB_LOCK( mtx ) lock a mutex if library has threads support. */ +/* _PDCLIB_UNLOCK( mtx ) unlock a mutex if library has threads support. */ +/* _PDCLIB_CONSTRAINT_VIOLATION( e ) expand errno number e to parameter list */ +/* fit for Annex K constraint violation */ +/* handler. */ +/* _PDCLIB_Generic( f, fp ) expand to _PDCLIB_f, _PDCLIB_ff, _PDCLIB_fl */ +/* depending on fp being sizeof double, float, or */ +/* long double. */ +/* -------------------------------------------------------------------------- */ + +#define _PDCLIB_static_assert( e, m ) enum { _PDCLIB_concat( _PDCLIB_assert_, __LINE__ ) = 1 / ( !!(e) ) } + +#define _PDCLIB_TYPE_SIGNED( type ) (((type) -1) < 0) + +#define _PDCLIB_symbol2string( x ) #x +#define _PDCLIB_value2string( x ) _PDCLIB_symbol2string( x ) + +#ifndef __STDC_NO_THREADS__ +#define _PDCLIB_LOCK( mtx ) mtx_lock( &mtx ) +#define _PDCLIB_UNLOCK( mtx ) mtx_unlock( &mtx ) +#else +#define _PDCLIB_LOCK( mtx ) +#define _PDCLIB_UNLOCK( mtx ) +#endif + +#define _PDCLIB_CONSTRAINT_VIOLATION( e ) _PDCLIB_lc_messages->errno_texts[e], NULL, e + +#define _PDCLIB_GETC( fh ) ( ( fh->ungetidx == 0 ) ? ( unsigned char )fh->buffer[ fh->bufidx++ ] : ( unsigned char )fh->ungetbuf[ --fh->ungetidx ] ) + +#define _PDCLIB_CHECKBUFFER( fh ) ( ( ( fh->bufidx == fh->bufend ) && ( fh->ungetidx == 0 ) ) ? _PDCLIB_fillbuffer( fh ) : 0 ) + +#define _PDCLIB_GENERIC( func, x ) ( ( sizeof( x ) == sizeof( double ) ) ? _PDCLIB_ ## func ## d( x ) : \ + ( sizeof( x ) == sizeof( float ) ) ? _PDCLIB_ ## func ## f( x ) : \ + ( _PDCLIB_ ## func ## l( x ) ) ) + +/* -------------------------------------------------------------------------- */ +/* Preparing the length modifiers used in . */ +/* -------------------------------------------------------------------------- */ + +/* We use the _MAX value as a proxy for the actual type here. That is crude + but the best we can do, cross-platform wise. + Identifying which type the leastN_t / fastN_t / intmax_t / intptr_t are + and providing the appropriate printf()/scanf() length modifier. +*/ + +#if _PDCLIB_INT_FAST8_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_FAST8_PREFIX hh +#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_FAST8_PREFIX h +#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_FAST8_PREFIX +#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_FAST8_PREFIX l +#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_FAST8_PREFIX ll +#else +#error No matching native type for int_fast8_t. Please check your setup. +#endif + +#if _PDCLIB_INT_FAST16_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_FAST16_PREFIX hh +#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_FAST16_PREFIX h +#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_FAST16_PREFIX +#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_FAST16_PREFIX l +#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_FAST16_PREFIX ll +#else +#error No matching native type for int_fast16_t. Please check your setup. +#endif + +#if _PDCLIB_INT_FAST32_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_FAST32_PREFIX hh +#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_FAST32_PREFIX h +#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_FAST32_PREFIX +#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_FAST32_PREFIX l +#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_FAST32_PREFIX ll +#else +#error No matching native type for int_fast32_t. Please check your setup. +#endif + +#if _PDCLIB_INT_FAST64_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_FAST64_PREFIX hh +#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_FAST64_PREFIX h +#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_FAST64_PREFIX +#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_FAST64_PREFIX l +#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_FAST64_PREFIX ll +#else +#error No matching native type for int_fast64_t. Please check your setup. +#endif + +/* Many of the combinations below can very likely be ruled out logically. + All combinations are still listed for simplicity's sake (and to not fall + into the trap of false assumptions). +*/ + +#if _PDCLIB_INT_LEAST8_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_LEAST8_PREFIX hh +#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_LEAST8_PREFIX h +#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_LEAST8_PREFIX +#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_LEAST8_PREFIX l +#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_LEAST8_PREFIX ll +#else +#error No matching native type for int_least8_t. Please check your setup. +#endif + +#if _PDCLIB_INT_LEAST16_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_LEAST16_PREFIX hh +#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_LEAST16_PREFIX h +#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_LEAST16_PREFIX +#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_LEAST16_PREFIX l +#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_LEAST16_PREFIX ll +#else +#error No matching native type for int_least16_t. Please check your setup. +#endif + +#if _PDCLIB_INT_LEAST32_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_LEAST32_PREFIX hh +#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_LEAST32_PREFIX h +#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_LEAST32_PREFIX +#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_LEAST32_PREFIX l +#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_LEAST32_PREFIX ll +#else +#error No matching native type for int_least32_t. Please check your setup. +#endif + +#if _PDCLIB_INT_LEAST64_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INT_LEAST64_PREFIX hh +#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INT_LEAST64_PREFIX h +#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INT_LEAST64_PREFIX +#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INT_LEAST64_PREFIX l +#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INT_LEAST64_PREFIX ll +#else +#error No matching native type for int_least64_t. Please check your setup. +#endif + +#if _PDCLIB_INTMAX_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INTMAX_PREFIX hh +#elif _PDCLIB_INTMAX_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INTMAX_PREFIX h +#elif _PDCLIB_INTMAX_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INTMAX_PREFIX +#elif _PDCLIB_INTMAX_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INTMAX_PREFIX l +#elif _PDCLIB_INTMAX_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INTMAX_PREFIX ll +#else +#error No matching native type for intmax_t. Please check your setup. +#endif + +#if _PDCLIB_INTPTR_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_INTPTR_PREFIX hh +#elif _PDCLIB_INTPTR_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_INTPTR_PREFIX h +#elif _PDCLIB_INTPTR_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_INTPTR_PREFIX +#elif _PDCLIB_INTPTR_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_INTPTR_PREFIX l +#elif _PDCLIB_INTPTR_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_INTPTR_PREFIX ll +#else +#error No matching native type for intptr_t. Please check your setup. +#endif + +/* We might not have a type definition for sig_atomic_t at this point. The */ +/* clang compiler does not provide an appropriate predefine for it. So if we */ +/* do not have _PDCLIB_sig_atomic_t, identify the type trough its MAX value. */ + +#ifndef _PDCLIB_sig_atomic_t + +#if _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_SCHAR_MAX +#define _PDCLIB_sig_atomic_t char +#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_SHRT_MAX +#define _PDCLIB_sig_atomic_t short +#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_INT_MAX +#define _PDCLIB_sig_atomic_t int +#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_LONG_MAX +#define _PDCLIB_sig_atomic_t long +#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_LLONG_MAX +#define _PDCLIB_sig_atomic_t long long +#else +#error No matching native type for sig_atomic_t. Please check your setup. +#endif + +#endif + +/* -------------------------------------------------------------------------- */ +/* Various internals */ +/* -------------------------------------------------------------------------- */ + +/* Flags for representing mode (see fopen()). Note these must fit the same + status field as the _IO?BF flags in and the internal flags below. +*/ +#define _PDCLIB_FREAD (1u<<3) +#define _PDCLIB_FWRITE (1u<<4) +#define _PDCLIB_FAPPEND (1u<<5) +#define _PDCLIB_FRW (1u<<6) +#define _PDCLIB_FBIN (1u<<7) + +/* Internal flags, made to fit the same status field as the flags above. */ +/* -------------------------------------------------------------------------- */ +/* free() the buffer memory on closing (setvbuf()) */ +#define _PDCLIB_FREEBUFFER (1u<<8) +/* stream has encountered error / EOF */ +#define _PDCLIB_ERRORFLAG (1u<<9) +#define _PDCLIB_EOFFLAG (1u<<10) +/* stream is wide-oriented */ +#define _PDCLIB_WIDESTREAM (1u<<11) +/* stream is byte-oriented */ +#define _PDCLIB_BYTESTREAM (1u<<12) +/* file associated with stream should be remove()d on closing (tmpfile()) */ +#define _PDCLIB_DELONCLOSE (1u<<13) + +/* Position / status structure for getpos() / fsetpos(). */ +struct _PDCLIB_fpos_t +{ + _PDCLIB_uint_least64_t offset; /* File position offset */ + int status; /* Multibyte parsing state (unused, reserved) */ +}; + +/* FILE structure */ +struct _PDCLIB_file_t +{ + _PDCLIB_fd_t handle; /* OS file handle */ + char * buffer; /* Pointer to buffer memory */ + _PDCLIB_size_t bufsize; /* Size of buffer */ + _PDCLIB_size_t bufidx; /* Index of current position in buffer */ + _PDCLIB_size_t bufend; /* Index of last pre-read character in buffer */ + struct _PDCLIB_fpos_t pos; /* Offset and multibyte parsing state */ + _PDCLIB_size_t ungetidx; /* Number of ungetc()'ed characters */ + unsigned char ungetbuf[_PDCLIB_UNGETCBUFSIZE]; /* ungetc() buffer */ + unsigned int status; /* Status flags; see above */ + /* multibyte parsing status to be added later */ +#ifndef __STDC_NO_THREADS__ + _PDCLIB_mtx_t mtx; /* Multithreading safety */ +#endif + char * filename; /* Name the current stream has been opened with */ + struct _PDCLIB_file_t * next; /* Pointer to next struct (internal) */ +}; + +/* -------------------------------------------------------------------------- */ +/* Internal data types */ +/* -------------------------------------------------------------------------- */ + +/* Structure required by both atexit() and exit() for handling atexit functions */ +struct _PDCLIB_exitfunc_t +{ + struct _PDCLIB_exitfunc_t * next; + void ( *func )( void ); +}; + +/* Status structure required by _PDCLIB_print(). */ +struct _PDCLIB_status_t +{ + int base; /* base to which the value shall be converted */ + _PDCLIB_int_fast32_t flags; /* flags and length modifiers */ + _PDCLIB_size_t n; /* print: maximum characters to be written */ + /* scan: number matched conversion specifiers */ + _PDCLIB_size_t i; /* number of characters read/written */ + _PDCLIB_size_t current;/* chars read/written in the CURRENT conversion */ + char * s; /* *sprintf(): target buffer */ + /* *sscanf(): source string */ + _PDCLIB_size_t width; /* specified field width */ + int prec; /* specified field precision */ + struct _PDCLIB_file_t * stream; /* *fprintf() / *fscanf() stream */ + _PDCLIB_va_list arg; /* argument stack */ +}; + +/* -------------------------------------------------------------------------- */ +/* Declaration of helper functions (implemented in functions/_PDCLIB). */ +/* -------------------------------------------------------------------------- */ + +/* This is the main function called by atoi(), atol() and atoll(). */ +_PDCLIB_LOCAL _PDCLIB_intmax_t _PDCLIB_atomax( const char * s ); + +/* Two helper functions used by strtol(), strtoul() and long long variants. */ +_PDCLIB_LOCAL const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base ); +_PDCLIB_LOCAL _PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limit, char * sign ); + +/* Helper function used by strtof(), strtod(), and strtold(). */ +_PDCLIB_LOCAL int _PDCLIB_strtod_prelim( const char * p, char * sign, char ** endptr ); + +/* Digits arrays used by various integer conversion functions */ +extern const char _PDCLIB_digits[]; +extern const char _PDCLIB_Xdigits[]; + +/* The worker for all printf() type of functions. The pointer spec should point + to the introducing '%' of a conversion specifier. The status structure is to + be that of the current printf() function, of which the members n, s, stream + and arg will be preserved; i will be updated; and all others will be trashed + by the function. + Returns a pointer to the first character not parsed as conversion specifier. +*/ +_PDCLIB_LOCAL const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status ); + +/* The worker for all scanf() type of functions. The pointer spec should point + to the introducing '%' of a conversion specifier. The status structure is to + be that of the current scanf() function, of which the member stream will be + preserved; n, i, and s will be updated; and all others will be trashed by + the function. + Returns a pointer to the first character not parsed as conversion specifier, + or NULL in case of error. + FIXME: Should distinguish between matching and input error +*/ +_PDCLIB_LOCAL const char * _PDCLIB_scan( const char * spec, struct _PDCLIB_status_t * status ); + +/* Parsing any fopen() style filemode string into a number of flags. */ +_PDCLIB_LOCAL unsigned int _PDCLIB_filemode( const char * mode ); + +/* Initialize a FILE structure. If the parameter is NULL, a new FILE structure + is malloc'ed. Returns a pointer to the stream if successful, NULL otherwise. +*/ +_PDCLIB_LOCAL struct _PDCLIB_file_t * _PDCLIB_init_file_t( struct _PDCLIB_file_t * stream ); + +/* Sanity checking and preparing of read buffer, should be called first thing + by any stdio read-data function. + Returns 0 on success, EOF on error. + On error, EOF / error flags and errno are set appropriately. +*/ +_PDCLIB_LOCAL int _PDCLIB_prepread( struct _PDCLIB_file_t * stream ); + +/* Sanity checking, should be called first thing by any stdio write-data + function. + Returns 0 on success, EOF on error. + On error, error flags and errno are set appropriately. +*/ +_PDCLIB_LOCAL int _PDCLIB_prepwrite( struct _PDCLIB_file_t * stream ); + +/* Closing all streams on program exit */ +_PDCLIB_LOCAL void _PDCLIB_closeall( void ); + +/* Check if a given year is a leap year. Parameter is offset to 1900. */ +_PDCLIB_LOCAL int _PDCLIB_is_leap( int year_offset ); + +/* Read a specified number of lines from a file stream; return a pointer to + allocated memory holding the lines (newlines replaced with zero terminators) + or NULL in case of error. +*/ +_PDCLIB_LOCAL char * _PDCLIB_load_lines( struct _PDCLIB_file_t * stream, _PDCLIB_size_t lines ); + +/* Returns the (locale dependent) error message associated with the argument + errno value. +*/ +_PDCLIB_LOCAL char * _PDCLIB_geterrtext( int errnum ); + +/* Returns non-zero if the given stream is on the internal list of open files, + zero otherwise. Sets the second paramenter (if not NULL) to the previous + stream on the list (or NULL if the given stream is the first on the list). + This function does not lock _PDCLIB_filelist_mtx, this needs to be done by + the calling function (_PDCLIB_getstream() or freopen()). +*/ +_PDCLIB_LOCAL int _PDCLIB_isstream( struct _PDCLIB_file_t * stream, struct _PDCLIB_file_t ** previous ); + +/* Removes the given stream from the internal list of open files. Returns zero + if successful, non-zero otherwise. In case of error, sets errno to EBADF. + This function does not lock _PDCLIB_filelist_mtx, this needs to be done by + the calling function (fclose()). +*/ +_PDCLIB_LOCAL int _PDCLIB_getstream( struct _PDCLIB_file_t * stream ); + +/* Backend for strtok and strtok_s (plus potential extensions like strtok_r). */ +_PDCLIB_LOCAL char * _PDCLIB_strtok( char * _PDCLIB_restrict s1, _PDCLIB_size_t * _PDCLIB_restrict s1max, const char * _PDCLIB_restrict s2, char ** _PDCLIB_restrict ptr ); + +/* Conversion of exponent notation to floating point */ +_PDCLIB_LOCAL long double _PDCLIB_naive_etod( const char * s, char ** endptr ); + +/* Conversion of hexadecimal notation to floating point */ +_PDCLIB_LOCAL long double _PDCLIB_naive_ptod( const char * s, char ** endptr ); + +/* -------------------------------------------------------------------------- */ +/* Declaration of math helper functions (implemented in functions/math). */ +/* -------------------------------------------------------------------------- */ + +int _PDCLIB_isnand( double x ); +int _PDCLIB_isnanf( float x ); +int _PDCLIB_isnanl( long double x ); + +int _PDCLIB_isinfd( double x ); +int _PDCLIB_isinff( float x ); +int _PDCLIB_isinfl( long double x ); + +int _PDCLIB_signbitd( double x ); +int _PDCLIB_signbitf( float x ); +int _PDCLIB_signbitl( long double x ); + +int _PDCLIB_isfinited( double x ); +int _PDCLIB_isfinitef( float x ); +int _PDCLIB_isfinitel( long double x ); + +int _PDCLIB_isnormald( double x ); +int _PDCLIB_isnormalf( float x ); +int _PDCLIB_isnormall( long double x ); + +int _PDCLIB_fpclassifyd( double x ); +int _PDCLIB_fpclassifyf( float x ); +int _PDCLIB_fpclassifyl( long double x ); + +/* -------------------------------------------------------------------------- */ +/* errno */ +/* -------------------------------------------------------------------------- */ + +/* A mechanism for delayed evaluation. + If PDCLib would call its error number "errno" directly, there would be no way + to catch its value from underlying system calls that also use it (i.e., POSIX + operating systems). That is why we use an internal name, providing a means to + access it through . +*/ +_PDCLIB_PUBLIC int * _PDCLIB_errno_func( void ); + +/* -------------------------------------------------------------------------- */ +/* support */ +/* -------------------------------------------------------------------------- */ + +#define _PDCLIB_LC_ALL 0 +#define _PDCLIB_LC_COLLATE 1 +#define _PDCLIB_LC_CTYPE 2 +#define _PDCLIB_LC_MONETARY 3 +#define _PDCLIB_LC_NUMERIC 4 +#define _PDCLIB_LC_TIME 5 +#define _PDCLIB_LC_MESSAGES 6 +#define _PDCLIB_LC_COUNT 7 + +#define _PDCLIB_CTYPE_ALPHA 1 +#define _PDCLIB_CTYPE_BLANK 2 +#define _PDCLIB_CTYPE_CNTRL 4 +#define _PDCLIB_CTYPE_GRAPH 8 +#define _PDCLIB_CTYPE_PUNCT 16 +#define _PDCLIB_CTYPE_SPACE 32 +#define _PDCLIB_CTYPE_LOWER 64 +#define _PDCLIB_CTYPE_UPPER 128 + +#define _PDCLIB_CHARSET_SIZE ( 1 << _PDCLIB_CHAR_BIT ) + +struct _PDCLIB_lc_lconv_numeric_t +{ + char * decimal_point; + char * thousands_sep; + char * grouping; +}; + +struct _PDCLIB_lc_lconv_monetary_t +{ + char * mon_decimal_point; + char * mon_thousands_sep; + char * mon_grouping; + char * positive_sign; + char * negative_sign; + char * currency_symbol; + char * int_curr_symbol; + char frac_digits; + char p_cs_precedes; + char n_cs_precedes; + char p_sep_by_space; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + char int_frac_digits; + char int_p_cs_precedes; + char int_n_cs_precedes; + char int_p_sep_by_space; + char int_n_sep_by_space; + char int_p_sign_posn; + char int_n_sign_posn; +}; + +struct _PDCLIB_lc_numeric_monetary_t +{ + struct lconv * lconv; + int numeric_alloced; + int monetary_alloced; +}; + +extern struct _PDCLIB_lc_numeric_monetary_t _PDCLIB_lc_numeric_monetary; + +struct _PDCLIB_lc_collate_t +{ + int alloced; + /* 1..3 code points */ + /* 1..8, 18 collation elements of 3 16-bit integers */ +}; + +extern struct _PDCLIB_lc_collate_t _PDCLIB_lc_collate_C; +extern struct _PDCLIB_lc_collate_t * _PDCLIB_lc_collate; + +/* One entry to the _PDCLIB_lc_ctype_t.entry data table */ +struct _PDCLIB_lc_ctype_entry_t +{ + _PDCLIB_uint_least16_t flags; /* Whether a character is of a given CTYPE */ + unsigned char upper; /* Result for toupper() */ + unsigned char lower; /* Result for tolower() */ +}; + +struct _PDCLIB_lc_ctype_t +{ + int alloced; /* .entry dynamically allocated? */ + int digits_low; /* Where decimal digits start */ + int digits_high; /* Where decimal digits end */ + int Xdigits_low; /* Where A..F start */ + int Xdigits_high; /* Where A..F end */ + int xdigits_low; /* Where a..f start */ + int xdigits_high; /* Where a..f end */ + struct _PDCLIB_lc_ctype_entry_t * entry; /* The data table */ +}; + +extern struct _PDCLIB_lc_ctype_t _PDCLIB_lc_ctype_C; +extern struct _PDCLIB_lc_ctype_t * _PDCLIB_lc_ctype; + +struct _PDCLIB_lc_messages_t +{ + int alloced; + char * errno_texts[_PDCLIB_ERRNO_MAX]; /* strerror() / perror() */ +}; + +extern struct _PDCLIB_lc_messages_t _PDCLIB_lc_messages_C; +extern struct _PDCLIB_lc_messages_t * _PDCLIB_lc_messages; + +struct _PDCLIB_lc_time_t +{ + int alloced; + char * month_name_abbr[12]; /* month names, abbreviated */ + char * month_name_full[12]; /* month names, full */ + char * day_name_abbr[7]; /* weekday names, abbreviated */ + char * day_name_full[7]; /* weekday names, full */ + char * date_time_format; /* date / time format for strftime( "%c" ) */ + char * time_format_12h; /* 12-hour time format for strftime( "%r" ) */ + char * date_format; /* date format for strftime( "%x" ) */ + char * time_format; /* time format for strftime( "%X" ) */ + char * am_pm[2]; /* AM / PM designation */ +}; + +extern struct _PDCLIB_lc_time_t _PDCLIB_lc_time_C; +extern struct _PDCLIB_lc_time_t * _PDCLIB_lc_time; + +_PDCLIB_LOCAL struct _PDCLIB_lc_lconv_numeric_t * _PDCLIB_load_lc_numeric( const char * path, const char * locale ); +_PDCLIB_LOCAL struct _PDCLIB_lc_lconv_monetary_t * _PDCLIB_load_lc_monetary( const char * path, const char * locale ); +_PDCLIB_LOCAL struct _PDCLIB_lc_collate_t * _PDCLIB_load_lc_collate( const char * path, const char * locale ); +_PDCLIB_LOCAL struct _PDCLIB_lc_ctype_t * _PDCLIB_load_lc_ctype( const char * path, const char * locale ); +_PDCLIB_LOCAL struct _PDCLIB_lc_time_t * _PDCLIB_load_lc_time( const char * path, const char * locale ); +_PDCLIB_LOCAL struct _PDCLIB_lc_messages_t * _PDCLIB_load_lc_messages( const char * path, const char * locale ); + +/* -------------------------------------------------------------------------- */ +/* Sanity checks */ +/* -------------------------------------------------------------------------- */ + +/* signed-ness of char */ +_PDCLIB_static_assert( _PDCLIB_CHAR_MIN == ((((char) -1) < 0) ? _PDCLIB_SCHAR_MIN : 0), "Compiler disagrees on signed-ness of 'char'." ); + +/* two's complement */ +#if _PDCLIB_TWOS_COMPLEMENT == 1 +#if _PDCLIB_CHAR_MIN < 0 +_PDCLIB_static_assert( ((char) ~ (char) 0 < 0), "Not two's complement on 'char'." ); +#endif +_PDCLIB_static_assert( ((short) ~ (short) 0 < 0), "Not two's complement on 'short'." ); +_PDCLIB_static_assert( ((int) ~ (int) 0 < 0), "Not two's complement on 'int'." ); +_PDCLIB_static_assert( ((long) ~ (long) 0 < 0), "Not two's complement on 'long'." ); +_PDCLIB_static_assert( ((long long) ~ (long long) 0 < 0), "Not two's complement on 'long long'." ); +#endif + +/* size_t as the result of sizeof */ +_PDCLIB_static_assert( sizeof( sizeof( int ) ) == sizeof( _PDCLIB_size_t ), "Compiler disagrees on size_t." ); + +/* wchar_t as the type of wide character literals */ +_PDCLIB_static_assert( sizeof( _PDCLIB_wchar_t ) == sizeof( L'x' ), "Compiler disagrees on wchar_t." ); +#ifdef __cplusplus +_PDCLIB_static_assert( sizeof( _PDCLIB_wchar_t ) == sizeof( wchar_t ), "Compiler disagrees on wchar_t (C++)." ); +#endif + +/* intptr_t/uintptr_t being wide enough to store the value of a pointer */ +_PDCLIB_static_assert( sizeof( void * ) == sizeof( _PDCLIB_intptr_t ), "Compiler disagrees on intptr_t." ); +_PDCLIB_static_assert( sizeof( void * ) == sizeof( _PDCLIB_uintptr_t ), "Compiler disagrees on uintptr_t." ); + +/* ptrdiff_t as the result of pointer arithmetic */ +_PDCLIB_static_assert( sizeof( &_PDCLIB_digits[1] - &_PDCLIB_digits[0] ) == sizeof( _PDCLIB_ptrdiff_t ), "Compiler disagrees on ptrdiff_t." ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h new file mode 100644 index 0000000..fe96bca --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h @@ -0,0 +1,32 @@ +/* __STDC_WANT_LIB_EXT1__ redefinition guard + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef __STDC_WANT_LIB_EXT1__ + #ifdef __STDC_WANT_LIB_EXT1_PREVIOUS__ + #if __STDC_WANT_LIB_EXT1_PREVIOUS__ != -1 + #error __STDC_WANT_LIB_EXT1__ undefined when it was defined earlier. + #endif + #else + #define __STDC_WANT_LIB_EXT1_PREVIOUS__ -1 + #endif +#else + #if ( __STDC_WANT_LIB_EXT1__ + 0 ) == 0 && ( 0 - __STDC_WANT_LIB_EXT1__ - 1 ) == 1 + #error __STDC_WANT_LIB_EXT1__ defined but empty. Should be an integer value. + #endif + #ifdef __STDC_WANT_LIB_EXT1_PREVIOUS__ + #if ( __STDC_WANT_LIB_EXT1__ + 0 ) != __STDC_WANT_LIB_EXT1_PREVIOUS__ + #error __STDC_WANT_LIB_EXT1__ redefined from previous value. + #endif + #else + #if ( __STDC_WANT_LIB_EXT1__ + 0 ) == 0 + #define __STDC_WANT_LIB_EXT1_PREVIOUS__ 0 + #elif ( __STDC_WANT_LIB_EXT1__ + 0 ) == 1 + #define __STDC_WANT_LIB_EXT1_PREVIOUS__ 1 + #else + #error __STDC_WANT_LIB_EXT1__ set to value other than 0,1 -- undefined behavior + #endif + #endif +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h new file mode 100644 index 0000000..04e4f3d --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h @@ -0,0 +1,6 @@ +#ifndef _PDCLIB_PLATFORM_ERRNO +#define _PDCLIB_PLATFORM_ERRNO + +#include "errno.h" + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h new file mode 100644 index 0000000..8c7c026 --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h @@ -0,0 +1,6 @@ +#ifndef _PDCLIB_PLATFORM_FCNTL +#define _PDCLIB_PLATFORM_FCNTL + +#include "fcntl.h" + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_print.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_print.h new file mode 100644 index 0000000..015b0ff --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_print.h @@ -0,0 +1,145 @@ +/* PDCLib printf logic <_PDCLIB_print.h> + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_PRINT_H +#define _PDCLIB_PRINT_H _PDCLIB_PRINT_H + +#include "pdclib/_PDCLIB_internal.h" + +#include +#include +#include + +/* This macro delivers a given character to either a memory buffer or a stream, + depending on the contents of 'status' (struct _PDCLIB_status_t). + x - the character to be delivered + i - pointer to number of characters already delivered in this call + n - pointer to maximum number of characters to be delivered in this call + s - the buffer into which the character shall be delivered +*/ +#define PUT( x ) \ + do { \ + int character = x; \ + if ( status->i < status->n ) { \ + if ( status->stream != NULL ) \ + putc( character, status->stream ); \ + else \ + status->s[status->i] = character; \ + } \ + ++(status->i); \ + } while ( 0 ) + + +/* Using an integer's bits as flags for both the conversion flags and length + modifiers. +*/ +#define E_minus (INT32_C(1)<<0) +#define E_plus (INT32_C(1)<<1) +#define E_alt (INT32_C(1)<<2) +#define E_space (INT32_C(1)<<3) + +#define E_zero (INT32_C(1)<<4) +#define E_done (INT32_C(1)<<5) +#define E_char (INT32_C(1)<<6) +#define E_short (INT32_C(1)<<7) + +#define E_long (INT32_C(1)<<8) +#define E_llong (INT32_C(1)<<9) +#define E_intmax (INT32_C(1)<<10) +#define E_size (INT32_C(1)<<11) + +#define E_ptrdiff (INT32_C(1)<<12) +#define E_pointer (INT32_C(1)<<13) +#define E_double (INT32_C(1)<<14) +#define E_ldouble (INT32_C(1)<<15) + +#define E_lower (INT32_C(1)<<16) +#define E_unsigned (INT32_C(1)<<17) +#define E_decimal (INT32_C(1)<<18) +#define E_exponent (INT32_C(1)<<19) + +#define E_generic (INT32_C(1)<<20) +#define E_hexa (INT32_C(1)<<21) + +/* -------------------------------------------------------------------------- */ +/* _PDCLIB_bigint_t support (required for floating point conversions) */ +/* -------------------------------------------------------------------------- */ + +/* Must be divisible by 32. */ +/* 1120 is enough for 64bit floats. A 128 float takes 16544 bits. */ +#define _PDCLIB_BIGINT_BITS 1120 + +#if _PDCLIB_BIGINT_DIGIT_BITS == 32 +#define _PDCLIB_BIGINT_DIGIT_MAX _PDCLIB_UINT_LEAST32_C( 0xFFFFFFFF ) +typedef _PDCLIB_uint_least32_t _PDCLIB_bigint_digit_t; +typedef _PDCLIB_int_least32_t _PDCLIB_bigint_sdigit_t; +typedef _PDCLIB_uint_least64_t _PDCLIB_bigint_arith_t; +#elif _PDCLIB_BIGINT_DIGIT_BITS == 16 +#define _PDCLIB_BIGINT_DIGIT_MAX _PDCLIB_UINT_LEAST16_C( 0xFFFF ) +typedef _PDCLIB_uint_least16_t _PDCLIB_bigint_digit_t; +typedef _PDCLIB_int_least16_t _PDCLIB_bigint_sdigit_t; +typedef _PDCLIB_uint_least32_t _PDCLIB_bigint_arith_t; +#else +#error _PDCLIB_BIGINT_DIGIT_BITS.needs to be 16 or 32. +#endif + +/* How many "digits" a _PDCLIB_bigint_t holds. */ +#define _PDCLIB_BIGINT_DIGITS _PDCLIB_BIGINT_BITS / _PDCLIB_BIGINT_DIGIT_BITS + +/* Maximum number of characters needed for _PDCLIB_bigint_tostring() */ +#define _PDCLIB_BIGINT_CHARS ( _PDCLIB_BIGINT_BITS / 4 + _PDCLIB_BIGINT_DIGITS + 2 ) + +/* Type */ +/* ---- */ + +typedef struct +{ + /* Number of digits used; zero value == zero size */ + _PDCLIB_size_t size; + /* Least significant digit first */ + _PDCLIB_bigint_digit_t data[ _PDCLIB_BIGINT_DIGITS ]; +} _PDCLIB_bigint_t; + +typedef struct +{ + _PDCLIB_bigint_t mantissa; + _PDCLIB_int_least16_t exponent; + _PDCLIB_int_least16_t scale; + enum + { + _PDCLIB_FP_NORMAL, + _PDCLIB_FP_SUBNORMAL, + _PDCLIB_FP_INF, + _PDCLIB_FP_NAN + } state; + char sign; +} _PDCLIB_fp_t; + +void _PDCLIB_fp_from_dbl( _PDCLIB_fp_t * fp, double value ); +void _PDCLIB_fp_from_ldbl( _PDCLIB_fp_t * fp, long double value ); + +void _PDCLIB_bigint_from_digit( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_digit_t digit ); +void _PDCLIB_bigint_from_pow2( _PDCLIB_bigint_t * bigint, unsigned pow ); +void _PDCLIB_bigint_from_pow10( _PDCLIB_bigint_t * bigint, unsigned pow ); +void _PDCLIB_bigint_from_bigint( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); +void _PDCLIB_bigint_add( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); +void _PDCLIB_bigint_mul( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); +void _PDCLIB_bigint_mul_pow10( _PDCLIB_bigint_t * bigint, int pow10 ); +int _PDCLIB_bigint_cmp( _PDCLIB_bigint_t const * lhs, _PDCLIB_bigint_t const * rhs ); +void _PDCLIB_bigint_shl( _PDCLIB_bigint_t * bigint, _PDCLIB_size_t bits ); +void _PDCLIB_bigint_mul10( _PDCLIB_bigint_t * bigint ); +int _PDCLIB_bigint_digit_log2( _PDCLIB_bigint_digit_t digit ); +int _PDCLIB_bigint_log2( _PDCLIB_bigint_t const * bigint ); +unsigned _PDCLIB_bigint_div( _PDCLIB_bigint_t * dividend, _PDCLIB_bigint_t const * divisor ); + +void _PDCLIB_print_integer( struct _PDCLIB_imaxdiv_t div, struct _PDCLIB_status_t * status ); +void _PDCLIB_print_string( const char * s, struct _PDCLIB_status_t * status ); +void _PDCLIB_print_fp( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status ); +int _PDCLIB_print_fp_deci( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status, char * buffer ); +void _PDCLIB_print_fp_hexa( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status, char * buffer ); +void _PDCLIB_print_fp_dragon4( _PDCLIB_bigint_t * fp, struct _PDCLIB_status_t * status ); + +#endif diff --git a/RockOS/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h new file mode 100644 index 0000000..d12c4a7 --- /dev/null +++ b/RockOS/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h @@ -0,0 +1,153 @@ +/* TZ Code declarations and definitions <_PDCLIB_tzcode.h> + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_TZCODE_H +#define _PDCLIB_TZCODE_H _PDCLIB_TZCODE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include +#include +#include + +/* Handy macros that are independent of tzfile implementation. */ +#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ + +#define SECSPERMIN 60 +#define MINSPERHOUR 60 +#define HOURSPERDAY 24 +#define DAYSPERWEEK 7 +#define DAYSPERNYEAR 365 +#define DAYSPERLYEAR 366 +#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) +#define SECSPERDAY ((int_fast32_t) SECSPERHOUR * HOURSPERDAY) +#define MONSPERYEAR 12 + +#define AVGSECSPERYEAR 31556952L +#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) +#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ + +#define TM_SUNDAY 0 +#define TM_MONDAY 1 +#define TM_TUESDAY 2 +#define TM_WEDNESDAY 3 +#define TM_THURSDAY 4 +#define TM_FRIDAY 5 +#define TM_SATURDAY 6 + +#define TM_YEAR_BASE 1900 + +#define EPOCH_YEAR 1970 +#define EPOCH_WDAY TM_THURSDAY + +extern struct tm _PDCLIB_tm; +extern int lcl_is_set; + +static const char gmt[] = "GMT"; + +static const int mon_lengths[ 2 ][ MONSPERYEAR ] = +{ + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } +}; + +static const int year_lengths[2] = +{ + DAYSPERNYEAR, DAYSPERLYEAR +}; + +/* time type information */ +struct ttinfo +{ + int_fast32_t utoff; /* UT offset in seconds */ + bool isdst; /* used to set tm_isdst */ + int desigidx; /* abbreviation list index */ + bool ttisstd; /* transition is std time */ + bool ttisut; /* transition is UT */ +}; + +/* leap second information */ +struct lsinfo +{ + time_t trans; /* transition time */ + int_fast64_t corr; /* correction to apply */ +}; + +#define BIGGEST( a, b ) (((a) > (b)) ? (a) : (b)) + +#ifndef TZ_MAX_TIMES +#define TZ_MAX_TIMES 2000 +#endif + +#ifndef TZ_MAX_TYPES +/* This must be at least 17 for Europe/Vilnius. */ +/* Limited by what (unsigned char)s can hold */ +#define TZ_MAX_TYPES 256 +#endif + +#ifndef TZ_MAX_CHARS +/* Maximum number of abbreviation characters */ +/* Limited by what (unsigned char)s can hold */ +#define TZ_MAX_CHARS 50 +#endif + +#ifndef TZ_MAX_LEAPS +/* Maximum number of leap second corrections */ +#define TZ_MAX_LEAPS 50 +#endif + +#ifdef TZNAME_MAX +#define MY_TZNAME_MAX TZNAME_MAX +#else +#define MY_TZNAME_MAX 255 +#endif + +struct state +{ + int leapcnt; + int timecnt; + int typecnt; + int charcnt; + bool goback; + bool goahead; + time_t ats[ TZ_MAX_TIMES ]; + unsigned char types[ TZ_MAX_TIMES ]; + struct ttinfo ttis[ TZ_MAX_TYPES ]; + char chars[ BIGGEST( BIGGEST( TZ_MAX_CHARS + 1, sizeof gmt ), ( 2 * ( MY_TZNAME_MAX + 1 ) ) ) ]; + struct lsinfo lsis[ TZ_MAX_LEAPS ]; + + /* The time type to use for early times or if no transitions. + It is always zero for recent tzdb releases. + It might be nonzero for data from tzdb 2018e or earlier. + */ + int defaulttype; +}; + +extern struct state _PDCLIB_lclmem; +extern struct state _PDCLIB_gmtmem; + +void _PDCLIB_gmtcheck(void); +struct tm * _PDCLIB_gmtsub( struct state const * sp, time_t const * timep, int_fast32_t offset, struct tm * tmp ); +bool _PDCLIB_increment_overflow( int * ip, int j ); +void _PDCLIB_init_ttinfo( struct ttinfo * s, int_fast32_t utoff, bool isdst, int desigidx ); +struct tm * _PDCLIB_localsub( struct state const * sp, time_t const * timep, int_fast32_t setname, struct tm * const tmp ); +struct tm * _PDCLIB_localtime_tzset( time_t const * timep, struct tm * tmp, bool setname ); +time_t _PDCLIB_mktime_tzname( struct state * sp, struct tm * tmp, bool setname ); +struct tm * _PDCLIB_timesub( const time_t * timep, int_fast32_t offset, const struct state * sp, struct tm * tmp ); +int _PDCLIB_tzload( char const * name, struct state * sp, bool doextend ); +bool _PDCLIB_tzparse(char const *, struct state *, bool); +void _PDCLIB_tzset_unlocked( void ); +void _PDCLIB_update_tzname_etc( struct state const * sp, struct ttinfo const * ttisp ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/signal.h b/RockOS/sysroot/usr/include/signal.h new file mode 100644 index 0000000..1f679ec --- /dev/null +++ b/RockOS/sysroot/usr/include/signal.h @@ -0,0 +1,91 @@ +/* Signal handling + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_SIGNAL_H +#define _PDCLIB_SIGNAL_H _PDCLIB_SIGNAL_H + +#include "pdclib/_PDCLIB_internal.h" + +/* Signals ------------------------------------------------------------------ */ + +/* A word on signals, to the people using PDCLib in their OS projects. + + The definitions of the C standard leave about everything that *could* be + useful to be "implementation defined". Without additional, non-standard + arrangements, it is not possible to turn them into a useful tool. + + This example implementation chose to "not generate any of these signals, + except as a result of explicit calls to the raise function", which is + allowed by the standard but of course does nothing for the usefulness of + . + + A useful signal handling would: + 1) make signal() a system call that registers the signal handler with the OS + 2) make raise() a system call triggering an OS signal to the running process + 3) make provisions that further signals of the same type are blocked until + the signal handler returns (optional for SIGILL) +*/ + +/* These are the values used by Linux. */ + +/* Abnormal termination / abort() */ +#define SIGABRT 6 +/* Arithmetic exception / division by zero / overflow */ +#define SIGFPE 8 +/* Illegal instruction */ +#define SIGILL 4 +/* Interactive attention signal */ +#define SIGINT 2 +/* Invalid memory access */ +#define SIGSEGV 11 +/* Termination request */ +#define SIGTERM 15 + +/* The following should be defined to pointer values that could NEVER point to + a valid signal handler function. (They are used as special arguments to + signal().) Again, these are the values used by Linux. +*/ +#define SIG_DFL (void (*)( int ))0 +#define SIG_ERR (void (*)( int ))-1 +#define SIG_IGN (void (*)( int ))1 + +typedef _PDCLIB_sig_atomic_t sig_atomic_t; + +/* Installs a signal handler "func" for the given signal. + A signal handler is a function that takes an integer as argument (the signal + number) and returns void. + + Note that a signal handler can do very little else than: + 1) assign a value to a static object of type "volatile sig_atomic_t", + 2) call signal() with the value of sig equal to the signal received, + 3) call _Exit(), + 4) call abort(). + Virtually everything else is undefind. + + The signal() function returns the previous installed signal handler, which + at program start may be SIG_DFL or SIG_ILL. (This implementation uses + SIG_DFL for all handlers.) If the request cannot be honored, SIG_ERR is + returned and errno is set to an unspecified positive value. +*/ +_PDCLIB_PUBLIC void ( *signal( int sig, void ( *func )( int ) ) )( int ); + +/* Raises the given signal (executing the registered signal handler with the + given signal number as parameter). + This implementation does not prevent further signals of the same time from + occuring, but executes signal( sig, SIG_DFL ) before entering the signal + handler (i.e., a second signal before the signal handler re-registers itself + or SIG_IGN will end the program). + Returns zero if successful, nonzero otherwise. */ +_PDCLIB_PUBLIC int raise( int sig ); + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_SIGNAL_H +#include _PDCLIB_EXTEND_SIGNAL_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdalign.h b/RockOS/sysroot/usr/include/stdalign.h new file mode 100644 index 0000000..b302601 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdalign.h @@ -0,0 +1,30 @@ +/* Alignment + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDALIGN_H +#define _PDCLIB_STDALIGN_H _PDCLIB_STDALIGN_H + +#ifndef __cplusplus +#define __alignas_is_defined 1 +#define __alignof_is_defined 1 + +#if ! defined( __STDC_VERSION__ ) || ( __STDC_VERSION__ < 202311L ) +#define alignas _Alignas +#define alignof _Alignof +#elif __STDC_VERSION__ >= 202311L +#warning has been deprecated as of C23. +#endif +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDALIGN_H +#include _PDCLIB_EXTEND_STDALIGN_H +#endif + +#endif + diff --git a/RockOS/sysroot/usr/include/stdarg.h b/RockOS/sysroot/usr/include/stdarg.h new file mode 100644 index 0000000..7741b70 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdarg.h @@ -0,0 +1,34 @@ +/* Variable arguments + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDARG_H +#define _PDCLIB_STDARG_H _PDCLIB_STDARG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_config.h" + +typedef _PDCLIB_va_list va_list; + +#define va_arg( ap, type ) _PDCLIB_va_arg( ap, type ) +#define va_copy( dest, src ) _PDCLIB_va_copy( dest, src ) +#define va_end( ap ) _PDCLIB_va_end( ap ) +#define va_start( ap, parmN ) _PDCLIB_va_start( ap, parmN ) + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDARG_H +#include _PDCLIB_EXTEND_STDARG_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdbool.h b/RockOS/sysroot/usr/include/stdbool.h new file mode 100644 index 0000000..e901f63 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdbool.h @@ -0,0 +1,24 @@ +/* Boolean type and values + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDBOOL_H +#define _PDCLIB_STDBOOL_H _PDCLIB_STDBOOL_H + +#ifndef __cplusplus +#define bool _Bool +#define true 1 +#define false 0 +#endif +#define __bool_true_false_are_defined 1 + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDBOOL_H +#include _PDCLIB_EXTEND_STDBOOL_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stddef.h b/RockOS/sysroot/usr/include/stddef.h new file mode 100644 index 0000000..7d03d07 --- /dev/null +++ b/RockOS/sysroot/usr/include/stddef.h @@ -0,0 +1,55 @@ +/* Common definitions + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDDEF_H +#define _PDCLIB_STDDEF_H _PDCLIB_STDDEF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +typedef _PDCLIB_ptrdiff_t ptrdiff_t; + +#ifndef _PDCLIB_SIZE_T_DEFINED +#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED +typedef _PDCLIB_size_t size_t; +#endif + +#ifndef __cplusplus +typedef _PDCLIB_wchar_t wchar_t; +#endif + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +#define offsetof( type, member ) _PDCLIB_offsetof( type, member ) + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 +#ifndef _PDCLIB_RSIZE_T_DEFINED +#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED +typedef size_t rsize_t; +#endif +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDDEF_H +#include _PDCLIB_EXTEND_STDDEF_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdint.h b/RockOS/sysroot/usr/include/stdint.h new file mode 100644 index 0000000..04af6b0 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdint.h @@ -0,0 +1,236 @@ +/* Integer types + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDINT_H +#define _PDCLIB_STDINT_H _PDCLIB_STDINT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +/* 7.18.1.1 Exact-width integer types. */ + +#ifdef _PDCLIB_int8_t +typedef _PDCLIB_int8_t int8_t; +typedef _PDCLIB_uint8_t uint8_t; +#endif + +#ifdef _PDCLIB_int16_t +typedef _PDCLIB_int16_t int16_t; +typedef _PDCLIB_uint16_t uint16_t; +#endif + +#ifdef _PDCLIB_int32_t +typedef _PDCLIB_int32_t int32_t; +typedef _PDCLIB_uint32_t uint32_t; +#endif + +#ifdef _PDCLIB_int64_t +typedef _PDCLIB_int64_t int64_t; +typedef _PDCLIB_uint64_t uint64_t; +#endif + +/* 7.18.1.2 Minimum-width integer types */ + +/* You are allowed to add more types here, e.g. int_least24_t. */ + +typedef _PDCLIB_int_least8_t int_least8_t; +typedef _PDCLIB_int_least16_t int_least16_t; +typedef _PDCLIB_int_least32_t int_least32_t; +typedef _PDCLIB_int_least64_t int_least64_t; + +typedef _PDCLIB_uint_least8_t uint_least8_t; +typedef _PDCLIB_uint_least16_t uint_least16_t; +typedef _PDCLIB_uint_least32_t uint_least32_t; +typedef _PDCLIB_uint_least64_t uint_least64_t; + +/* 7.18.1.3 Fastest minimum-width integer types */ + +/* You are allowed to add more types here, e.g. int_fast24_t. */ + +typedef _PDCLIB_int_fast8_t int_fast8_t; +typedef _PDCLIB_int_fast16_t int_fast16_t; +typedef _PDCLIB_int_fast32_t int_fast32_t; +typedef _PDCLIB_int_fast64_t int_fast64_t; + +typedef _PDCLIB_uint_fast8_t uint_fast8_t; +typedef _PDCLIB_uint_fast16_t uint_fast16_t; +typedef _PDCLIB_uint_fast32_t uint_fast32_t; +typedef _PDCLIB_uint_fast64_t uint_fast64_t; + +/* 7.18.1.4 Integer types capable of holding object pointers */ + +typedef _PDCLIB_intptr_t intptr_t; +typedef _PDCLIB_uintptr_t uintptr_t; + +/* 7.18.1.5 Greatest-width integer types */ + +typedef _PDCLIB_intmax_t intmax_t; +typedef _PDCLIB_uintmax_t uintmax_t; + +/* 7.18.2 Limits of specified-width integer types */ + +#if defined( __cplusplus ) && __cplusplus < 201103L +#ifndef __STDC_LIMIT_MACROS +#define _PDCLIB_NO_LIMIT_MACROS +#endif +#endif + +#ifndef _PDCLIB_NO_LIMIT_MACROS + +/* 7.18.2.1 Limits of exact-width integer types */ + +#if _PDCLIB_TWOS_COMPLEMENT == 1 + +#if _PDCLIB_INT_LEAST8_MAX == 0x7f +#define INT8_MAX _PDCLIB_INT_LEAST8_MAX +#define INT8_MIN _PDCLIB_INT_LEAST8_MIN +#define UINT8_MAX _PDCLIB_UINT_LEAST8_MAX +#endif + +#if _PDCLIB_INT_LEAST16_MAX == 0x7fff +#define INT16_MAX _PDCLIB_INT_LEAST16_MAX +#define INT16_MIN _PDCLIB_INT_LEAST16_MIN +#define UINT16_MAX _PDCLIB_UINT_LEAST16_MAX +#endif + +#if _PDCLIB_INT_LEAST32_MAX == 0x7fffffffl +#define INT32_MAX _PDCLIB_INT_LEAST32_MAX +#define INT32_MIN _PDCLIB_INT_LEAST32_MIN +#define UINT32_MAX _PDCLIB_UINT_LEAST32_MAX +#endif + +#if _PDCLIB_INT_LEAST64_MAX == 0x7fffffffffffffffll +#define INT64_MAX _PDCLIB_INT_LEAST64_MAX +#define INT64_MIN _PDCLIB_INT_LEAST64_MIN +#define UINT64_MAX _PDCLIB_UINT_LEAST64_MAX +#endif + +#endif + +/* 7.18.2.2 Limits of minimum-width integer types */ + +#define INT_LEAST8_MIN _PDCLIB_INT_LEAST8_MIN +#define INT_LEAST8_MAX _PDCLIB_INT_LEAST8_MAX +#define UINT_LEAST8_MAX _PDCLIB_UINT_LEAST8_MAX + +#define INT_LEAST16_MIN _PDCLIB_INT_LEAST16_MIN +#define INT_LEAST16_MAX _PDCLIB_INT_LEAST16_MAX +#define UINT_LEAST16_MAX _PDCLIB_UINT_LEAST16_MAX + +#define INT_LEAST32_MIN _PDCLIB_INT_LEAST32_MIN +#define INT_LEAST32_MAX _PDCLIB_INT_LEAST32_MAX +#define UINT_LEAST32_MAX _PDCLIB_UINT_LEAST32_MAX + +#define INT_LEAST64_MIN _PDCLIB_INT_LEAST64_MIN +#define INT_LEAST64_MAX _PDCLIB_INT_LEAST64_MAX +#define UINT_LEAST64_MAX _PDCLIB_UINT_LEAST64_MAX + +/* 7.18.2.3 Limits of fastest minimum-width integer types */ + +#define INT_FAST8_MIN _PDCLIB_INT_FAST8_MIN +#define INT_FAST8_MAX _PDCLIB_INT_FAST8_MAX +#define UINT_FAST8_MAX _PDCLIB_UINT_FAST8_MAX + +#define INT_FAST16_MIN _PDCLIB_INT_FAST16_MIN +#define INT_FAST16_MAX _PDCLIB_INT_FAST16_MAX +#define UINT_FAST16_MAX _PDCLIB_UINT_FAST16_MAX + +#define INT_FAST32_MIN _PDCLIB_INT_FAST32_MIN +#define INT_FAST32_MAX _PDCLIB_INT_FAST32_MAX +#define UINT_FAST32_MAX _PDCLIB_UINT_FAST32_MAX + +#define INT_FAST64_MIN _PDCLIB_INT_FAST64_MIN +#define INT_FAST64_MAX _PDCLIB_INT_FAST64_MAX +#define UINT_FAST64_MAX _PDCLIB_UINT_FAST64_MAX + +/* 7.18.2.4 Limits of integer types capable of holding object pointers */ + +#define INTPTR_MIN _PDCLIB_INTPTR_MIN +#define INTPTR_MAX _PDCLIB_INTPTR_MAX +#define UINTPTR_MAX _PDCLIB_UINTPTR_MAX + +/* 7.18.2.5 Limits of greatest-width integer types */ + +#define INTMAX_MIN _PDCLIB_INTMAX_MIN +#define INTMAX_MAX _PDCLIB_INTMAX_MAX +#define UINTMAX_MAX _PDCLIB_UINTMAX_MAX + +/* 7.18.3 Limits of other integer types */ + +#define PTRDIFF_MIN _PDCLIB_PTRDIFF_MIN +#define PTRDIFF_MAX _PDCLIB_PTRDIFF_MAX + +#define SIG_ATOMIC_MIN _PDCLIB_SIG_ATOMIC_MIN +#define SIG_ATOMIC_MAX _PDCLIB_SIG_ATOMIC_MAX + +#define SIZE_MAX _PDCLIB_SIZE_MAX + +#define WCHAR_MIN _PDCLIB_WCHAR_MIN +#define WCHAR_MAX _PDCLIB_WCHAR_MAX + +#define WINT_MIN _PDCLIB_WINT_MIN +#define WINT_MAX _PDCLIB_WINT_MAX + +#endif + +/* 7.18.4 Macros for integer constants */ + +#if defined( __cplusplus ) && __cplusplus < 201103L +#ifndef __STDC_CONSTANT_MACROS +#define _PDCLIB_NO_CONSTANT_MACROS +#endif +#endif + +#ifndef _PDCLIB_NO_CONSTANT_MACROS + +/* 7.18.4.1 Macros for minimum-width integer constants */ + +/* Expand to an integer constant of specified value and type int_leastN_t */ + +#define INT8_C _PDCLIB_INT_LEAST8_C +#define INT16_C _PDCLIB_INT_LEAST16_C +#define INT32_C _PDCLIB_INT_LEAST32_C +#define INT64_C _PDCLIB_INT_LEAST64_C + +/* Expand to an integer constant of specified value and type uint_leastN_t */ + +#define UINT8_C _PDCLIB_UINT_LEAST8_C +#define UINT16_C _PDCLIB_UINT_LEAST16_C +#define UINT32_C _PDCLIB_UINT_LEAST32_C +#define UINT64_C _PDCLIB_UINT_LEAST64_C + +/* 7.18.4.2 Macros for greatest-width integer constants */ + +/* Expand to an integer constant of specified value and type intmax_t */ +#define INTMAX_C( value ) _PDCLIB_INTMAX_C( value ) + +/* Expand to an integer constant of specified value and type uintmax_t */ +#define UINTMAX_C( value ) _PDCLIB_UINTMAX_C( value ) + +#endif + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 +#define RSIZE_MAX ( _PDCLIB_SIZE_MAX >> 1 ) +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDINT_H +#include _PDCLIB_EXTEND_STDINT_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdio.h b/RockOS/sysroot/usr/include/stdio.h new file mode 100644 index 0000000..4ee538f --- /dev/null +++ b/RockOS/sysroot/usr/include/stdio.h @@ -0,0 +1,935 @@ +/* Input/output + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDIO_H +#define _PDCLIB_STDIO_H _PDCLIB_STDIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_SIZE_T_DEFINED +#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED +typedef _PDCLIB_size_t size_t; +#endif + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +/* See setvbuf(), third argument */ +#define _IOFBF (1u<<0) +#define _IOLBF (1u<<1) +#define _IONBF (1u<<2) + +/* The following are platform-dependent, and defined in _PDCLIB_config.h. */ +typedef struct _PDCLIB_fpos_t fpos_t; +typedef struct _PDCLIB_file_t FILE; +#define EOF (-1) +#define BUFSIZ _PDCLIB_BUFSIZ +#define FOPEN_MAX _PDCLIB_FOPEN_MAX +#define FILENAME_MAX _PDCLIB_FILENAME_MAX +#define L_tmpnam _PDCLIB_L_tmpnam +#define TMP_MAX _PDCLIB_TMP_MAX + +/* See fseek(), third argument */ +#define SEEK_CUR _PDCLIB_SEEK_CUR +#define SEEK_END _PDCLIB_SEEK_END +#define SEEK_SET _PDCLIB_SEEK_SET + +extern FILE * stdin; +extern FILE * stdout; +extern FILE * stderr; + +/* Operations on files */ + +/* Remove the given file. + Returns zero if successful, non-zero otherwise. + This implementation does detect if a file of that name is currently open, + and fails the remove in this case. This does not detect two distinct names + that merely result in the same file (e.g. "/home/user/foo" vs. "~/foo"). +*/ +_PDCLIB_PUBLIC int remove( const char * filename ); + +/* Rename the given old file to the given new name. + Returns zero if successful, non-zero otherwise. + This implementation does detect if the old filename corresponds to an open + file, and fails the rename in this case. + If there already is a file with the new filename, behaviour is defined by + the glue code (see functions/_PDCLIB/rename.c). +*/ +_PDCLIB_PUBLIC int rename( const char * oldpath, const char * newpath ); + +/* Open a temporary file with mode "wb+", i.e. binary-update. Remove the file + automatically if it is closed or the program exits normally (by returning + from main() or calling exit()). + Returns a pointer to a FILE handle for this file. + This implementation does not remove temporary files if the process aborts + abnormally (e.g. abort()). +*/ +_PDCLIB_PUBLIC FILE * tmpfile( void ); + +/* Generate a file name that is not equal to any existing filename AT THE TIME + OF GENERATION. Generate a different name each time it is called. + Returns a pointer to an internal static buffer containing the filename if s + is a NULL pointer. (This is not thread-safe!) + Returns s if it is not a NULL pointer (s is then assumed to point to an array + of at least L_tmpnam characters). + Returns NULL if unable to generate a suitable name (because all possible + names already exist, or the function has been called TMP_MAX times already). + Note that this implementation cannot guarantee a file of the name generated + is not generated between the call to this function and a subsequent fopen(). +*/ +_PDCLIB_PUBLIC char * tmpnam( char * s ); + +/* File access functions */ + +/* Close the file associated with the given stream (after flushing its buffers). + Returns zero if successful, EOF if any errors occur. +*/ +_PDCLIB_PUBLIC int fclose( FILE * stream ); + +/* Flush the buffers of the given output stream. If the stream is an input + stream, or an update stream with the last operation being an input operation, + behaviour is undefined. + If stream is a NULL pointer, perform the buffer flushing for all applicable + streams. + Returns zero if successful, EOF if a write error occurs. + Sets the error indicator of the stream if a write error occurs. +*/ +_PDCLIB_PUBLIC int fflush( FILE * stream ); + +/* Open the file with the given filename in the given mode, and return a stream + handle for it in which error and end-of-file indicator are cleared. Defined + values for mode are: + + READ MODES + text files binary files + without update "r" "rb" + with update "r+" "rb+" or "r+b" + + Opening in read mode fails if no file with the given filename exists, or if + cannot be read. + + WRITE MODES + text files binary files + without update "w" "wb" + with update "w+" "wb+" or "w+b" + + With write modes, if a file with the given filename already exists, it is + truncated to zero length. + + APPEND MODES + text files binary files + without update "a" "ab" + with update "a+" "ab+" or "a+b" + + With update modes, if a file with the given filename already exists, it is + not truncated to zero length, but all writes are forced to end-of-file (this + regardless to fseek() calls). Note that binary files opened in append mode + might have their end-of-file padded with '\0' characters. + + Update modes mean that both input and output functions can be performed on + the stream, but output must be terminated with a call to either fflush(), + fseek(), fsetpos(), or rewind() before input is performed, and input must + be terminated with a call to either fseek(), fsetpos(), or rewind() before + output is performed, unless input encountered end-of-file. + + If a text file is opened with update mode, the implementation is at liberty + to open a binary stream instead. This implementation honors the exact mode + given. + + The stream is fully buffered if and only if it can be determined not to + refer to an interactive device. + + If the mode string begins with but is longer than one of the above sequences + the implementation is at liberty to ignore the additional characters, or do + implementation-defined things. This implementation only accepts the exact + modes above. + + Returns a pointer to the stream handle if successfull, NULL otherwise. +*/ +_PDCLIB_PUBLIC FILE * fopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode ); + +/* Close any file currently associated with the given stream. Open the file + identified by the given filename with the given mode (equivalent to fopen()), + and associate it with the given stream. If filename is a NULL pointer, + attempt to change the mode of the given stream. + This implementation allows any mode changes on "real" files, and associating + of the standard streams with files. It does *not* support mode changes on + standard streams. + (Primary use of this function is to redirect stdin, stdout, and stderr.) + + Returns a pointer to the stream handle if successfull, NULL otherwise. +*/ +_PDCLIB_PUBLIC FILE * freopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode, FILE * _PDCLIB_restrict stream ); + +/* If buf is a NULL pointer, call setvbuf( stream, NULL, _IONBF, BUFSIZ ). + If buf is not a NULL pointer, call setvbuf( stream, buf, _IOFBF, BUFSIZ ). +*/ +_PDCLIB_PUBLIC void setbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf ); + +/* Set the given stream to the given buffering mode. If buf is not a NULL + pointer, use buf as file buffer (of given size). If buf is a NULL pointer, + use a buffer of given size allocated internally. _IONBF causes unbuffered + behaviour, _IOLBF causes line-buffered behaviour, _IOFBF causes fully + buffered behaviour. Calling this function is only valid right after a file is + opened, and before any other operation (except for any unsuccessful calls to + setvbuf()) has been performed. + Returns zero if successful, nonzero otherwise. +*/ +_PDCLIB_PUBLIC int setvbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf, int mode, size_t size ); + +/* Formatted input/output functions */ + +/* + Write output to the given stream, as defined by the given format string and + 0..n subsequent arguments (the argument stack). + + The format string is written to the given stream verbatim, except for any + conversion specifiers included, which start with the letter '%' and are + documented below. If the given conversion specifiers require more arguments + from the argument stack than provided, behaviour is undefined. Additional + arguments not required by conversion specifiers are evaluated but otherwise + ignored. + + (The standard specifies the format string is allowed to contain multibyte + character sequences as long as it starts and ends in initial shift state, + but this is not yet supported by this implementation, which interprets the + format string as sequence of char.) + TODO: Add multibyte support to printf() functions. + + A conversion specifier consists of: + - Zero or more flags (one of the characters "-+ #0"). + - Optional minimum field width as decimal integer. Default is padding to the + left, using spaces. Note that 0 is taken as a flag, not the beginning of a + field width. Note also that a small field width will not result in the + truncation of a value. + - Optional precision (given as ".#" with # being a decimal integer), + specifying: + - the min. number of digits to appear (diouxX), + - the max. number of digits after the decimal point (aAeEfF), + - the max. number of significant digits (gG), + - the max. number of bytes to be written (s). + - behaviour with other conversion specifiers is undefined. + - Optional length modifier specifying the size of the argument (one of "hh", + "ll", or one of the characters "hljztL"). + - Conversion specifier character specifying the type of conversion to be + applied (and the type of the next argument from the argument stack). One + of the characters "diouxXfFeEgGaAcspn%". + + Minimum field width and/or precision may be given as asterisk ('*') instead + of a decimal integer. In this case, the next argument from the argument + stack is assumed to be an int value specifying the width / precision. A + negative field width is interpreted as flag '-' followed by a positive field + width. A negative precision is interpreted as if no precision was given. + + FLAGS + - Left-justify the conversion result within its field width. + + Prefix a '+' on positive signed conversion results. Prefix a '-' on + floating conversions resulting in negative zero, or negative values + rounding to zero. + space Prefix a space on positive signed conversion results, or if a signed + conversion results in no characters. If both '+' and ' ' are given, + ' ' is ignored. + # Use an "alternative form" for + - 'o' conversion, increasing precision until the first digit of the + result is a zero; + - 'x' or 'X' conversion, prefixing "0x" or "0X" to nonzero results; + - "aAeEfF" conversions, always printing a decimal point even if no + digits are following; + - 'g' or 'G' conversions, always printing a decimal point even if no + digits are following, and not removing trailing zeroes. + - behaviour for other conversions is unspecified. + 0 Use leading zeroes instead of spaces for field width padding. If both + '-' and '0' are given, '0' is ignored. If a precision is specified for + any of the "diouxX" conversions, '0' is ignored. Behaviour is only + defined for "diouxXaAeEfFgG". + + LENGTH MODIFIERS + hh For "diouxX" conversions, the argument from the argument stack is + assumed to be of char width. (It will have been subject to integer + promotion but will be converted back.) For 'n' conversions, the argument + is assumed to be a pointer to signed char. + h For "diouxX" conversions, the argument from the argument stack is + assumed to be of short int width. (It will have been subject to integer + promotion but will be converted back.) For 'n' conversions, the argument + is assumed to be a pointer to short int. + l For "diouxX" conversions, the argument from the argument stack is + assumed to be of long int width. For 'n' conversions, the argument is + assumed to be a pointer to short int. For 'c' conversions, the argument + is assumed to be a wint_t. For 's' conversions, the argument is assumed + to be a pointer to wchar_t. No effect on "aAeEfFgG" conversions. + ll For "diouxX" conversions, the argument from the argument stack is + assumed to be of long long int width. For 'n' conversions, the argument + is assumed to be a pointer to long long int. + j For "diouxX" conversions, the argument from the argument stack is + assumed to be of intmax_t width. For 'n' conversions, the argument is + assumed to be a pointer to intmax_t. + z For "diouxX" conversions, the argument from the argument stack is + assumed to be of size_t width. For 'n' conversions, the argument is + assumed to be a pointer to size_t. + t For "diouxX" conversions, the argument from the argument stack is + assumed to be of ptrdiff_t width. For 'n' conversions, the argument is + assumed to be a pointer to ptrdiff_t. + L For "aAeEfFgG" conversions, the argument from the argument stack is + assumed to be a long double. + Length modifiers appearing for any conversions not mentioned above will have + undefined behaviour. + If a length modifier appears with any conversion specifier other than as + specified above, the behavior is undefined. + + CONVERSION SPECIFIERS + d,i The argument from the argument stack is assumed to be of type int, and + is converted to a signed decimal value with a minimum number of digits + as specified by the precision (default 1), padded with leading zeroes. + A zero value converted with precision zero yields no output. + o The argument from the argument stack is assumed to be of type unsigned + int, and is converted to an unsigned octal value, other behaviour being + as above. + u The argument from the argument stack is assumed to be of type unsigned + int, and converted to an unsigned decimal value, other behaviour being + as above. + x,X The argument from the argument stack is assumed to be of type unsigned + int, and converted to an unsigned hexadecimal value, using lowercase + "abcdef" for 'x' and uppercase "ABCDEF" for 'X' conversion, other + behaviour being as above. + f,F The argument from the argument stack is assumed to be of type double, + and converted to a decimal floating point in decimal-point notation, + with the number of digits after the decimal point as specified by the + precision (default 6) and the value being rounded appropriately. If + precision is zero (and the '#' flag is not given), no decimal point is + printed. At least one digit is always printed before the decimal point. + For 'f' conversions, an infinity value is printed as either [-]inf or + [-]infinity (, depending on the configuration of this implementation. A + NaN value is printed as [-]nan. For 'F' conversions uppercase characters + are used for these special values. The flags '-', '+' and ' ' apply as + usual to these special values, '#' and '0' have no effect. + e,E The argument from the argument stack is assumed to be of type double, + and converted to a decimal floating point in normalized exponential + notation ([?]d.ddd edd). "Normalized" means one nonzero digit before + the decimal point, unless the value is zero. The number of digits after + the decimal point is specified by the precision (default 6), the value + being rounded appropriately. If precision is zero (and the '#' flag is + not given), no decimal point is printed. The exponent has at least two + digits, and not more than necessary to represent the exponent. If the + value is zero, the exponent is zero. The 'e' written to indicate the + exponend is uppercase for 'E' conversions. + Infinity or NaN values are represented as for 'f' and 'F' conversions, + respectively. + g,G The argument from the argument stack is assumed to be of type double, + and converted according to either 'f' or 'e' format for 'g' conversions, + or 'F' or 'E' format for 'G' conversions, respectively, with the actual + conversion chosen depending on the value. 'e' / 'E' conversion is chosen + if the resulting exponent is < -4 or >= the precision (default 1). + Trailing zeroes are removed (unless the '#' flag is given). A decimal + point appears only if followed by a digit. + Infinity or NaN values are represented as for 'f' and 'F' conversions, + respectively. + a,A The argument from the argument stack is assumed to be of type double, + and converted to a floating point hexadecimal notation ([?]0xh.hhhh pd) + with one hexadecimal digit (being nonzero if the value is normalized, + and otherwise unspecified) before the decimal point, and the number of + digits after the decimal point being specified by the precision. If no + precision is given, the default is to print as many digits as nevessary + to give an exact representation of the value (if FLT_RADIX is a power of + 2). If no precision is given and FLT_RADIX is not a power of 2, the + default is to print as many digits to distinguish values of type double + (possibly omitting trailing zeroes). (A precision p is sufficient to + distinguish values of the source type if 16^p-1 > b^n where b is + FLT_RADIX and n is the number of digits in the significand (to base b) + of the source type. A smaller p might suffice depending on the + implementation's scheme for determining the digit to the left of the + decimal point.) The error has the correct sign for the current rounding + direction. + Unless the '#' flag is given, no decimal-point is given for zero + precision. + The 'a' conversion uses lowercase "abcdef", "0x" and 'p', the 'A' + conversion uppercase "ABCDEF", "0X" and 'P'. + The exponent always has at least one digit, and not more than necessary + to represent the decimal exponent of 2. If the value is zero, the + exponent is zero. + Infinity or NaN values are represented as for 'f' and 'F' conversions, + respectively. + Binary implementations are at liberty to chose the hexadecimal digit to + the left of the decimal point so that subsequent digits align to nibble + boundaries. + c The argument from the argument stack is assumed to be of type int, and + converted to a character after the value has been cast to unsigned char. + If the 'l' length modifier is given, the argument is assumed to be of + type wint_t, and converted as by a "%ls" conversion with no precision + and a pointer to a two-element wchar_t array, with the first element + being the wint_t argument and the second a '\0' wide character. + s The argument from the argument stack is assumed to be a char array (i.e. + pointer to char). Characters from that array are printed until a zero + byte is encountered or as many bytes as specified by a given precision + have been written. + If the l length modifier is given, the argument from the argument stack + is assumed to be a wchar_t array (i.e. pointer to wchar_t). Wide + characters from that array are converted to multibyte characters as by + calls to wcrtomb() (using a mbstate_t object initialized to zero prior + to the first conversion), up to and including the terminating null wide + character. The resulting multibyte character sequence is then printed up + to but not including the terminating null character. If a precision is + given, it specifies the maximum number of bytes to be written (including + shift sequences). If the given precision would require access to a wide + character one past the end of the array, the array shall contain a '\0' + wide character. In no case is a partial multibyte character written. + Redundant shift sequences may result if the multibyte characters have a + state-dependent encoding. + TODO: Clarify these statements regarding %ls. + p The argument from the argument stack is assumed to be a void pointer, + and converted to a sequence of printing characters in an implementation- + defined manner. + This implementation casts the pointer to type intptr_t, and prints the + value as if a %#x conversion specifier was given. + n The argument from the argument stack is assumed to be a pointer to a + signed integer, into which the number of characters written so far by + this call to fprintf is stored. The behaviour, should any flags, field + widths, or precisions be given is undefined. + % A verbatim '%' character is written. No argument is taken from the + argument stack. + + Returns the number of characters written if successful, a negative value + otherwise. +*/ +_PDCLIB_PUBLIC int fprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); + +/* TODO: fscanf() documentation */ +/* + Read input from a given stream, as defined by the given format string, and + store converted input in the objects pointed to by 0..n subsequent arguments + (the argument stack). + + The format string contains a sequence of directives that are expected to + match the input. If such a directive fails to match, the function returns + (matching error). It also returns if an input error occurs (input error). + + Directives can be: + - one or more whitespaces, matching any number of whitespaces in the input; + - printing characters, matching the input verbatim; + - conversion specifications, which convert an input sequence into a value as + defined by the individual specifier, and store that value in a memory + location pointed to by the next pointer on the argument stack. Details are + documented below. If there is an insufficient number of pointers on the + argument stack, behaviour is undefined. Additional arguments not required + by any conversion specifications are evaluated, but otherwise ignored. + + (The standard specifies the format string is allowed to contain multibyte + character sequences as long as it starts and ends in initial shift state, + but this is not yet supported by this implementation, which interprets the + format string as sequence of char.) + TODO: Add multibyte support to scanf() functions. + + A conversion specifier consists of: + - Optional assignment-suppressing character ('*') that makes the conversion + read input as usual, but does not assign the conversion result. + - Optional maximum field width as decimal integer. + - Optional length modifier specifying the size of the argument (one of "hh", + "ll", or one of the characters "hljztL"). + - Conversion specifier character specifying the type of conversion to be + applied (and the type of the next argument from the argument stack). One + of the characters "diouxXaAeEfFgGcs[pn%". + + LENGTH MODIFIERS + hh For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of of char width. + h For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of short int width. + l For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of long int width. + For "aAeEfFgG" conversions, it is assumed to point to a variable of type + double. + For "cs[" conversions, it is assumed to point to a variable of type + wchar_t. + ll For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of long long int width. + j For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of intmax_t width. + z For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of size_t width. + t For "diouxXn" conversions, the next pointer from the argument stack is + assumed to point to a variable of ptrdiff_t width. + L For "aAeEfFgG" conversions, the next pointer from the argument stack is + assumed to point to a variable of type long double. + Length modifiers appearing for any conversions not mentioned above will have + undefined behaviour. + If a length modifier appears with any conversion specifier other than as + specified above, the behavior is undefined. + + CONVERSION SPECIFIERS + d Matches an (optionally signed) decimal integer of the format expected + by strtol() with base 10. The next pointer from the argument stack is + assumed to point to a signed integer. + i Matches an (optionally signed) integer of the format expected by + strtol() with base 0. The next pointer from the argument stack is + assumed to point to a signed integer. + o Matches an (optionally signed) octal integer of the format expected by + strtoul() with base 8. The next pointer from the argument stack is + assumed to point to an unsigned integer. + u Matches an (optionally signed) decimal integer of the format expected + by strtoul() with base 10. The next pointer from the argument stack is + assumed to point to an unsigned integer. + x Matches an (optionally signed) hexadecimal integer of the format + expected by strtoul() with base 16. The next pointer from the argument + stack is assumed to point to an unsigned integer. + aefg Matches an (optionally signed) floating point number, infinity, or not- + a-number-value of the format expected by strtod(). The next pointer + from the argument stack is assumed to point to a float. + c Matches a number of characters as specified by the field width (default + 1). The next pointer from the argument stack is assumed to point to a + character array large enough to hold that many characters. + If the 'l' length modifier is given, the input is assumed to match a + sequence of multibyte characters (starting in the initial shift state), + which will be converted to a wide character sequence as by successive + calls to mbrtowc() with a mbstate_t object initialized to zero prior to + the first conversion. The next pointer from the argument stack is + assumed to point to a wchar_t array large enough to hold that many + characters. + In either case, note that no '\0' character is added to terminate the + sequence. + s Matches a sequence of non-white-space characters. The next pointer from + the argument stack is assumed to point to a character array large + enough to hold the sequence including terminating '\0' character. + If the 'l' length modifier is given, the input is assumed to match a + sequence of multibyte characters (starting in the initial shift state), + which will be converted to a wide character sequence as by a call to + mbrtowc() with a mbstate_t object initialized to zero prior to the + first conversion. The next pointer from the argument stack is assumed + to point to a wchar_t array large enough to hold the sequence including + terminating '\0' character. + [ Matches a nonempty sequence consisting of any of those characters + specified between itself and a corresponding closing bracket (']'). + If the first character in the list is a circumflex ('^'), this matches + a nonempty sequence consisting of any characters NOT specified. If the + closing bracket appears as the first character in the scanset ("[]" or + "[^]", it is assumed to belong to the scanset, which then ends with the + NEXT closing bracket. + If there is a '-' character in the scanset which is not the first after + the opening bracket (or the circumflex, see above) or the last in the + scanset, behaviour is implementation-defined. This implementation + handles this character like any other. + + The extend of the input field is determined byte-by-byte for the above + conversions ('c', 's', '['), with no special provisions being made for + multibyte characters. The resulting field is nevertheless a multibyte + sequence begining in intial shift state. + + p Matches a sequence of characters as produced by the printf() "%p" + conversion. The next pointer from the argument stack is assumed to + point to a void pointer, which will be filled with the same location + as the pointer used in the printf() statement. Note that behaviour is + undefined if the input value is not the result of an earlier printf() + call. + n Does not read input. The next pointer from the argument stack is + assumed to point to a signed integer, into which the number of + characters read from input so far by this call to fscanf() is stored. + This does not affect the return value of fscanf(). The behaviour, + should an assignment-supressing character of field width be given, + is undefined. + This can be used to test the success of literal matches and suppressed + assignments. + % Matches a single, verbatim '%' character. + + A, E, F, G and X are valid, and equivalent to their lowercase counterparts. + + All conversions except [, c, or n imply that whitespace characters from the + input stream are consumed until a non-whitespace character is encountered. + Such whitespaces do not count against a maximum field width. + + Conversions push at most one character back into the input stream. That + implies that some character sequences converted by the strtol() and strtod() + function families are not converted identically by the scnaf() function + family. + + Returns the number of input items successfully assigned. This can be zero if + an early mismatch occurs. Returns EOF if an input failure occurs before the + first conversion. +*/ +_PDCLIB_PUBLIC int fscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fprintf( stdout, format, ... ). */ +_PDCLIB_PUBLIC int printf( const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fscanf( stdin, format, ... ). */ +_PDCLIB_PUBLIC int scanf( const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fprintf( stdout, format, ... ), except that the result is + written into the buffer pointed to by s, instead of stdout, and that any + characters beyond the (n-1)th are discarded. The (n)th character is + replaced by a '\0' character in this case. + Returns the number of characters that would have been written (not counting + the terminating '\0' character) if n had been sufficiently large, if + successful, and a negative number if an encoding error ocurred. +*/ +_PDCLIB_PUBLIC int snprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fprintf( stdout, format, ... ), except that the result is + written into the buffer pointed to by s, instead of stdout. +*/ +_PDCLIB_PUBLIC int sprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fscanf( stdin, format, ... ), except that the input is read + from the buffer pointed to by s, instead of stdin. +*/ +_PDCLIB_PUBLIC int sscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); + +/* Equivalent to fprintf( stream, format, ... ), except that the argument stack + is passed as va_list parameter. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vfprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to fscanf( stream, format, ... ), except that the argument stack + is passed as va_list parameter. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to fprintf( stdout, format, ... ), except that the argument stack + is passed as va_list parameter. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vprintf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to fscanf( stdin, format, ... ), except that the argument stack + is passed as va_list parameter. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vscanf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to snprintf( s, n, format, ... ), except that the argument stack + is passed as va_list parameter. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vsnprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to fprintf( stdout, format, ... ), except that the argument stack + is passed as va_list parameter, and the result is written to the buffer + pointed to by s, instead of stdout. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vsprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Equivalent to fscanf( stdin, format, ... ), except that the argument stack + is passed as va_list parameter, and the input is read from the buffer + pointed to by s, instead of stdin. Note that va_list is not declared by + . +*/ +_PDCLIB_PUBLIC int vsscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); + +/* Character input/output functions */ + +/* Retrieve the next character from given stream. + Returns the character, EOF otherwise. + If end-of-file is reached, the EOF indicator of the stream is set. + If a read error occurs, the error indicator of the stream is set. +*/ +_PDCLIB_PUBLIC int fgetc( FILE * stream ); + +/* Read at most n-1 characters from given stream into the array s, stopping at + \n or EOF. Terminate the read string with \n. If EOF is encountered before + any characters are read, leave the contents of s unchanged. + Returns s if successful, NULL otherwise. + If a read error occurs, the error indicator of the stream is set. In this + case, the contents of s are indeterminate. +*/ +_PDCLIB_PUBLIC char * fgets( char * _PDCLIB_restrict s, int n, FILE * _PDCLIB_restrict stream ); + +/* Write the value c (cast to unsigned char) to the given stream. + Returns c if successful, EOF otherwise. + If a write error occurs, sets the error indicator of the stream is set. +*/ +_PDCLIB_PUBLIC int fputc( int c, FILE * stream ); + +/* Write the string s (not including the terminating \0) to the given stream. + Returns a value >=0 if successful, EOF otherwise. + This implementation does set the error indicator of the stream if a write + error occurs. +*/ +_PDCLIB_PUBLIC int fputs( const char * _PDCLIB_restrict s, FILE * _PDCLIB_restrict stream ); + +/* Equivalent to fgetc( stream ), but may be overloaded by a macro that + evaluates its parameter more than once. +*/ +_PDCLIB_PUBLIC int getc( FILE * stream ); + +/* Equivalent to fgetc( stdin ). */ +_PDCLIB_PUBLIC int getchar( void ); + +/* Equivalent to fputc( c, stream ), but may be overloaded by a macro that + evaluates its parameter more than once. +*/ +_PDCLIB_PUBLIC int putc( int c, FILE * stream ); + +/* Equivalent to fputc( c, stdout ), but may be overloaded by a macro that + evaluates its parameter more than once. +*/ +_PDCLIB_PUBLIC int putchar( int c ); + +/* Write the string s (not including the terminating \0) to stdout, and append + a newline to the output. Returns a value >= 0 when successful, EOF if a + write error occurred. +*/ +_PDCLIB_PUBLIC int puts( const char * s ); + +/* Push the value c (cast to unsigned char) back onto the given (input) stream. + A character pushed back in this way will be delivered by subsequent read + operations (and skipped by subsequent file positioning operations) as if it + has not been read. The external representation of the stream is unaffected + by this pushback (it is a buffer operation). One character of pushback is + guaranteed, further pushbacks may fail. EOF as value for c does not change + the input stream and results in failure of the function. + For text files, the file position indicator is indeterminate until all + pushed-back characters are read. For binary files, the file position + indicator is decremented by each successful call of ungetc(). If the file + position indicator for a binary file was zero before the call of ungetc(), + behaviour is undefined. (Older versions of the library allowed such a call.) + Returns the pushed-back character if successful, EOF if it fails. +*/ +_PDCLIB_PUBLIC int ungetc( int c, FILE * stream ); + +/* Direct input/output functions */ + +/* Read up to nmemb elements of given size from given stream into the buffer + pointed to by ptr. Returns the number of elements successfully read, which + may be less than nmemb if a read error or EOF is encountered. If a read + error is encountered, the value of the file position indicator is + indeterminate. If a partial element is read, its value is indeterminate. + If size or nmemb are zero, the function does nothing and returns zero. +*/ +_PDCLIB_PUBLIC size_t fread( void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream ); + +/* Write up to nmemb elements of given size from buffer pointed to by ptr to + the given stream. Returns the number of elements successfully written, which + will be less than nmemb only if a write error is encountered. If a write + error is encountered, the value of the file position indicator is + indeterminate. If size or nmemb are zero, the function does nothing and + returns zero. +*/ +_PDCLIB_PUBLIC size_t fwrite( const void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream ); + +/* File positioning functions */ + +/* Store the current position indicator (and, where appropriate, the current + mbstate_t status object) for the given stream into the given pos object. The + actual contents of the object are unspecified, but it can be used as second + parameter to fsetpos() to reposition the stream to the exact position and + parse state at the time fgetpos() was called. + Returns zero if successful, nonzero otherwise. + TODO: Implementation-defined errno setting for fgetpos(). +*/ +_PDCLIB_PUBLIC int fgetpos( FILE * _PDCLIB_restrict stream, fpos_t * _PDCLIB_restrict pos ); + +/* Set the position indicator for the given stream to the given offset from: + - the beginning of the file if whence is SEEK_SET, + - the current value of the position indicator if whence is SEEK_CUR, + - end-of-file if whence is SEEK_END. + On text streams, non-zero offsets are only allowed with SEEK_SET, and must + have been returned by ftell() for the same file. + Any characters buffered by ungetc() are dropped, the end-of-file indicator + for the stream is cleared. If the given stream is an update stream, the next + operation after a successful fseek() may be either input or output. + Returns zero if successful, nonzero otherwise. If a read/write error occurs, + the error indicator for the given stream is set. +*/ +_PDCLIB_PUBLIC int fseek( FILE * stream, long int offset, int whence ); + +/* Set the position indicator (and, where appropriate the mbstate_t status + object) for the given stream to the given pos object (created by an earlier + call to fgetpos() on the same file). + Any characters buffered by ungetc() are dropped, the end-of-file indicator + for the stream is cleared. If the given stream is an update stream, the next + operation after a successful fsetpos() may be either input or output. + Returns zero if successful, nonzero otherwise. If a read/write error occurs, + the error indicator for the given stream is set. + TODO: Implementation-defined errno setting for fsetpos(). +*/ +_PDCLIB_PUBLIC int fsetpos( FILE * stream, const fpos_t * pos ); + +/* Return the current offset of the given stream from the beginning of the + associated file. For text streams, the exact value returned is unspecified + (and may not be equal to the number of characters), but may be used in + subsequent calls to fseek(). + Returns -1L if unsuccessful. + TODO: Implementation-defined errno setting for ftell(). +*/ +_PDCLIB_PUBLIC long int ftell( FILE * stream ); + +/* Equivalent to (void)fseek( stream, 0L, SEEK_SET ), except that the error + indicator for the stream is also cleared. +*/ +_PDCLIB_PUBLIC void rewind( FILE * stream ); + +/* Error-handling functions */ + +/* Clear the end-of-file and error indicators for the given stream. */ +_PDCLIB_PUBLIC void clearerr( FILE * stream ); + +/* Return zero if the end-of-file indicator for the given stream is not set, + nonzero otherwise. +*/ +_PDCLIB_PUBLIC int feof( FILE * stream ); + +/* Return zero if the error indicator for the given stream is not set, nonzero + otherwise. +*/ +_PDCLIB_PUBLIC int ferror( FILE * stream ); + +/* If s is neither a NULL pointer nor an empty string, print the string to + stderr (with appended colon (':') and a space) first. In any case, print an + error message depending on the current value of errno (being the same as if + strerror( errno ) had been called). +*/ +_PDCLIB_PUBLIC void perror( const char * s ); + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 + +#define L_tmpnam_s _PDCLIB_L_tmpnam +#define TMP_MAX_S _PDCLIB_TMP_MAX + +#ifndef _PDCLIB_ERRNO_T_DEFINED +#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED +typedef int errno_t; +#endif + +#ifndef _PDCLIB_RSIZE_T_DEFINED +#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED +typedef _PDCLIB_size_t rsize_t; +#endif + +/* Open a temporary file with mode "wb+", i.e. binary-update. Remove the file + automatically if it is closed or the program exits normally (by returning + from main() or calling exit()). + If successful, the FILE * pointed to by streamptr will be set to point at + the opened file handle, and the function returns zero. If unsuccessful, + the FILE * pointed to by streamptr will be set to NULL and a non-zero + value is returned. + The following conditions will be considered runtime constraint violations: + - streamptr being NULL. + In case of a constraint violation, no file is being created. + This implementation does not remove temporary files if the process aborts + abnormally (e.g. abort()). +*/ +_PDCLIB_PUBLIC errno_t tmpfile_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict streamptr ); + +/* Open the file with the given filename in the given mode, and sets the given + streamptr to point at the file handle for that file, in which error and + end-of-file indicator are cleared. Defined values for mode are: + + READ MODES + text files binary files + without update "r" "rb" + with update "r+" "rb+" or "r+b" + + Opening in read mode fails if no file with the given filename exists, or if + cannot be read. + + WRITE MODES + text files binary files + without update "w" "wb" + with update "w+" "wb+" or "w+b" + + With write modes, if a file with the given filename already exists, it is + truncated to zero length. + + APPEND MODES + text files binary files + without update "a" "ab" + with update "a+" "ab+" or "a+b" + + With update modes, if a file with the given filename already exists, it is + not truncated to zero length, but all writes are forced to end-of-file (this + regardless to fseek() calls). Note that binary files opened in append mode + might have their end-of-file padded with '\0' characters. + + Update modes mean that both input and output functions can be performed on + the stream, but output must be terminated with a call to either fflush(), + fseek(), fsetpos(), or rewind() before input is performed, and input must + be terminated with a call to either fseek(), fsetpos(), or rewind() before + output is performed, unless input encountered end-of-file. + + If a text file is opened with update mode, the implementation is at liberty + to open a binary stream instead. This implementation honors the exact mode + given. + + The stream is fully buffered if and only if it can be determined not to + refer to an interactive device. + + If the mode string begins with but is longer than one of the above sequences + the implementation is at liberty to ignore the additional characters, or do + implementation-defined things. This implementation only accepts the exact + modes above. + + The following conditions will be considered runtime constraint violations: + - streamptr being NULL. + - filename being NULL. + - mode being NULL. + In case of a constraint violation, no file is opened. If streamptr is not + NULL, *streamptr is set to NULL. + + Returns zero if successful, non-zero otherwise. +*/ +_PDCLIB_PUBLIC errno_t fopen_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict streamptr, const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode ); + +/* Close any file currently associated with the given stream. Open the file + identified by the given filename with the given mode (equivalent to fopen()), + and associate it with the given stream. If filename is a NULL pointer, + attempt to change the mode of the given stream. + This implementation allows any mode changes on "real" files, and associating + of the standard streams with files. It does *not* support mode changes on + standard streams. + (Primary use of this function is to redirect stdin, stdout, and stderr.) + + The following conditions will be considered runtime constraint violations: + - newstreamptr being NULL. + - mode being NULL. + - stream being NULL. + In case of a constraint violation, no attempt is made to close or open any + file. If newstreamptr is not NULL, *newstreamptr is set to NULL. + + Returns zero if successfull, non-zero otherwise. +*/ +_PDCLIB_PUBLIC errno_t freopen_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict newstreamptr, const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode, FILE * _PDCLIB_restrict stream ); + +/* None of these are implemented yet. Placeholder declarations. */ +_PDCLIB_PUBLIC errno_t tmpnam_s( char * s, rsize_t maxsize ); +_PDCLIB_PUBLIC int fprintf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int fscanf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int printf_s( const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int scanf_s( const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int snprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int sprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int sscanf_s( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); +_PDCLIB_PUBLIC int vfprintf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vfscanf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vprintf_s( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vscanf_s( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vsnprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vsprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC int vsscanf_s( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); +_PDCLIB_PUBLIC char * gets_s( char * s, rsize_t n ); + +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDIO_H +#include _PDCLIB_EXTEND_STDIO_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdlib.h b/RockOS/sysroot/usr/include/stdlib.h new file mode 100644 index 0000000..9dc8b33 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdlib.h @@ -0,0 +1,379 @@ +/* General utilities + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDLIB_H +#define _PDCLIB_STDLIB_H _PDCLIB_STDLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_SIZE_T_DEFINED +#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED +typedef _PDCLIB_size_t size_t; +#endif + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +/* Numeric conversion functions */ + +/* TODO: atof(), strtof(), strtod(), strtold() */ + +_PDCLIB_PUBLIC double atof( const char * nptr ); +_PDCLIB_PUBLIC double strtod( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); +_PDCLIB_PUBLIC float strtof( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); +_PDCLIB_PUBLIC long double strtold( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); + +/* Separate the character array nptr into three parts: A (possibly empty) + sequence of whitespace characters, a character representation of an integer + to the given base, and trailing invalid characters (including the terminating + null character). If base is 0, assume it to be 10, unless the integer + representation starts with 0x / 0X (setting base to 16) or 0 (setting base to + 8). If given, base can be anything from 0 to 36, using the 26 letters of the + base alphabet (both lowercase and uppercase) as digits 10 through 35. + The integer representation is then converted into the return type of the + function. It can start with a '+' or '-' sign. If the sign is '-', the result + of the conversion is negated. + If the conversion is successful, the converted value is returned. If endptr + is not a NULL pointer, a pointer to the first trailing invalid character is + returned in *endptr. + If no conversion could be performed, zero is returned (and nptr in *endptr, + if endptr is not a NULL pointer). If the converted value does not fit into + the return type, the functions return LONG_MIN, LONG_MAX, ULONG_MAX, + LLONG_MIN, LLONG_MAX, or ULLONG_MAX respectively, depending on the sign of + the integer representation and the return type, and errno is set to ERANGE. +*/ +/* There is strtoimax() and strtoumax() in operating on intmax_t / + uintmax_t, if the long long versions do not suit your needs. +*/ +_PDCLIB_PUBLIC long int strtol( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); +_PDCLIB_PUBLIC long long int strtoll( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); +_PDCLIB_PUBLIC unsigned long int strtoul( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); +_PDCLIB_PUBLIC unsigned long long int strtoull( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); + +/* These functions are the equivalent of (int)strtol( nptr, NULL, 10 ), + strtol( nptr, NULL, 10 ) and strtoll(nptr, NULL, 10 ) respectively, with the + exception that they do not have to handle overflow situations in any defined + way. + (PDCLib does not simply forward these to their strtox() equivalents, but + provides a simpler atox() function that saves a couple of tests and simply + continues with the conversion in case of overflow.) +*/ +_PDCLIB_PUBLIC int atoi( const char * nptr ); +_PDCLIB_PUBLIC long int atol( const char * nptr ); +_PDCLIB_PUBLIC long long int atoll( const char * nptr ); + +/* Pseudo-random sequence generation functions */ + +extern unsigned long int _PDCLIB_seed; + +#define RAND_MAX 32767 + +/* Returns the next number in a pseudo-random sequence, which is between 0 and + RAND_MAX. + (PDCLib uses the implementation suggested by the standard document, which is + next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768;) +*/ +_PDCLIB_PUBLIC int rand( void ); + +/* Initialize a new pseudo-random sequence with the starting seed. Same seeds + result in the same pseudo-random sequence. The default seed is 1. +*/ +_PDCLIB_PUBLIC void srand( unsigned int seed ); + +/* Memory management functions */ + +/* Allocate a chunk of heap memory of given size. If request could not be + satisfied, return NULL. Otherwise, return a pointer to the allocated + memory. Memory contents are undefined. +*/ +_PDCLIB_PUBLIC void * malloc( size_t size ); + +/* Allocate a chunk of heap memory that is large enough to hold nmemb elements + of the given size, and zero-initialize that memory. If request could not be + satisfied, return NULL. Otherwise, return a pointer to the allocated + memory. +*/ +_PDCLIB_PUBLIC void * calloc( size_t nmemb, size_t size ); + +/* De-allocate a chunk of heap memory previously allocated using malloc(), + calloc(), or realloc(), and pointed to by ptr. If ptr does not match a + pointer previously returned by the mentioned allocation functions, or + free() has already been called for this ptr, behaviour is undefined. +*/ +_PDCLIB_PUBLIC void free( void * ptr ); + +/* Resize a chunk of memory previously allocated with malloc() and pointed to + by ptr to the given size (which might be larger or smaller than the original + size). Returns a pointer to the reallocated memory, or NULL if the request + could not be satisfied. Note that the resizing might include a memcpy() + from the original location to a different one, so the return value might or + might not equal ptr. If size is larger than the original size, the value of + memory beyond the original size is undefined. If ptr is NULL, realloc() + behaves like malloc(). +*/ +_PDCLIB_PUBLIC void * realloc( void * ptr, size_t size ); + +/* Communication with the environment */ + +/* These two can be passed to exit() or _Exit() as status values, to signal + successful and unsuccessful program termination, respectively. EXIT_SUCCESS + can be replaced by 0. How successful or unsuccessful program termination are + signaled to the environment, and what happens if exit() or _Exit() are being + called with a value that is neither of the three, is defined by the hosting + OS and its glue function. +*/ +#define EXIT_SUCCESS _PDCLIB_SUCCESS +#define EXIT_FAILURE _PDCLIB_FAILURE + +/* Initiate abnormal process termination, unless programm catches SIGABRT and + does not return from the signal handler. + This implementantion flushes all streams, closes all files, and removes any + temporary files before exiting with EXIT_FAILURE. + abort() does not return. +*/ +_PDCLIB_PUBLIC _PDCLIB_Noreturn void abort( void ) _PDCLIB_NORETURN; + +/* Register a function that will be called on quick_exit(). + At least 32 functions can be registered this way, and will be called in + reverse order of registration (last-in, first-out). + Returns zero if registration is successfull, nonzero if it failed. +*/ +_PDCLIB_PUBLIC int at_quick_exit( void ( *func )( void ) ); + +/* Register a function that will be called on exit(), or when main() returns. + At least 32 functions can be registered this way, and will be called in + reverse order of registration (last-in, first-out). + Returns zero if registration is successfull, nonzero if it failed. +*/ +_PDCLIB_PUBLIC int atexit( void ( *func )( void ) ); + +/* Normal process termination. Functions registered by atexit() (see above) are + called, streams flushed, files closed and temporary files removed before the + program is terminated with the given status. (See comment for EXIT_SUCCESS + and EXIT_FAILURE above.) + exit() does not return. +*/ +_PDCLIB_PUBLIC _PDCLIB_Noreturn void exit( int status ) _PDCLIB_NORETURN; + +/* Normal process termination. Functions registered by at_quick_exit() (see + above) are called, streams flushed, files closed and temporary files removed + before the program is terminated with the given status. (See comment for + EXIT_SUCCESS and EXIT_FAILURE above.) + quick_exit() does not return. +*/ +_PDCLIB_PUBLIC _PDCLIB_Noreturn void quick_exit( int status ) _PDCLIB_NORETURN; + +/* Normal process termination. Functions registered by atexit()/at_quick_exit() + (see above) are NOT CALLED. This implementation DOES flush streams, close + files and removes temporary files before the program is teminated with the + given status. (See comment for EXIT_SUCCESS and EXIT_FAILURE above.) + _Exit() does not return. +*/ +_PDCLIB_PUBLIC _PDCLIB_Noreturn void _Exit( int status ) _PDCLIB_NORETURN; + +/* Search an environment-provided key-value map for the given key name, and + return a pointer to the associated value string (or NULL if key name cannot + be found). The value string pointed to might be overwritten by a subsequent + call to getenv(). The library never calls getenv() itself. + Details on the provided keys and how to set / change them are determined by + the hosting OS and its glue function. +*/ +_PDCLIB_PUBLIC char * getenv( const char * name ); + +/* If string is a NULL pointer, system() returns nonzero if a command processor + is available, and zero otherwise. If string is not a NULL pointer, it is + passed to the command processor. If system() returns, it does so with a + value that is determined by the hosting OS and its glue function. +*/ +_PDCLIB_PUBLIC int system( const char * string ); + +/* Searching and sorting */ + +/* Do a binary search for a given key in the array with a given base pointer, + which consists of nmemb elements that are of the given size each. To compare + the given key with an element from the array, the given function compar is + called (with key as first parameter and a pointer to the array member as + second parameter); the function should return a value less than, equal to, + or greater than 0 if the key is considered to be less than, equal to, or + greater than the array element, respectively. + The function returns a pointer to a matching element found, or NULL if no + match is found. +*/ +_PDCLIB_PUBLIC void * bsearch( const void * key, const void * base, size_t nmemb, size_t size, int ( *compar )( const void *, const void * ) ); + +/* Do a quicksort on an array with a given base pointer, which consists of + nmemb elements that are of the given size each. To compare two elements from + the array, the given function compar is called, which should return a value + less than, equal to, or greater than 0 if the first argument is considered + to be less than, equal to, or greater than the second argument, respectively. + If two elements are compared equal, their order in the sorted array is not + specified. +*/ +_PDCLIB_PUBLIC void qsort( void * base, size_t nmemb, size_t size, int ( *compar )( const void *, const void * ) ); + +/* Integer arithmetic functions */ + +/* Return the absolute value of the argument. Note that on machines using two- + complement's notation (most modern CPUs), the largest negative value cannot + be represented as positive value. In this case, behaviour is unspecified. +*/ +_PDCLIB_PUBLIC int abs( int j ); +_PDCLIB_PUBLIC long int labs( long int j ); +_PDCLIB_PUBLIC long long int llabs( long long int j ); + +/* These structures each have a member quot and a member rem, of type int (for + div_t), long int (for ldiv_t) and long long it (for lldiv_t) respectively. + The order of the members is platform-defined to allow the div() functions + below to be implemented efficiently. +*/ +typedef struct _PDCLIB_div_t div_t; +typedef struct _PDCLIB_ldiv_t ldiv_t; +typedef struct _PDCLIB_lldiv_t lldiv_t; + +/* Return quotient (quot) and remainder (rem) of an integer division in one of + the structs above. +*/ +_PDCLIB_PUBLIC div_t div( int numer, int denom ); +_PDCLIB_PUBLIC ldiv_t ldiv( long int numer, long int denom ); +_PDCLIB_PUBLIC lldiv_t lldiv( long long int numer, long long int denom ); + +/* TODO: Multibyte / wide character conversion functions */ + +/* TODO: Macro MB_CUR_MAX */ + +/* +_PDCLIB_PUBLIC int mblen( const char * s, size_t n ); +_PDCLIB_PUBLIC int mbtowc( wchar_t * _PDCLIB_restrict pwc, const char * _PDCLIB_restrict s, size_t n ); +_PDCLIB_PUBLIC int wctomb( char * s, wchar_t wc ); +_PDCLIB_PUBLIC size_t mbstowcs( wchar_t * _PDCLIB_restrict pwcs, const char * _PDCLIB_restrict s, size_t n ); +_PDCLIB_PUBLIC size_t wcstombs( char * _PDCLIB_restrict s, const wchar_t * _PDCLIB_restrict pwcs, size_t n ); +*/ + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 + +#ifndef _PDCLIB_ERRNO_T_DEFINED +#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED +typedef int errno_t; +#endif + +#ifndef _PDCLIB_RSIZE_T_DEFINED +#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED +typedef size_t rsize_t; +#endif + +/* A function type that can serve as a constraint handler (see below). The + first parameter is an error message on the constraint violation, the + second parameter a pointer to an implementation-defined object, the + third an error code related to the constraint violation. + If the function calling the constraint handler is defined to return + errno_t, the third parameter will be identical to the return value of + that function. + This implementation sets the second parameter of the constraint handler + call to NULL. +*/ +typedef void ( *constraint_handler_t )( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); + +/* The currently active constraint violation handler. This implementation + sets abort_handler_s as the default constraint violation handler. +*/ +extern constraint_handler_t _PDCLIB_constraint_handler; + +/* Set the given function as the new constraint violation handler. */ +_PDCLIB_PUBLIC constraint_handler_t set_constraint_handler_s( constraint_handler_t handler ); + +/* One of two predefined constraint violation handlers. When called, it will + print an error message (including the message passed as the first + parameter to the handler function) and call abort(). +*/ +_PDCLIB_PUBLIC void abort_handler_s( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); + +/* One of two predefined constraint violation handlers. Simply returns, + ignoring the constraint violation. +*/ +_PDCLIB_PUBLIC void ignore_handler_s( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); + +/* Search an environment-provided key-value map for the given key name. + If the name is found, + - if len is not NULL, the length of the associated value string is stored + in that location. + - if len < maxsize, the value string is copied to the indicated location. + If the name is not found, + - if len is not NULL, a zero is stored in that location. + - if maxsize > 0, value[0] is set to the null character. + Details on the provided keys and how to set / change them are determined by + the hosting OS and its glue function. + The following conditions will be considered runtime constraint violations: + - value being a NULL pointer. + - maxsize == 0 or maxsize > RSIZE_MAX. + In case of a constraint violation, if len is not NULL a zero will be + stored at that location, and the environment key-value map not searched. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t getenv_s( size_t * _PDCLIB_restrict len, char * _PDCLIB_restrict value, rsize_t maxsize, const char * _PDCLIB_restrict name ); + +/* Do a binary search for a given key in the array with a given base pointer, + which consists of nmemb elements that are of the given size each. To compare + the given key with an element from the array, the given function compar is + called (with key as first parameter, a pointer to the array member as + second parameter, and the context parameter passed to bsearch_s() as third + parameter); the function should return a value less than, equal to, + or greater than 0 if the key is considered to be less than, equal to, or + greater than the array element, respectively. + The function returns a pointer to a matching element found, or NULL if no + match is found. + The following conditions will be considered runtime constraint violations: + - nmemb or size > RSIZE_MAX. + - nmemb > 0 and either of key, base, or compar being a null pointer. + In case of a constraint violation, the array will not be searched. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC void * bsearch_s( const void * key, const void * base, rsize_t nmemb, rsize_t size, int ( *compar )( const void * k, const void * y, void * context ), void * context ); + +/* Do a quicksort on an array with a given base pointer, which consists of + nmemb elements that are of the given size each. To compare two elements from + the array, the given function compar is called, with the first two arguments + being pointers to the two objects to be compared, and the third argument + being the context parameter passed to qsort_s. The compar function should + return a value less than, equal to, or greater than 0 if the first argument + is considered to be less than, equal to, or greater than the second argument, + respectively. If two elements are compared equal, their order in the sorted + array is not specified. + The following conditions will be considered runtime constraint violations: + - nmemb or size > RSIZE_MAX. + - nmemb > 0 and either of base or compar being a null pointer. + In case of a constraint violation, the array will not be sorted. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t qsort_s( void * base, rsize_t nmemb, rsize_t size, int ( *compar )( const void * x, const void * y, void * context ), void * context ); + +/* TODO: Multibyte / wide character functions */ + +#endif + +#ifdef __cplusplus +} +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDLIB_H +#include _PDCLIB_EXTEND_STDLIB_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/stdnoreturn.h b/RockOS/sysroot/usr/include/stdnoreturn.h new file mode 100644 index 0000000..ab4ddb4 --- /dev/null +++ b/RockOS/sysroot/usr/include/stdnoreturn.h @@ -0,0 +1,26 @@ +/* _Noreturn + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STDNORETURN_H +#define _PDCLIB_STDNORETURN_H _PDCLIB_STDNORETURN_H + +#include "pdclib/_PDCLIB_internal.h" + +/* This basically breaks the letter of the standard (which states that + noreturn be defined to _Noreturn). This defines noreturn -> _Noreturn + on C11 compliant compilers only (as older compilers do not know about + _Noreturn). +*/ +#define noreturn _PDCLIB_Noreturn + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STDNORETURN_H +#include _PDCLIB_EXTEND_STDNORETURN_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/string.h b/RockOS/sysroot/usr/include/string.h new file mode 100644 index 0000000..05062fd --- /dev/null +++ b/RockOS/sysroot/usr/include/string.h @@ -0,0 +1,394 @@ +/* String handling + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_STRING_H +#define _PDCLIB_STRING_H _PDCLIB_STRING_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_SIZE_T_DEFINED +#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED +typedef _PDCLIB_size_t size_t; +#endif + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +/* String function conventions */ + +/* + In any of the following functions taking a size_t n to specify the length of + an array or size of a memory region, n may be 0, but the pointer arguments to + the call shall still be valid unless otherwise stated. +*/ + +/* Copying functions */ + +/* Copy a number of n characters from the memory area pointed to by s2 to the + area pointed to by s1. If the two areas overlap, behaviour is undefined. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC void * memcpy( void * _PDCLIB_restrict s1, const void * _PDCLIB_restrict s2, size_t n ); + +/* Copy a number of n characters from the memory area pointed to by s2 to the + area pointed to by s1. The two areas may overlap. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC void * memmove( void * _PDCLIB_restrict s1, const void * _PDCLIB_restrict s2, size_t n ); + +/* Copy the character array s2 (including terminating '\0' byte) into the + character array s1. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC char * strcpy( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); + +/* Copy a maximum of n characters from the character array s2 into the character + array s1. If s2 is shorter than n characters, '\0' bytes will be appended to + the copy in s1 until n characters have been written. If s2 is longer than n + characters, NO terminating '\0' will be written to s1. If the arrays overlap, + behaviour is undefined. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC char * strncpy( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); + +/* Concatenation functions */ + +/* Append the contents of the character array s2 (including terminating '\0') to + the character array s1 (first character of s2 overwriting the '\0' of s1). If + the arrays overlap, behaviour is undefined. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC char * strcat( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); + +/* Append a maximum of n characters from the character array s2 to the character + array s1 (first character of s2 overwriting the '\0' of s1). A terminating + '\0' is ALWAYS appended, even if the full n characters have already been + written. If the arrays overlap, behaviour is undefined. + Returns the value of s1. +*/ +_PDCLIB_PUBLIC char * strncat( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); + +/* Comparison functions */ + +/* Compare the first n characters of the memory areas pointed to by s1 and s2. + Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if + s1 > s2. +*/ +_PDCLIB_PUBLIC int memcmp( const void * s1, const void * s2, size_t n ); + +/* Compare the character arrays s1 and s2. + Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if + s1 > s2. +*/ +_PDCLIB_PUBLIC int strcmp( const char * s1, const char * s2 ); + +/* Compare the character arrays s1 and s2, interpreted as specified by the + LC_COLLATE category of the current locale. + Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if + s1 > s2. + TODO: Currently a dummy wrapper for strcmp() as PDCLib does not yet support + locales. +*/ +_PDCLIB_PUBLIC int strcoll( const char * s1, const char * s2 ); + +/* Compare no more than the first n characters of the character arrays s1 and + s2. + Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if + s1 > s2. +*/ +_PDCLIB_PUBLIC int strncmp( const char * s1, const char * s2, size_t n ); + +/* Transform the character array s2 as appropriate for the LC_COLLATE setting of + the current locale. If length of resulting string is less than n, store it in + the character array pointed to by s1. Return the length of the resulting + string. +*/ +_PDCLIB_PUBLIC size_t strxfrm( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); + +/* Search functions */ + +/* Search the first n characters in the memory area pointed to by s for the + character c (interpreted as unsigned char). + Returns a pointer to the first instance found, or NULL. +*/ +_PDCLIB_PUBLIC void * memchr( const void * s, int c, size_t n ); + +/* Search the character array s (including terminating '\0') for the character c + (interpreted as char). + Returns a pointer to the first instance found, or NULL. +*/ +_PDCLIB_PUBLIC char * strchr( const char * s, int c ); + +/* Determine the length of the initial substring of character array s1 which + consists only of characters not from the character array s2. + Returns the length of that substring. +*/ +_PDCLIB_PUBLIC size_t strcspn( const char * s1, const char * s2 ); + +/* Search the character array s1 for any character from the character array s2. + Returns a pointer to the first occurrence, or NULL. +*/ +_PDCLIB_PUBLIC char * strpbrk( const char * s1, const char * s2 ); + +/* Search the character array s (including terminating '\0') for the character c + (interpreted as char). + Returns a pointer to the last instance found, or NULL. +*/ +_PDCLIB_PUBLIC char * strrchr( const char * s, int c ); + +/* Determine the length of the initial substring of character array s1 which + consists only of characters from the character array s2. + Returns the length of that substring. +*/ +_PDCLIB_PUBLIC size_t strspn( const char * s1, const char * s2 ); + +/* Search the character array s1 for the substring in character array s2. + Returns a pointer to that sbstring, or NULL. If s2 is of length zero, + returns s1. +*/ +_PDCLIB_PUBLIC char * strstr( const char * s1, const char * s2 ); + +/* In a series of subsequent calls, parse a C string into tokens. + On the first call to strtok(), the first argument is a pointer to the to-be- + parsed C string. On subsequent calls, the first argument is NULL unless you + want to start parsing a new string. s2 holds an array of separator characters + which can differ from call to call. Leading separators are skipped, the first + trailing separator overwritten with '\0'. + Returns a pointer to the next token. + WARNING: This function uses static storage, and as such is not reentrant. +*/ +_PDCLIB_PUBLIC char * strtok( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); + +/* Miscellaneous functions */ + +/* Write the character c (interpreted as unsigned char) to the first n + characters of the memory area pointed to by s. + Returns s. +*/ +_PDCLIB_PUBLIC void * memset( void * s, int c, size_t n ); + +/* Map an error number to a (locale-specific) error message string. Error + numbers are typically errno values, but any number is mapped to a message. + TODO: PDCLib does not yet support locales. +*/ +_PDCLIB_PUBLIC char * strerror( int errnum ); + +/* Returns the length of the string s (excluding terminating '\0'). +*/ +_PDCLIB_PUBLIC size_t strlen( const char * s ); + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 + +#ifndef _PDCLIB_ERRNO_T_DEFINED +#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED +typedef int errno_t; +#endif + +#ifndef _PDCLIB_RSIZE_T_DEFINED +#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED +typedef _PDCLIB_size_t rsize_t; +#endif + +/* Copy a number of n characters from the memory area pointed to by s2 to the + area pointed to by s1 of size s1max. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max or n being > RSIZE_MAX. + - n > s1max (not enough space in s1). + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX + then the first s1max characters of s1 will be set to zero. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t memcpy_s( void * _PDCLIB_restrict s1, rsize_t s1max, const void * _PDCLIB_restrict s2, rsize_t n ); + +/* Copy a number of n characters from the memory area pointed to by s2 to the + area pointed to by s1 of size s1max. The two areas may overlap. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max or n being > RSIZE_MAX. + - n > s1max (not enough space in s1). + In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX + then the first s1max characters of s1 will be set to zero. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t memmove_s( void * _PDCLIB_restrict s1, rsize_t s1max, const void * _PDCLIB_restrict s2, rsize_t n ); + +/* Copy the character array s2 (including terminating '\0' byte) into the + character array s1. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max being zero or > RSIZE_MAX. + - s1max not greater than strnlen_s( s2, s1max ) (not enough space in s1). + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX + then s1[0] will be set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t strcpy_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2 ); + +/* Copy a maximum of n characters from the character array s2 into the character + array s1. If s2 is longer than n, s1[n] will be set to '\0'. + Returns zero if successful, non-zero otherwise. + + ATTENTION ATTENTION ATTENTION + + This function differs in two fundamental ways from strncpy(): + - remaining space in s1 will NOT be zeroed. Their value is unspecified. + - s1 WILL be zero-terminated even if there is not enough space to hold + all n characters from s2. + + THANK YOU FOR YOUR ATTENTION. + + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max or n being > RSIZE_MAX. + - s1max being zero. + - n >= s1max and s1max <= strnlen_s( s2, s1max ) (not enough space in s1). + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max is greater + zero and <= RSIZE_MAX, s1[0] will be set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t strncpy_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2, rsize_t n ); + +/* Append the contents of the character array s2 (including terminating '\0') to + the character array s1 (first character of s2 overwriting the '\0' of s1). + Elements following the terminating null character (if any) take unspecified + values. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max being > RSIZE_MAX. + - s1max being zero. + - not enough space in s1 for both s1 and the characters copied from s2. + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max is greater + zero and <= RSIZE_MAX, s1[0] will be set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t strcat_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2 ); + +/* Append a maximum of n characters from the character array s2 to the + character array s1 (first character of s2 overwriting the '\0' of s1). A + terminating '\0' is ALWAYS appended, even if the full n characters have + already been written. + Elements following the terminating null character (if any) take unspecified + values. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s1 or s2 being NULL. + - s1max or n being > RSIZE_MAX. + - s1max being zero. + - not enough space in s1 for both s1 and the characters copied from s2. + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max is greater + zero and <= RSIZE_MAX, s1[0] will be set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t strncat_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2, rsize_t n ); + +/* In a series of subsequent calls, parse a C string into tokens. + On the first call to strtok(), the first argument is a pointer to the to-be- + parsed C string of size *s1max. On subsequent calls, the first argument is + NULL unless you want to start parsing a new string. s2 holds an array of + separator characters which can differ from call to call. Leading separators + are skipped, the first trailing separator overwritten with '\0'. + Returns a pointer to the next token. + The following conditions will be considered runtime constraint violations: + - s1max, s2, or ptr being NULL. + - s1max or n being > RSIZE_MAX. + - s1max being zero. + - not enough space in s1 for both s1 and the characters copied from s2. + - copying between overlapping objects. + In case of a constraint violation, if s1 is not NULL and s1max is greater + zero and <= RSIZE_MAX, s1[0] will be set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC char * strtok_s( char * _PDCLIB_restrict s1, rsize_t * _PDCLIB_restrict s1max, const char * _PDCLIB_restrict s2, char ** _PDCLIB_restrict ptr ); + +/* Write the character c (interpreted as unsigned char) to the first n + characters of the memory area pointed to by s of size smax. + Returns zero if successful, non-zero otherwise. + The following conditions will be considered runtime constraint violations: + - s being NULL. + - smax or n being > RSIZE_MAX. + - n being > smax. + In case of a constraint violation, if s is not NULL and smax is <= RSIZE_MAX + the value of c (interpreted as unsigned char) is written to the first smax + characters of s. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t memset_s( void * s, rsize_t smax, int c, rsize_t n ); + +/* Map an error number to a (locale-specific) error message string. Error + numbers are typically errno values, but any number is mapped to a message. + TODO: PDCLib does not yet support locales. + If the length of the mapped string is < maxsize, the string is copied to s. + Otherwise, if maxsize is greater than zero, as much of the string as does + fit is copied, and s[maxsize-1] set to '\0'. If maxsize is greater than 3, + the partial string is made to end in "...". + Returns zero if the string was copied successfully in full, non-zero + otherwise. + The following conditions will be considered runtime constraint violations: + - s being NULL. + - maxsize being zero or > RSIZE_MAX. + In case of a constraint violation, s is not modified. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t strerror_s( char * s, rsize_t maxsize, errno_t errnum ); + +/* Map an error number to a (locale-specific) error message string, the same + way as strerror_s() would do. Error numbers are typically errno values, + but any number is mapped to a message. + TODO: PDCLib does not yet support locales. + Returns the length of the mapped string. +*/ +_PDCLIB_PUBLIC size_t strerrorlen_s( errno_t errnum ); + +/* Returns the length of the string s (excluding terminating '\0'). + If there is no null character in the first maxsize characters of s, + rerturns maxsize. If s is NULL, returns zero. + At most the first maxsize characters of s shall be accessed by the + function. +*/ +_PDCLIB_PUBLIC size_t strnlen_s( const char * s, size_t maxsize ); + +#endif + +#ifdef __cplusplus +} +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_STRING_H +#include _PDCLIB_EXTEND_STRING_H +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/sys/stat.h b/RockOS/sysroot/usr/include/sys/stat.h new file mode 100644 index 0000000..7225b36 --- /dev/null +++ b/RockOS/sysroot/usr/include/sys/stat.h @@ -0,0 +1,50 @@ +#ifndef _SYS_STAT_H +#define _SYS_STAT_H + +#include + +// Basic POSIX types for i686 execution +typedef uint32_t dev_t; +typedef uint32_t ino_t; +typedef uint32_t mode_t; +typedef uint32_t nlink_t; +typedef uint32_t uid_t; +typedef uint32_t gid_t; +typedef int32_t off_t; +typedef int32_t time_t; + +// The stat layout expected by standard C files +struct stat { + dev_t st_dev; /* ID of device containing file */ + ino_t st_ino; /* Inode number */ + mode_t st_mode; /* File type and mode flags */ + nlink_t st_nlink; /* Number of hard links */ + uid_t st_uid; /* User ID of owner */ + gid_t st_gid; /* Group ID of owner */ + dev_t st_rdev; /* Device ID (if special file) */ + off_t st_size; /* Total size, in bytes */ + time_t st_atime; /* Time of last access */ + time_t st_mtime; /* Time of last modification */ + time_t st_ctime; /* Time of last status change */ +}; + +// Traditional POSIX file permission/type bitmasks +#define S_IFMT 0170000 /* Bitmask for the file type bit fields */ +#define S_IFSOCK 0140000 /* Socket */ +#define S_IFLNK 0120000 /* Symbolic link */ +#define S_IFREG 0100000 /* Regular file */ +#define S_IFBLK 0060000 /* Block device */ +#define S_IFDIR 0040000 /* Directory */ +#define S_IFCHR 0020000 /* Character device */ +#define S_IFIFO 0010000 /* FIFO */ + +#define S_IRUSR 00400 /* Owner has read permission */ +#define S_IWUSR 00200 /* Owner has write permission */ +#define S_IXUSR 00100 /* Owner has execute permission */ +#define S_IRWXU 00700 /* Owner has read, write, and execute permission */ + +// Helper check macros commonly used in PDCLib +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) + +#endif /* _SYS_STAT_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/sys/time.h b/RockOS/sysroot/usr/include/sys/time.h new file mode 100644 index 0000000..de1d7ce --- /dev/null +++ b/RockOS/sysroot/usr/include/sys/time.h @@ -0,0 +1,21 @@ +#ifndef _SYS_TIME_H +#define _SYS_TIME_H + +#include + +// Represents an exact elapsed time signature +struct timeval { + time_t tv_sec; /* Seconds since Unix Epoch */ + int32_t tv_usec; /* Microseconds component */ +}; + +// Represents traditional timezone offsets (largely obsolete but required) +struct timezone { + int tz_minuteswest; /* Minutes west of Greenwich */ + int tz_dsttime; /* Type of DST correction */ +}; + +/* Prototype for time fetching system operation */ +int gettimeofday(struct timeval *restrict tv, void *restrict tz); + +#endif /* _SYS_TIME_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/sys/times.h b/RockOS/sysroot/usr/include/sys/times.h new file mode 100644 index 0000000..0ca899e --- /dev/null +++ b/RockOS/sysroot/usr/include/sys/times.h @@ -0,0 +1,17 @@ +#ifndef _SYS_TIMES_H +#define _SYS_TIMES_H + +#include + +/* Structure describing CPU time used by a process and its children */ +struct tms { + clock_t tms_utime; /* User CPU time */ + clock_t tms_stime; /* System CPU time */ + clock_t tms_cutime; /* User CPU time of dead children */ + clock_t tms_cstime; /* System CPU time of dead children */ +}; + +/* Function prototype for timing system call */ +clock_t times(struct tms *buffer); + +#endif /* _SYS_TIMES_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/sys/types.h b/RockOS/sysroot/usr/include/sys/types.h new file mode 100644 index 0000000..be32cab --- /dev/null +++ b/RockOS/sysroot/usr/include/sys/types.h @@ -0,0 +1,29 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H + +#include + +// Standard signed and unsigned size primitives +typedef int32_t ssize_t; +typedef uint32_t size_t; + +// Process and Thread IDs +typedef int32_t pid_t; +typedef int32_t id_t; + +// File system block and reference markers +typedef int32_t blkcnt_t; +typedef int32_t blksize_t; +typedef uint32_t dev_t; +typedef uint32_t gid_t; +typedef uint32_t ino_t; +typedef uint32_t mode_t; +typedef uint32_t nlink_t; +typedef int32_t off_t; +typedef uint32_t uid_t; + +// Clock and Timing fields +typedef int32_t time_t; +typedef int32_t clock_t; + +#endif /* _SYS_TYPES_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/time.h b/RockOS/sysroot/usr/include/time.h new file mode 100644 index 0000000..17ae34f --- /dev/null +++ b/RockOS/sysroot/usr/include/time.h @@ -0,0 +1,191 @@ +/* Date and time + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_TIME_H +#define _PDCLIB_TIME_H _PDCLIB_TIMEH + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_lib_ext1.h" +#include "pdclib/_PDCLIB_internal.h" + +#ifndef _PDCLIB_SIZE_T_DEFINED +#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED +typedef _PDCLIB_size_t size_t; +#endif + +#ifndef _PDCLIB_NULL_DEFINED +#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED +#define NULL _PDCLIB_NULL +#endif + +/* See comments in _PDCLIB_config.h on the semantics of time_t and clock_t. */ + +typedef _PDCLIB_time_t time_t; +typedef _PDCLIB_clock_t clock_t; + +#define CLOCKS_PER_SEC _PDCLIB_CLOCKS_PER_SEC +#define TIME_UTC _PDCLIB_TIME_UTC + +/* Implementor's note: If you change this structure, and are using Pthread + threading support, check auxiliary/pthread/pthread_readout.c for its + twin. It is imperative that Pthread and PDCLib use identical layouts for + struct timespec, as they are implicitly cast from one to the other. This + cannot be checked for in this header (as we may not include host system + headers here), so the assert()s are in pthread_readout.c (which, in turn, + cannot include *this* header, which is why this admonishment to keep the + definitions in sync exists...). +*/ +struct timespec +{ + time_t tv_sec; + long tv_nsec; +}; + +struct tm +{ + int tm_sec; /* 0-60 */ + int tm_min; /* 0-59 */ + int tm_hour; /* 0-23 */ + int tm_mday; /* 1-31 */ + int tm_mon; /* 0-11 */ + int tm_year; /* years since 1900 */ + int tm_wday; /* 0-6 */ + int tm_yday; /* 0-365 */ + int tm_isdst; /* >0 DST, 0 no DST, <0 information unavailable */ +}; + +/* Returns the number of "clocks" in processor time since the invocation + of the program. Divide by CLOCKS_PER_SEC to get the value in seconds. + Returns -1 if the value cannot be represented in the return type or is + not available. +*/ +_PDCLIB_PUBLIC clock_t clock( void ); + +/* Returns the difference between two calendar times in seconds. */ +_PDCLIB_PUBLIC double difftime( time_t time1, time_t time0 ); + +/* Normalizes the values in the broken-down time pointed to by timeptr. + Returns the calender time specified by the broken-down time. +*/ +_PDCLIB_PUBLIC time_t mktime( struct tm * timeptr ); + +/* Returns the current calender time. If timer is not a NULL pointer, stores + the current calender time at that address as well. +*/ +_PDCLIB_PUBLIC time_t time( time_t * timer ); + +/* Sets the interval pointed to by ts to the current calender time, based + on the specified base. + Returns base, if successful, otherwise zero. +*/ +_PDCLIB_PUBLIC int timespec_get( struct timespec * ts, int base ); + +/* Converts the broken-down time pointed to by timeptr into a string in the + form "Sun Sep 16 01:03:52 1973\n\0". +*/ +_PDCLIB_PUBLIC char * asctime( const struct tm * timeptr ); + +/* Equivalent to asctime( localtime( timer ) ). */ +_PDCLIB_PUBLIC char * ctime( const time_t * timer ); + +/* Converts the calender time pointed to by timer into a broken-down time + expressed as UTC. + Returns a pointer to the broken-down time, or a NULL pointer if it + cannot be represented. +*/ +_PDCLIB_PUBLIC struct tm * gmtime( const time_t * timer ); + +/* Converts the calender time pointed to by timer into a broken-down time + expressed as local time. + Returns a pointer to the broken-down time, or a NULL pointer if if + cannot be represented. +*/ +_PDCLIB_PUBLIC struct tm * localtime( const time_t * timer ); + +/* Writes the broken-down time pointed to by timeptr into the character + array pointed to by s. The string pointed to by format controls the + exact output. No more than maxsize charactrs will be written. + Returns the number of characters written (excluding the terminating + null character), or zero on failure. +*/ +_PDCLIB_PUBLIC size_t strftime( char * _PDCLIB_restrict s, size_t maxsize, const char * _PDCLIB_restrict format, const struct tm * _PDCLIB_restrict timeptr ); + +/* Annex K -- Bounds-checking interfaces */ + +#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 + +#ifndef _PDCLIB_ERRNO_T_DEFINED +#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED +typedef int errno_t; +#endif + +#ifndef _PDCLIB_RSIZE_T_DEFINED +#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED +typedef _PDCLIB_size_t rsize_t; +#endif + +/* Converts the broken-down time pointed to by timeptr into a string in the + form "Sun Sep 16 01:03:52 1973\n\0", which is stored in buffer s of maxsize. + Returns zero if the time was successfully converted and stored, non-zero + otherwise. + The following conditions will be considered runtime constraint violations: + - s or timeptr being NULL. + - maxsize being < 26 or > RSIZE_MAX. + - the broken-down time pointed to by timeptr not being normalized. + - the year represented by the broken-down time pointed to by timeptr + being < 0 or > 9999. + In case of a constraint violation, the time will not be converted. If + s is not NULL and maxsize is neither zero nor > RSIZE_MAX, s[0] will be + set to '\0'. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC errno_t asctime_s( char * s, rsize_t maxsize, const struct tm * timeptr ); + +/* Equivalent to asctime_s( s, maxsize, localtime( timer ) ). */ +_PDCLIB_PUBLIC errno_t ctime_s( char * s, rsize_t maxsize, const time_t * timer ); + +/* Converts the calender time pointed to by timer into a broken-down time + expressed as UTC, which gets stored in the result struct. + Returns a pointer to the broken-down time, or a NULL pointer if if + cannot be represented or stored. + The following conditions will be considered runtime constraint violations: + - timer or result being NULL. + In case of a constraint violation, the time will not be converted. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC struct tm * gmtime_s( const time_t * _PDCLIB_restrict timer, struct tm * _PDCLIB_restrict result ); + +/* Converts the calender time pointed to by timer into a broken-down time + expressed as local time, which gets stored in the result struct. + Returns a pointer to the broken-down time, or a NULL pointer if if + cannot be represented or stored. + The following conditions will be considered runtime constraint violations: + - timer or result being NULL. + In case of a constraint violation, the time will not be converted. + The currently active constraint violation handler function will be called + (see set_constraint_handler_s()). +*/ +_PDCLIB_PUBLIC struct tm * localtime_s( const time_t * _PDCLIB_restrict timer, struct tm * _PDCLIB_restrict result ); + +#endif + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_TIME_H +#include _PDCLIB_EXTEND_TIME_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/include/unistd.h b/RockOS/sysroot/usr/include/unistd.h new file mode 100644 index 0000000..35ce2bb --- /dev/null +++ b/RockOS/sysroot/usr/include/unistd.h @@ -0,0 +1,28 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +#include + +/* Standard file descriptors used by streams */ +#define STDIN_FILENO 0 /* Standard input */ +#define STDOUT_FILENO 1 /* Standard output */ +#define STDERR_FILENO 2 /* Standard error output */ + +/* Seek constants for lseek() / _PDCLIB_lseek() */ +#ifndef SEEK_SET +#define SEEK_SET 0 /* Seek from beginning of file */ +#define SEEK_CUR 1 /* Seek from current position */ +#define SEEK_END 2 /* Seek from end of file */ +#endif + +/* Null pointer declaration constant */ +#ifndef NULL +#define NULL ((void *)0) +#endif + +int open(const char *pathname, int flags, ...); +int read(int fd, void *buf, size_t count); +int close(int fd); + + +#endif /* _UNISTD_H */ \ No newline at end of file diff --git a/RockOS/sysroot/usr/include/wctype.h b/RockOS/sysroot/usr/include/wctype.h new file mode 100644 index 0000000..3776b7a --- /dev/null +++ b/RockOS/sysroot/usr/include/wctype.h @@ -0,0 +1,152 @@ +/* Wide character classification and mapping utilities + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef _PDCLIB_WCTYPE_H +#define _PDCLIB_WCTYPE_H _PDCLIB_WCTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "pdclib/_PDCLIB_internal.h" + +typedef _PDCLIB_wint_t wint_t; +typedef int wctrans_t; +typedef int wctype_t; + +#ifndef _PDCLIB_WEOF_DEFINED +#define _PDCLIB_WEOF_DEFINED _PDCLIB_WEOF_DEFINED +#define WEOF (wint_t)-1 +#endif + +/* Wide character classification functions */ + +/* Returns iswalpha( wc ) || iswdigit( wc ) */ +_PDCLIB_PUBLIC int iswalnum( wint_t wc ); + +/* Returns true for wide characters for which either isupper( wc ) or + islower( wc ) is true, as well as a set of locale-specific wide + characters which are neither control characters, digits, punctuation, + or whitespace. +*/ +_PDCLIB_PUBLIC int iswalpha( wint_t wc ); + +/* Returns true if the character iswspace() and used for separating words + within a line of text. In the "C" locale, only L' ' and L'\t' are + considered blanks. +*/ +_PDCLIB_PUBLIC int iswblank( wint_t wc ); + +/* Returns true if the wide character is a control character. */ +_PDCLIB_PUBLIC int iswcntrl( wint_t wc ); + +/* Returns true if the wide character is a decimal digit. Locale- + independent. */ +_PDCLIB_PUBLIC int iswdigit( wint_t wc ); + +/* Returns iswprint( wc ) && ! iswspace( wc ). + NOTE: This definition differs from that of isgraph() in , + which considers only ' ', not all isspace() characters. +*/ +_PDCLIB_PUBLIC int iswgraph( wint_t wc ); + +/* Returns true for lowerspace wide characters, as well as a set of + locale-specific wide characters which are neither control charcters, + digits, punctuation, or whitespace. +*/ +_PDCLIB_PUBLIC int iswlower( wint_t wc ); + +/* Returns true for every printing wide character. */ +_PDCLIB_PUBLIC int iswprint( wint_t wc ); + +/* Returns true for a locale-specific set of punctuation characters that + are neither whitespace nor alphanumeric. +*/ +_PDCLIB_PUBLIC int iswpunct( wint_t wc ); + +/* Returns true for a locale-specific set of whitespace characters that + are neither alphanumeric, graphic, or punctuation. +*/ +_PDCLIB_PUBLIC int iswspace( wint_t wc ); + +/* Returns true for upperspace wide characters, as well as a set of + locale-specific wide characters which are neither control charcters, + digits, punctuation, or whitespace. +*/ +_PDCLIB_PUBLIC int iswupper( wint_t wc ); + +/* Returns true if the wide character is a hexadecimal digit. Locale- + independent. */ +_PDCLIB_PUBLIC int iswxdigit( wint_t wc ); + +/* Extensible wide character classification functions */ + +/* Returns true if the wide character wc has the property described by + desc (which was retrieved by a previous call to wctype() without + changing the LC_CTYPE locale setting between the two calls). +*/ +_PDCLIB_PUBLIC int iswctype( wint_t wc, wctype_t desc ); + +/* Returns a description object for a named character property, to be + used as parameter to the iswctype() function. Supported property + names are: + "alnum" -- alphanumeric, as per iswalnum() + "alpha" -- alphabetic, as per iswalpha() + "blank" -- blank, as per iswblank() + "cntrl" -- control, as per iswcntrl() + "digit" -- decimal digit, as per iswdigit() + "graph" -- graphic, as per iswgraph() + "lower" -- lowercase, as per iswlower() + "print" -- printing, as per iswprint() + "punct" -- punctuation, as per iswprint() + "space" -- whitespace, as per iswspace() + "upper" -- uppercase, as per iswupper() + "xdigit" -- hexadecimal digit, as per iswxdigit() + For unsupported properties, the function returns zero. +*/ +_PDCLIB_PUBLIC wctype_t wctype( const char * property ); + +/* Wide character case mapping utilities */ + +/* Converts an uppercase letter to a corresponding lowercase letter. Input for + which no corresponding lowercase letter exists remains unchanged. +*/ +_PDCLIB_PUBLIC wint_t towlower( wint_t wc ); + +/* Converts a lowercase letter to a corresponding uppercase letter. Input for + which no corresponding uppercase letter exists remains unchanged. +*/ +_PDCLIB_PUBLIC wint_t towupper( wint_t wc ); + +/* Extensible wide character case mapping utilities */ + +/* Converts the wide character wc according to the transition described + by desc (which was retrieved by a previous call to wctrans() without + changing the LC_CTYPE locale setting between the two calls). +*/ +_PDCLIB_PUBLIC wint_t towctrans( wint_t wc, wctrans_t desc ); + +/* Returns a description object for a named character transformation, to + be used as parameter to the towctrans() function. Supported transformation + properties are: + "tolower" -- lowercase mapping, as per towlower() + "toupper" -- uppercase mapping, as per towupper() + For unsupported properties, the function returns zero. +*/ +_PDCLIB_PUBLIC wctrans_t wctrans( const char * property ); + +/* Extension hook for downstream projects that want to have non-standard + extensions to standard headers. +*/ +#ifdef _PDCLIB_EXTEND_WCTYPE_H +#include _PDCLIB_EXTEND_WCTYPE_H +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/RockOS/sysroot/usr/lib/rlibc.a b/RockOS/sysroot/usr/lib/rlibc.a new file mode 100644 index 0000000..f367739 Binary files /dev/null and b/RockOS/sysroot/usr/lib/rlibc.a differ