From dc8d467398c4af1a2453a1dbb7d79b59ea350770 Mon Sep 17 00:00:00 2001
From: Paolo Fabio Zaino
Date: Sat, 18 Nov 2023 14:59:12 +0000
Subject: [PATCH] Initial commit
---
.gitattributes | 49 ++++
.github/ISSUE_TEMPLATE/bug.yaml | 116 ++++++++
.github/ISSUE_TEMPLATE/question.yaml | 36 +++
.github/ISSUE_TEMPLATE/requirement.yaml | 54 ++++
.github/ISSUE_TEMPLATE/tasks.yaml | 45 ++++
.github/PULL_REQUEST_TEMPLATE.md | 44 +++
.github/workflows/000-codeql.yaml | 81 ++++++
.github/workflows/001-flawfinder.yaml | 42 +++
.github/workflows/sync-from-template.yaml | 131 +++++++++
.github/workflows/tweet-pull-request.yaml | 55 ++++
.gitignore | 8 +
.rocog/scripts/ros2win | 52 ++++
.rocog/scripts/ux-src | 314 ++++++++++++++++++++++
.rocog/scripts/win2ros | 52 ++++
CODE_OF_CONDUCT.md | 118 ++++++++
CONTRIBUTING.md | 159 +++++++++++
doc/.gitkeep | 0
src/.gitkeep | 0
src/MkGCC.sh | 24 ++
tests/.gitkeep | 0
20 files changed, 1380 insertions(+)
create mode 100644 .gitattributes
create mode 100644 .github/ISSUE_TEMPLATE/bug.yaml
create mode 100644 .github/ISSUE_TEMPLATE/question.yaml
create mode 100644 .github/ISSUE_TEMPLATE/requirement.yaml
create mode 100644 .github/ISSUE_TEMPLATE/tasks.yaml
create mode 100644 .github/PULL_REQUEST_TEMPLATE.md
create mode 100644 .github/workflows/000-codeql.yaml
create mode 100644 .github/workflows/001-flawfinder.yaml
create mode 100644 .github/workflows/sync-from-template.yaml
create mode 100644 .github/workflows/tweet-pull-request.yaml
create mode 100644 .gitignore
create mode 100755 .rocog/scripts/ros2win
create mode 100755 .rocog/scripts/ux-src
create mode 100755 .rocog/scripts/win2ros
create mode 100644 CODE_OF_CONDUCT.md
create mode 100644 CONTRIBUTING.md
create mode 100644 doc/.gitkeep
create mode 100644 src/.gitkeep
create mode 100644 src/MkGCC.sh
create mode 100644 tests/.gitkeep
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..8a7cd70
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,49 @@
+# THIS IS ONLY FOR THE gitattributes REPOSITORY.
+# Handle line endings automatically for files detected as text
+# and leave all files detected as binary untouched.
+#* text=auto
+
+#
+# The above will handle all files NOT found below
+#
+# These files are text and should be normalized (Convert crlf => lf)
+*.gitattributes text linguist-language=gitattributes export-ignore
+.gitignore text export-ignore
+*.md text diff=markdown linguist-detectable
+*.txt text diff=text linguist-detectable
+
+# Language attributes for RISC OS files:
+*.pdf -text
+
+doc/** linguist-documentation
+
+*,102 text diff=perl linguist-language=perl
+*,a73 text diff=python linguist-language=python
+*,a74 text diff=python linguist-language=python
+*,a75 text diff=python linguist-language=python
+*,18c text diff=lua linguist-language=lua
+*,fe1 text diff=makefile linguist-language=makefile
+*,fff text diff=text linguist-language=text
+*,ffb text diff=bbcbasic linguist-language=bbcbasic
+*,fd1 text diff=bbcbasic linguist-language=bbcbasic
+
+src/**/c/* text diff=c linguist-language=c
+src/**/h/* text diff=c linguist-language=c
+src/**/c++/* text diff=cpp linguist-language=cpp
+src/**/cpp/* text diff=cpp linguist-language=cpp
+src/**/bas/* text diff=bbcbasic linguist-language=bbcbasic
+src/**/s/* text diff=armasm linguist-language=assembly
+src/**/Hdr/* text diff=armasm linguist-language=assembly
+src/**/fth/* text diff=forth linguist-language=forth
+src/**/p/* text diff=prolog linguist-language=prolog
+tests/**/c/* text diff=c linguist-language=c
+tests/**/h/* text diff=c linguist-language=c
+tests/**/c++/* text diff=cpp linguist-language=cpp
+tests/**/cpp/* text diff=cpp linguist-language=cpp
+tests/**/bas/* text diff=bbcbasic linguist-language=bbcbasic
+tests/**/Hdr/* text diff=armasm linguist-language=assembly
+tests/**/s/* text diff=armasm linguist-language=assembly
+tests/**/fth/* text diff=forth linguist-language=forth
+tests/**/p/* text diff=prolog linguist-language=prolog
+
+VersionNum linguist-language=c gitlab-language=c
diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml
new file mode 100644
index 0000000..04b4d59
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yaml
@@ -0,0 +1,116 @@
+name: Bug Report
+description: File a bug report
+title: "[Bug]: "
+labels: [bug, triage]
+assignees:
+ - dev-team
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this bug report!
+ - type: input
+ id: contact
+ attributes:
+ label: Contact Details (optional)
+ description: How can we get in touch with you if we need more info?
+ placeholder: ex. email@example.com
+ validations:
+ required: false
+ - type: input
+ id: prevalence
+ attributes:
+ label: Bug prevalence (optional)
+ description: "How often do you or others encounter this bug?"
+ placeholder: "Whenever I visit the user account page (1-2 times a week)"
+ validations:
+ required: false
+ - type: textarea
+ id: what-happened
+ attributes:
+ label: What happened?
+ description: Also tell us, what did you expect to happen?
+ placeholder: Tell us what you see!
+ value: "A bug happened!"
+ validations:
+ required: true
+ - type: textarea
+ id: repro
+ attributes:
+ label: Reproduction steps
+ description: "How do you trigger this bug? Please walk us through it step by step."
+ value: |
+ 1.
+ 2.
+ 3.
+ ...
+ render: bash
+ validations:
+ required: true
+ - type: input
+ id: version
+ attributes:
+ label: Version
+ description: Which release are you using?
+ placeholder: v1.0.0
+ value: "v1.0.0"
+ validations:
+ required: true
+ - type: dropdown
+ id: platform
+ attributes:
+ label: Platform
+ description: Which platform are you running RISC OS on?
+ options:
+ - Acorn A3000 (with ARM 3)
+ - Acorn A30x0 or A4000 series (with ARM250)
+ - Acorn A5000
+ - Acorn A7000/A7000+ or Castle A7000+
+ - Acorn Archimedes 3x0/4x0 series (with ARM 3)
+ - Acorn Archimedes 5x0 series
+ - Acorn RiscPC 600 (with ARM 610)
+ - Acorn RiscPC 700 (with ARM 710)
+ - Acorn RiscPC x00 with StrongARM
+ - Acorn RiscPC x00 with Kinetic or Castle RiscPC
+ - BeagleBoard
+ - BeagleBoard xM
+ - CJE RapidO Ig
+ - CJE RapidO Ti
+ - Elesar Titanium
+ - PandaBoard
+ - PandaBoard ES
+ - Raspberry Pi 0 all models
+ - Raspberry Pi 1 model A or B
+ - Raspberry Pi 2 all models
+ - Raspberry Pi 3B+
+ - Raspberry Pi 4 (Default)
+ - Raspberry Pi 400 (edge)
+ - RComp ARMBook or PineBook
+ - RComp ARMiniX
+ - RComp ARMX6
+ - RComp Forte
+ - RComp Mini.m
+ validations:
+ required: true
+ - type: input
+ id: riscosversion
+ attributes:
+ label: Which version of RISC OS are you using?
+ placeholder: v1.0.0
+ value: "v1.0.0"
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Can you copy and paste the list of loaded modules?
+ description: To obtain a list of loaded modules simply open a TaskWindow and type `*modules` and then `*rom.` and copy and paste here all the output
+ render: shell
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: By submitting this issue, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md)
+ options:
+ - label: I agree to follow this project's Code of Conduct
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/question.yaml b/.github/ISSUE_TEMPLATE/question.yaml
new file mode 100644
index 0000000..5293b88
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.yaml
@@ -0,0 +1,36 @@
+name: Question
+description: Ask us a question for this repository/project
+title: "[Question]: "
+labels: [question]
+assignees:
+ - code-reviews-team
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to ask us your question, we'll answer as soon as we have a chance.
+ - type: input
+ id: contact
+ attributes:
+ label: Contact Details (optional)
+ description: How can we get in touch with you if we need more info?
+ placeholder: ex. email@example.com
+ validations:
+ required: false
+ - type: textarea
+ id: question
+ attributes:
+ label: What would you like to ask?
+ description: type your question in the box below
+ placeholder: I would like to ask...
+ value: "I would like to ask..."
+ validations:
+ required: true
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: By submitting this issue, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md)
+ options:
+ - label: I agree to follow this project's Code of Conduct
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/requirement.yaml b/.github/ISSUE_TEMPLATE/requirement.yaml
new file mode 100644
index 0000000..ef4fb15
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/requirement.yaml
@@ -0,0 +1,54 @@
+name: Requirement Report
+description: File a requirement report
+title: "[Requirement]: "
+labels: [requirement, enhancement, feature]
+assignees:
+ - code-reviews-team
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this requirement report!
+ - type: input
+ id: contact
+ attributes:
+ label: Contact Details (optional)
+ description: How can we get in touch with you if we need more info?
+ placeholder: ex. email@example.com
+ validations:
+ required: false
+ - type: textarea
+ id: user
+ attributes:
+ label: As a RISC OS User I would like to
+ description: Tell us about your requirement from a general user point of view
+ placeholder: I would like that...
+ value: "a new feature would be added that does x and y"
+ validations:
+ required: false
+ - type: textarea
+ id: developer
+ attributes:
+ label: As a RISC OS Software Developer I would like to
+ description: Tell us about your requirement from a software developer point of view
+ placeholder: I would like that...
+ value: "a new feature would be added that does x and y"
+ validations:
+ required: false
+ - type: textarea
+ id: vendor
+ attributes:
+ label: As a RISC OS Vendor/Hardware designer I would like to
+ description: Tell us about your requirement from a vendor point of view
+ placeholder: I would like that...
+ value: "a new feature would be added that does x and y"
+ validations:
+ required: false
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: By submitting this issue, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md)
+ options:
+ - label: I agree to follow this project's Code of Conduct
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/tasks.yaml b/.github/ISSUE_TEMPLATE/tasks.yaml
new file mode 100644
index 0000000..745c191
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/tasks.yaml
@@ -0,0 +1,45 @@
+name: Tasks Report
+description: File a tasks report
+title: "[Tasks]: "
+labels: [enhancement]
+assignees:
+ - code-reviews-team
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this tasks report!
+ - type: input
+ id: contact
+ attributes:
+ label: Contact Details (optional)
+ description: How can we get in touch with you if we need more info?
+ placeholder: ex. email@example.com
+ validations:
+ required: false
+ - type: textarea
+ id: background
+ attributes:
+ label: Background
+ description: Provide some context for the tasks list
+ placeholder: Ipsum lorem...
+ value: "Ipsum lorem..."
+ validations:
+ required: true
+ - type: textarea
+ id: task-list
+ attributes:
+ label: Definition of Done
+ description: Provide an easy to understand definition of done for each task
+ placeholder: "- [ ] A"
+ value: "- [ ] Task A is done when..."
+ validations:
+ required: false
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: By submitting this issue, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md)
+ options:
+ - label: I agree to follow this project's Code of Conduct
+ required: true
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..5a22d12
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,44 @@
+
+
+This PR contains:
+- [ ] bugfix
+- [ ] feature
+- [ ] refactor
+- [ ] documentation
+- [ ] other
+
+Are tests included?
+- [ ] no
+- [ ] yes (*bugfixes and features will not be merged without tests*)
+
+Breaking Changes?
+- [ ] no
+- [ ] yes (*breaking changes will not be merged unless absolutely necessary – please provide motivation*)
+
+List any relevant issue numbers:
+
+### Description
+
+
diff --git a/.github/workflows/000-codeql.yaml b/.github/workflows/000-codeql.yaml
new file mode 100644
index 0000000..60fe190
--- /dev/null
+++ b/.github/workflows/000-codeql.yaml
@@ -0,0 +1,81 @@
+# This is a special version of codeql.yml modified to be able to
+# run code tests on a RISC OS source tree.
+#
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ "main", "develop" ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ "develop" ]
+ schedule:
+ - cron: '41 9 * * 1'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'cpp' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
+ # Use only 'java' to analyze code written in Java, Kotlin or both
+ # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ #- name: Autobuild
+ # uses: github/codeql-action/autobuild@v2
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
+
+ - name: Prepare RISC OS code and build it
+ run: |
+ bash ${GITHUB_WORKSPACE}/.rocog/scripts/ux-src gen github ${GITHUB_WORKSPACE}
+ echo "Run, Build Application using script"
+ ${GITHUB_WORKSPACE}/ux-src/MkGCC.sh ${GITHUB_WORKSPACE}/ux-src
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:${{matrix.language}}"
+
\ No newline at end of file
diff --git a/.github/workflows/001-flawfinder.yaml b/.github/workflows/001-flawfinder.yaml
new file mode 100644
index 0000000..0d8175e
--- /dev/null
+++ b/.github/workflows/001-flawfinder.yaml
@@ -0,0 +1,42 @@
+# This is a custom action for FlawFinder that is required when checking
+# RISC OS source trees. Don't use with non-RISC OS repositories!
+
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+name: flawfinder
+
+on:
+ push:
+ branches: [ "main", "develop" ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ "develop" ]
+ schedule:
+ - cron: '45 19 * * 1'
+
+jobs:
+ flawfinder:
+ name: Flawfinder
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Prepare RISC OS source tree
+ run: bash ${GITHUB_WORKSPACE}/.rocog/scripts/ux-src gen github ${GITHUB_WORKSPACE}
+
+ - name: flawfinder_scan
+ uses: david-a-wheeler/flawfinder@8e4a779ad59dbfaee5da586aa9210853b701959c
+ with:
+ arguments: '--sarif ./ux-src/'
+ output: 'flawfinder_results.sarif'
+
+ - name: Upload analysis results to GitHub Security tab
+ uses: github/codeql-action/upload-sarif@v2
\ No newline at end of file
diff --git a/.github/workflows/sync-from-template.yaml b/.github/workflows/sync-from-template.yaml
new file mode 100644
index 0000000..fe46ebe
--- /dev/null
+++ b/.github/workflows/sync-from-template.yaml
@@ -0,0 +1,131 @@
+---
+#
+# - Run this workflow to pull changes from the template repository.
+#
+# - Clone this repository. Check out a branch
+# - Copy files from the template onto this clone
+# - Push the branch to this repository
+# - Create a pull request in this repository
+#
+name: Sync changes from template
+
+# TODO:
+# - Switch to gh. Check https://github.com/cli/cli/issues/297 for updates
+
+on:
+ # Run at 0517 UTC each Friday
+ schedule:
+ - cron: "17 5 * * 5"
+
+ # Run when this file changes
+ push:
+ paths:
+ - .github/workflows/sync-from-template.yaml
+
+ # Run when manually triggered
+ workflow_dispatch:
+
+env:
+ MAIN_BRANCH: main
+ BASE_BRANCH: develop
+ HEAD_BRANCH: chore/sync-from-template
+ GIT_AUTHOR_NAME: ${{ github.repository_owner }}
+ GIT_AUTHOR_EMAIL: ${{ github.repository_owner }}@users.noreply.github.com
+ REPO_TEMPLATE: RISC-OS-Community/StandardRepoTemplate
+ THIS_REPO: ${{ github.repository }}
+
+jobs:
+ sync-from-template:
+ # Do not run on the template repository itself
+ if: github.repository != 'RISC-OS-Community/StandardRepoTemplate'
+ name: Sync changes from RISC-OS-Community/StandardRepoTemplate
+ runs-on: ubuntu-latest
+ continue-on-error: true
+
+ permissions:
+ actions: write
+ pull-requests: write
+ contents: write
+ repository-projects: write
+
+ steps:
+ # Clone the template repository
+ - name: Check out template repository
+ uses: actions/checkout@v2
+ with:
+ repository: ${{ env.REPO_TEMPLATE }}
+ token: ${{ github.token }}
+ path: ${{ env.REPO_TEMPLATE }}
+ ref: main
+
+ # Configure git globals
+ #- name: Configure git globals
+ # run: |
+ # git config --global init.defaultBranch ${MAIN_BRANCH}
+
+ # Clone the target repository. Check out a branch
+ - name: Check out ${{ github.repository }}
+ uses: actions/checkout@v2
+ with:
+ repository: ${{ github.repository }}
+ token: ${{ github.token }}
+ path: ${{ github.repository }}
+ ref: main
+ - name: Create branch in ${{ env.THIS_REPO }}
+ run: |
+ git -C "${THIS_REPO}" fetch origin "${HEAD_BRANCH}" || true
+ git -C "${THIS_REPO}" branch -a
+ git -C "${THIS_REPO}" checkout -B "${HEAD_BRANCH}" \
+ "remotes/origin/${HEAD_BRANCH}" || \
+ git -C "${THIS_REPO}" checkout -b "${HEAD_BRANCH}"
+
+ # Copy files from the template onto the target clone
+ - name: Copy template contents
+ run: |
+ _files="$(find ${REPO_TEMPLATE} \
+ ! -path "*/.git/*" \
+ ! -name ".gitignore" \
+ ! -path "*/.github/workflows/*" \
+ ! -name "README.md" \
+ -type f \
+ -print)"
+ for _file in ${_files}; do
+ _src="${_file}"
+ _dst="${THIS_REPO}/${_file#${REPO_TEMPLATE}/}"
+ # TODO: Find a more robust / elegant way to get this :point_down:
+ _dst="${_dst%/*}/"
+ mkdir -p "${_dst}"
+ echo "INFO: Copy '${_src}' to '${_dst}'."
+ cp "${_src}" "${_dst}"
+ done
+ git -C "${THIS_REPO}" diff
+
+ # Commit changes, if there are any
+ - name: Commit changes, if any
+ run: |
+ git -C ${THIS_REPO} config user.name "${GIT_AUTHOR_NAME}"
+ git -C ${THIS_REPO} config \
+ user.email "${GIT_AUTHOR_EMAIL}"
+ git -C ${THIS_REPO} add .
+ git -C ${THIS_REPO} commit \
+ -m "Sync from template@${{ github.sha }}"
+
+ # Push the branch to the target repository
+ - name: Push topic branch
+ run: git -C ${THIS_REPO} push -u origin "${HEAD_BRANCH}"
+
+ # Create a pull request in the target repository
+ - name: Create pull request
+ env:
+ GITHUB_TOKEN: ${{ github.token }}
+ GITHUB_USER: ${{ github.actor }}
+ run: |
+ pushd ${THIS_REPO}
+ hub pull-request \
+ -b "${BASE_BRANCH}" \
+ -h "${HEAD_BRANCH}" \
+ --no-edit \
+ -m "Pull updates from ${REPO_TEMPLATE}" \
+ -m "Pull updates from ${REPO_TEMPLATE}"
+ popd
+
diff --git a/.github/workflows/tweet-pull-request.yaml b/.github/workflows/tweet-pull-request.yaml
new file mode 100644
index 0000000..ed87c73
--- /dev/null
+++ b/.github/workflows/tweet-pull-request.yaml
@@ -0,0 +1,55 @@
+---
+# Tweet notifications
+
+name: Notify twitter of new Push to main branch
+
+on:
+
+ # Paolo's note: Run on Pull requests merged to main only.
+ # It's a weird syntax, but, because a Pull Request always
+ # generates a "push" event when it gets merged, and given
+ # that we do not commit directly to main, we can use the
+ # syntax below and it will result on creating a tweet on
+ # our twitter ONLY when a Pull Request from Develop branch
+ # gets merged into Main branch, which is what we want.
+ push:
+ branches:
+ - main
+
+ # Paolo's note: Run when manually triggered.
+ # Because there are situations when we may need to trigger
+ # it manually, I just added this option. Please do not abuse
+ # of it :)
+ workflow_dispatch:
+
+env:
+ THIS_REPO: ${{ github.repository }}
+
+jobs:
+# init:
+# runs-on: ubuntu-latest
+# steps:
+# - name: Set current date as env variable
+# run: echo "MSG_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
+
+ #debug:
+ # runs-on: ubuntu-latest
+ # steps:
+ # - name: Verify ENV variables
+ # run: |
+ # echo "Today: ${{ env.MSG_DATE }}, new merge in ${{ env.THIS_REPO }}! You can check it out here: https://github.com/${{ env.THIS_REPO }} #RISC_OS #RISCOS #ROCOnGitHub #OpenSource #DevCommunity"
+
+ tweet:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set current date as env variable
+ run: echo "MSG_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
+ - name: Send Tweet
+ uses: ethomson/send-tweet-action@v1
+ with:
+ status: "🎉 Today: ${{ env.MSG_DATE }}, new merge in ${{ env.THIS_REPO }}! ${{ github.event.pull_request.title }} You can check it out here: https://github.com/${{ env.THIS_REPO }} #RISC_OS #RISCOS #ROCOnGitHub #OpenSource #DevCommunity"
+ consumer-key: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
+ consumer-secret: ${{ secrets.TWITTER_CONSUMER_API_SECRET }}
+ access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }}
+ access-token-secret: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8cea25d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+.history/
+.vscode/
+*.swp
+*.swo
+*.orig
+.DS_Store
+ux-src/
+
diff --git a/.rocog/scripts/ros2win b/.rocog/scripts/ros2win
new file mode 100755
index 0000000..1bc4096
--- /dev/null
+++ b/.rocog/scripts/ros2win
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+###################
+# name: ros2win
+# description: Simple script to generate a MS Windows firendly source
+# file from a RISC OS source file.
+# author: Paolo Fabio Zaino
+# license: Copyright by Paolo Fabio Zaino, all rights reserved
+# distributed under CDDL v1.1
+#
+# Long description:
+# This script can be used to generate a MS Windows friendly source file
+# from a RISC OS source file, where the \n is enriched with \r.
+# This is useful when you want to use a Windows editor to edit
+# RISC OS source files.
+####################
+
+path1="$1"
+path2="$2"
+
+# Display command usage:
+function usage()
+{
+ echo "Usage: ros2win [path1] [path2]"
+ echo "path1: path to the file to convert"
+ echo "path2: path to the converted file"
+ echo "Example: ros2win ./src/!Mk/Makefile ./src/!Mk/Makefile"
+ echo ""
+ echo "If path2 is not specified then the converted file will be"
+ echo "saved in the same directory as path1 with the same name"
+}
+
+if [ "${path1}" == "" ]
+then
+ usage
+ exit 1
+fi
+
+if [ ! -f "${path1}" ]
+then
+ echo "Error: ${path1} is not a file"
+ exit 1
+fi
+
+if [ "${path2}" == "" ]
+then
+ path2="${path1}"
+fi
+
+awk 'sub("$", "\r")' ${path1} > ${path2}
+
+exit $?
diff --git a/.rocog/scripts/ux-src b/.rocog/scripts/ux-src
new file mode 100755
index 0000000..71ecbe4
--- /dev/null
+++ b/.rocog/scripts/ux-src
@@ -0,0 +1,314 @@
+#!/bin/bash
+
+###################
+# name: ux-src
+# description: SImple script to generate a UNIX-friendly structure from a RISC OS source tree
+# author: Paolo Fabio Zaino
+# license: Copyright by Paolo Fabio Zaino, all rights reserved
+# distributed under CDDL v1.1
+#
+# Long description:
+# This script is used to generate a temporary (and not pushable) ux-src directory
+# that will be used to reconfigure your source code in a way that is "usable" by
+# Linux/BSD based tools for code analysis, SAST etc.
+#
+# Usage:
+# To use this script it's easy:
+# ux-src gen
+# the above will create ux-src in your local directory and will link all your source files
+# ina UNIXy way.
+# To remove ux-src directory type:
+# ux-src clean
+# And, if the directory exists in your pwd then it will be removed.
+####################
+
+declare -r cmd="$1"
+declare -r env="$2"
+curr_dir="$3"
+if [ "${curr_dir}" == "" ]
+then
+ curr_dir="$(pwd)"
+ declare -r curr_path="$(pwd)/src"
+else
+ declare -r curr_path="${curr_dir}/src"
+fi
+
+# Debug mode:
+debug=0
+
+# Display command usage:
+function usage()
+{
+ echo "Usage: ux-src [gen|clean] [path]"
+ echo "gen: generate ux-src directory"
+ echo "clean: remove ux-src directory"
+}
+
+# Link files from directory f_dir to directory ux-src with extension f_ext:
+function link_files()
+{
+ local src_dir="$1"
+ local dst_dir="$2"
+ local f_dir="$3"
+ local f_ext="$4"
+ if [ -d ${src_dir}/${f_dir} ]
+ then
+ for f in ${src_dir}/${f_dir}/*
+ do
+ if [ ! -f ${f} ]
+ then
+ continue
+ else
+ local fname="$(basename ${f})"
+ if [ "${env}" == "github" ]
+ then
+ # GitHub Actions do not support symlinks:
+ cp ${f} ${dst_dir}/${fname}.${f_ext} > /dev/null 2>&1
+ else
+ ln -s ${f} ${dst_dir}/${fname}.${f_ext} > /dev/null 2>&1
+ fi
+ fi
+ done
+ fi
+}
+
+# Check path
+function check_path()
+{
+ local last_dir="$1"
+ if [ "${last_dir}" == "c" ] || [ "${last_dir}" == "C" ] || \
+ [ "${last_dir}" == "h" ] || [ "${last_dir}" == "H" ] || \
+ [ "${last_dir}" == "cpp" ] || [ "${last_dir}" == "CPP" ] || \
+ [ "${last_dir}" == "cxx" ] || [ "${last_dir}" == "CXX" ] || \
+ [ "${last_dir}" == "cc" ] || [ "${last_dir}" == "CC" ] || \
+ [ "${last_dir}" == "c++" ] || [ "${last_dir}" == "C++" ] || \
+ [ "${last_dir}" == "hpp" ] || [ "${last_dir}" == "HPP" ] || \
+ [ "${last_dir}" == "hxx" ] || [ "${last_dir}" == "HXX" ] || \
+ [ "${last_dir}" == "s" ] || [ "${last_dir}" == "S" ] || \
+ [ "${last_dir}" == "Hdr" ] || [ "${last_dir}" == "hdr" ] || \
+ [ "${last_dir}" == "fth" ] || [ "${last_dir}" == "FTH" ] || \
+ [ "${last_dir}" == "p" ] || [ "${last_dir}" == "P" ] || \
+ [ "${last_dir}" == "pl" ] || [ "${last_dir}" == "PL" ] || \
+ [ "${last_dir}" == "bas" ] || [ "${last_dir}" == "BAS" ];
+ then
+ return 1
+ else
+ return 0
+ fi
+}
+
+# check for files with the known directory structure and link them in
+# the ux-src directory with their appropriate extension:
+function find_files_and_link() {
+ local src_dir="$1"
+ local dst_dir="$2"
+
+ # Link C files (if any):
+ link_files "${src_dir}" "${dst_dir}" "c" "c"
+ link_files "${src_dir}" "${dst_dir}" "C" "c"
+
+ # Link C++ files (if any):
+ link_files "${src_dir}" "${dst_dir}" "cpp" "cpp"
+ link_files "${src_dir}" "${dst_dir}" "CPP" "cpp"
+ link_files "${src_dir}" "${dst_dir}" "cxx" "cxx"
+ link_files "${src_dir}" "${dst_dir}" "CXX" "cxx"
+ link_files "${src_dir}" "${dst_dir}" "cc" "cc"
+ link_files "${src_dir}" "${dst_dir}" "CC" "cc"
+ link_files "${src_dir}" "${dst_dir}" "c++" "cpp"
+ link_files "${src_dir}" "${dst_dir}" "C++" "cpp"
+
+ # Link C++ header files (if any):
+ link_files "${src_dir}" "${dst_dir}" "hpp" "hpp"
+ link_files "${src_dir}" "${dst_dir}" "HPP" "hpp"
+ link_files "${src_dir}" "${dst_dir}" "hxx" "hxx"
+ link_files "${src_dir}" "${dst_dir}" "HXX" "hxx"
+
+ # Link C header files (if any):
+ link_files "${src_dir}" "${dst_dir}" "h" "h"
+ link_files "${src_dir}" "${dst_dir}" "H" "h"
+
+ # Link Assembler files (if any):
+ link_files "${src_dir}" "${dst_dir}" "s" "s"
+ link_files "${src_dir}" "${dst_dir}" "S" "s"
+ link_files "${src_dir}" "${dst_dir}" "Hdr" "s"
+
+ # Link Forth files (if any):
+ link_files "${src_dir}" "${dst_dir}" "fth" "fth"
+ link_files "${src_dir}" "${dst_dir}" "FTH" "fth"
+
+ # Link Pascal and Prolog files (if any):
+ link_files "${src_dir}" "${dst_dir}" "p" "p"
+ link_files "${src_dir}" "${dst_dir}" "P" "p"
+
+ # Link Perl files (if any):
+ link_files "${src_dir}" "${dst_dir}" "pl" "pl"
+ link_files "${src_dir}" "${dst_dir}" "PL" "pl"
+
+ # Link BASIC files (if any):
+ link_files "${src_dir}" "${dst_dir}" "bas" "bas"
+ link_files "${src_dir}" "${dst_dir}" "BAS" "bas"
+
+ # Find and link local files
+ # (that may also be called Makefile.unix etc.):
+ local last_dir="$(basename ${src_dir})"
+ check_path "${last_dir}"
+ local rval=$?
+ if [ $rval -eq 0 ];
+ then
+ for f in ${src_dir}/*
+ do
+ local fname="$(basename ${f})"
+ # Remove ,fd7 etc. from the filename:
+ fname="$(echo ${fname} | sed 's/,.*//')"
+ local fext="$(echo ${fname} | sed 's/^.*\.//')"
+ # Skip files with extensions: .o, .a, .so
+ if [ "${fext}" == "o" ] || [ "${fext}" == "a" ] || [ "${fext}" == "so" ] || [[ "${fext}" =~ "so\..*" ]];
+ then
+ continue
+ fi
+ if [ -f ${f} ];
+ then
+ if [ "$env" == "github" ]
+ then
+ # GitHub Actions do not support symlinks:
+ cp ${f} ${dst_dir}/${fname}
+ else
+ ln -s ${f} ${dst_dir}/${fname}
+ fi
+ fi
+ done
+ fi
+
+}
+
+# recursively analyse subdirectories tree in ./src and generate all the correspondent directories in ./ux-src and exclude the typical c, h etc. RISC OS directories
+function gen_dirs()
+{
+ local dir_to_explore="${1:-$curr_dir/src}" # Use first argument as directory to explore, default to ${curr_dir}/src
+ for d in "${dir_to_explore}"/*
+ do
+ if [ ! -d "${d}" ]
+ then
+ local dname2="$(echo ${d} | sed 's/^.*\/src\///')"
+ find_files_and_link "${d}" "${curr_dir}/ux-src/${dname2}"
+ else
+ local dname="$(basename "${d}")"
+ check_path "${dname}"
+ local rval=$?
+ if [ $rval -eq 1 ];
+ then
+ local dname2="$(echo ${d} | sed 's/^.*\/src\///')"
+ find_files_and_link "${d}" "${curr_dir}/ux-src/${dname2}"
+ else
+ local dname2="$(echo ${d} | sed 's/^.*\/src\///')"
+ echo -n "Processing: ${dname2} ... "
+ local dname3="$(basename ${dname2})"
+ if [ "${dname3}" != "o" ];
+ then
+ # Skip the o directory (it's not required in the UX world)
+ # process everythign else:
+ if [ ! -d "${curr_dir}/ux-src/${dname2}" ]
+ then
+ mkdir -p "${curr_dir}/ux-src/${dname2}"
+ find_files_and_link "${d}" "${curr_dir}/ux-src/${dname2}"
+ fi
+ echo "ok"
+ # Recursive call to explore the sub-directory
+ gen_dirs "${d}"
+ else
+ echo "skipped"
+ fi
+ fi
+ fi
+ done
+}
+
+# Check command line syntax:
+function check_cmd()
+{
+ if [ "$cmd" != "gen" ] && [ "$cmd" != "clean" ]
+ then
+ usage
+ exit 1
+ fi
+}
+
+#################
+# Main program
+#################
+
+# Check commadn line syntax:
+check_cmd
+
+# Check if we are in a RISC OS source tree:
+if [ ! -d ${curr_dir}/src ]
+then
+ echo "Error: it appears you are not in a RISC OS Community source tree"
+ exit 1
+fi
+
+# Run the command:
+if [ "$cmd" == "gen" ]
+then
+ echo "Generating ux-src directory in ${curr_dir}"
+
+ # Generate ux-src:
+ mkdir -p ${curr_dir}/ux-src
+
+ # Generate all the directories in ux-src:
+ gen_dirs "${curr_path}"
+
+ # Link main Makefiles:
+ if [ -f ${curr_dir}/src/Makefile* ]
+ then
+ for f in ${curr_dir}/src/Makefile*
+ do
+ fname="$(basename ${f})"
+ if [ "$env" == "github" ]
+ then
+ # GitHub Actions do not support symlinks:
+ cp ${f} ${curr_dir}/ux-src/${fname}
+ else
+ ln -s ${f} ${curr_dir}/ux-src/${fname}
+ fi
+ done
+ fi
+
+ # Link the Build Script for Unix:
+ if [ -f ${curr_dir}/src/MkGCC.sh ]
+ then
+ if [ "$env" == "github" ]
+ then
+ # GitHub Actions do not support symlinks:
+ cp ${curr_dir}/src/MkGCC.sh ${curr_dir}/ux-src/MkGCC.sh
+ else
+ ln -s ${curr_dir}/src/MkGCC.sh ${curr_dir}/ux-src/MkGCC.sh
+ fi
+ fi
+
+ if [ "$debug" == "1" ]
+ then
+ ls -l ${curr_dir}/ux-src
+ fi
+else
+ # Remove existing ux-src
+ if [ -d ${curr_dir}/ux-src ]
+ then
+ for f in ${curr_dir}/ux-src/*
+ do
+ if [ "$env" == "github" ]
+ then
+ # GitHub Actions do not support symlinks:
+ rm -f ${f}
+ else
+ if [ ! -d ${f} ]
+ then
+ unlink ${f}
+ fi
+ fi
+ done
+ rm -rf ${curr_dir}/ux-src
+ fi
+fi
+
+exit $?
diff --git a/.rocog/scripts/win2ros b/.rocog/scripts/win2ros
new file mode 100755
index 0000000..6e549e2
--- /dev/null
+++ b/.rocog/scripts/win2ros
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+###################
+# name: win2ros
+# description: Simple script to generate a RISC OS firendly source
+# file from a Windows source file.
+# author: Paolo Fabio Zaino
+# license: Copyright by Paolo Fabio Zaino, all rights reserved
+# distributed under CDDL v1.1
+#
+# Long description:
+# This script can be used to generate a RISC OS friendly source file
+# from a Windows source file, where the \n\r is replaced with \n.
+# This is useful when you want to use a Windows editor to edit
+# RISC OS source files.
+####################
+
+path1="$1"
+path2="$2"
+
+# Display command usage:
+function usage()
+{
+ echo "Usage: win2ros [path1] [path2]"
+ echo "path1: path to the file to convert"
+ echo "path2: path to the converted file"
+ echo "Example: win2ros ./src/!Mk/Makefile ./src/!Mk/Makefile"
+ echo ""
+ echo "If path2 is not specified then the converted file will be"
+ echo "saved in the same directory as path1 with the same name"
+}
+
+if [ "${path1}" == "" ]
+then
+ usage
+ exit 1
+fi
+
+if [ ! -f "${path1}" ]
+then
+ echo "Error: ${path1} is not a file"
+ exit 1
+fi
+
+if [ "${path2}" == "" ]
+then
+ path2="${path1}"
+fi
+
+awk '{ sub("\r$", ""); print }' ${path1} > ${path2}
+
+exit $?
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..cd192b2
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,118 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge:
+
+- to put our best efforts into the analysis, specification, design, development, testing, maintenance and review of computer software that we create and store here to ensure the best possible quality submissions.
+
+- to respect international copyright laws, avoid plagiarism and credit others where required.
+
+- to make participation in our community a harassment-free experience for everyone, regardless of age, visible or invisible disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community through respectful communication and discussion to allow a supportive learning environment and to elevate the quality of our work.
+
+## Our Standards
+
+Examples of behaviour that contributes towards meeting our aims
+
+* Maintaining focus on the aims of each project
+* Testing, modelling and proving hypotheses with code examples
+* Checking and testing our work before submitting it
+* Offering constructive feedback or being open to constructive feedback on our code creations
+* Asking for help when needed
+* Responding to requests for help if we are able to
+* Sharing technical knowledge
+* Acknowledging and participating in community achievements
+
+Examples of behaviour that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behaviour include:
+
+* The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of acceptable behaviour and will take appropriate and fair corrective action in response to any behaviour that they deem inappropriate, threatening, offensive, or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, the community aims, and will communicate reasons for moderation decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported to the community leaders responsible for enforcement at riscos[@]zfpsystems.com.
+
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behaviour deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behaviour was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behaviour. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behaviour.
+
+**Consequence**: A temporary ban from any sort of on-line resources controlled by the RISC OS Community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behaviour, harassment of an individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of on-line resources controlled by the RISC OS Community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..6403951
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,159 @@
+# Contributing to RISC OS Community Projects and repositories
+This is a relatively short guide about how to contribute to the ROS Community projects.
+
+You can contribute by:
+1) Adding new projects and ideas
+2) Improving/fixing code in existing repositories
+3) Reviewing/Improving requirements and documentation
+4) Helping us with the graphics/sound that certain projects and repositories may require
+5) Helping us test the code on as many RISC OS platforms and OS versions as possible (within the supported range)
+6) Providing us constructive feedback on the work/projects/repositories/requirements/designs
+
+The following chapters will help those who are completely new to this process, introduce a common dictionary of technical terms to make sure we are all on the same page, and finally provide instructions on how to submit your contribution.
+
+Thanks for considering helping us and we hope you'll have fun!
+
+## Is this your first contribution?
+If this is your first contribution to an Open Source project then don't be afraid. Here there is a free course for you to follow that will give you a lot of useful information: [How to contribute to an Open Source project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github)
+
+## Submitting code
+To submit our changes we use Pull Requests (if you are used to GitLab you may know them as Merge Requests). Any code change should be submitted as a pull request, no other ways are allowed, sorry. Read below for the details and the guidelines.
+
+## Common dictionary
+Table of technical terms and meaning in this context:
+```
++------------------------------+------------------------------------------------+
+| Terms | Description |
++------------------------------+------------------------------------------------+
+| Divergent Development | Development that may end up generating two or |
+| | more projects as a split from an original one. |
+| | A typical example of this are Forks, they may |
+| | not converge back into the original project |
+| | and originate a new one or a split from the |
+| | original one. |
++------------------------------+------------------------------------------------+
+| Convergent Development | Development that is always going to converge |
+| | back into the original project. A good example |
+| | of this are Branches that are ALWAYS meant to |
+| | converge back to the original project. |
++------------------------------+------------------------------------------------+
+| Versioning System | Is a tool or a framework that allows a team of |
+| | developers to manage their shared source code |
+| | in both way Divergent and Convergent Dev. |
+| | Git is an example of this and github too. |
++------------------------------+------------------------------------------------+
+| Fork | In git a fork is a complete copy of an entire |
+| | repository which includes its history till |
+| | that moment a user forked the repo. |
+| | Forks are recommended when the new code may or |
+| | may NOT converge back to the original codebase |
++------------------------------+------------------------------------------------+
+| Branch | Branches are more like "construction zones" in |
+| | a codebase and so they are meant to rejoin the |
+| | original codebase when done. |
+| | Branches should be intended as a short living |
+| | entity use to work to improve/change a specific|
+| | feature in the original codebase. |
++------------------------------+------------------------------------------------+
+| diff | Its a tool or an automatic procedure meant to |
+| | detect all the changes between the codebase |
+| | and the fork or the branch we are comparing. |
++------------------------------+------------------------------------------------+
+```
+**Please note:**
+
+Forks are more expensive than branches as they create a full copy of a project and when merged back to the codebase git has to run a full diff of everything while a Branch git runs a diff only of the portion we have worked/modified. Forks also take up more space generally.
+
+## Pre-requisites (before you start)
+Please make sure you have a github account before you start. Also we recommend to add your RSA Public key to your github account. If you do not know how to do that please follow the instructions here:
+
+- [Create a github account](https://github.com/join)
+- [Add an RSA key to your github account](https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account)
+- [It's a good practice to protect your account by adding 2 factors authentication](https://docs.github.com/en/github/authenticating-to-github/configuring-two-factor-authentication)
+
+## How to join this community
+To provide fixes and improvement to code, you do not necessarily need to join, however if you want to help by reviewing code or other more involved tasks or just be part of one of the team to quickly pick an issue to work on, you'll need to join the community.
+
+To join, make sure you have your pre-requisites in place and then use the link [here](https://paolozaino.wordpress.com/contact/) to let us know you want to join.
+
+In the request specify your github account username and which teams you would like to join between:
+
+- Admin Team
+- Code Reviews Team
+- Dev Team
+- Docs Team
+- Graphics Design Team
+- Audio Design Team
+
+I you want, you can request to join multiple teams.
+
+## Contributing to this project/repository
+To contribute is fairly easy:
+
+Until a proper RISC OS git tool is being released, we encourage you to use for your "local git" either a Windows computer or a Linux computer or Virtual Machine.
+
+There are some very useful tips [here at the ROOL Forum](https://www.riscosopen.org/content/documents/git-cheatsheet)
+
+## Contributing General Guidelines
+In general you'd want to:
+* If you want to use Branching:
+ - Clone a repo from here to your local git using: `git clone repo-url`
+ - Get into the repo using: `cd repo-name`
+ - Create your branch using: `git branch -b branch-name`
+ - we suggest that you name your branches following this pattern: `your_nick-what_type_of_changes_you_are_applying` with no spaces, you can use either dash or underscore to your preference
+* If instead you want to use Forking:
+ - Fork a repo from here to your github account. If you're not familiar with forking then [here there are useful info for you](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo)
+* Start adding your changes
+ - If you need on-line RISC OS documentation you can find it [here](https://www.riscosopen.org/wiki/documentation/show/HomePage)
+ - Where applicable stick to RISC OS Style guide
+ - If you don't have the guide and would like to get your copy you can:
+ - find info/help [here](https://www.riscosopen.org/wiki/documentation/show/Style%20Guide)
+ - Or download a free PDF [here](https://www.riscosopen.org/zipfiles/platform/common/StyleGuide.3.pdf)
+ - Also please have a look at the Programming Conventions hosted on RISCOS.info, [click here to read them](http://www.riscos.info/index.php/Programming_Conventions)
+ - [Official Programmer Documentation from RISC OS Open](https://www.riscosopen.org/wiki/documentation/show/Programmer%20documentation)
+ - For changes that may require patching RISC OS Code or modifying RISC OS code in whatever form please also refer to the [Official Developer Documentation from RISC OS Open](https://www.riscosopen.org/wiki/documentation/show/Developer%20documentation)
+ - Make sure you keep the documentation and code comments up-to-date with your changes
+* When done with your changes add them to your local git using: `git add ./what-you-changed`
+* Commit your changes using: `git commit -m "commit message"`
+ - Make sure your commit messages are clear and meaningful to help reviewers to understand what you were trying to achieve
+ - When possible try to make small commits and Pull Requests so that the review process can be quicker
+* Push your local branch into github using: `git push -u origin your_nick-what_type_of_changes_you_are_applying`
+* Submit your branch for review when it is done, do this by making a Pull Request and requesting a review from the Code Reviews Team
+ - Make sure you've tested your changes before submitting a Pull Request
+
+# Coding Style for C Developers
+
+One of the best and most complete C Coding style guide is the Linux Kernel C Coding Style Guide. So, for all general C related coding you should follow such set of rules (learning it can also help you a lot in your Software Engineering career), here is the Linux Coding Style guide for you: [Linux Coding Style Guide](https://www.kernel.org/doc/html/v5.10/process/coding-style.html).
+
+If you are not an experienced C developer and need an easier to read coding manual before getting into the Linux coding style, we recommend to get copy of "The Elements Of C Programming Style" by Jay Ranade and Alan Nash, it's a very good introduction to good C coding style practices and goes from zero to competent C developer on the matter of coding style elements (it doesn't teach you C!).
+
+Given that RISC OS is not linux and has its own ToolBox you shall consider all colliding rules to be superseded by the corresponding rule in the RISC OS Style Guide, here is a link to how to obtain it: [RISC OS Style Guide](https://www.riscosopen.org/wiki/documentation/show/Style%20Guide)
+
+Also please have a look at the Programming Conventions hosted on RISCOS.info, [click here to read them](http://www.riscos.info/index.php/Programming_Conventions)
+
+ROOL DDE Compiler support C89 and C99 (and they started to add support for C11), so, if you need, [here](http://www.sourceformat.com/pdf/c-standard-international.pdf) you can find a good C99 standard guide (precisely the Committee Draft — May 6, 2005 ISO/IEC 9899:TC2) you can use as reference while coding.
+
+If instead you prefer to use GCC, RISC OS has native support for GCC 4 and the GCCSDK Project (building C code for RISC OS using GCC on Linux) support GCC 4, GCC 8 and they started to add GCC 10. You can find more info on about this on [RISCOS.info](https://www.riscos.info/index.php/Cross-compiling_software_with_GCCSDK)
+
+# Extra info for BBC BASIC developers
+
+ROOL has a fantastic repo with tools that can be used to make life easier for BBC BASIC developers when using git:
+
+[Tools to help using git with BBC BASIC](https://gitlab.riscosopen.org/Support/RepoTools)
+
+Also ROOL has a free BBC BASIC Reference Manual PDF updated and available [here](https://www.riscosopen.org/zipfiles/platform/common/BASICRefManual.3.pdf)
+
+# Extra info for everyone
+
+If you fear having to learn git or if you just want to help us with reviewing documentation etc. you can also use GitHub via the GitHub application, available for both the Apple iPad and iPhone and Android Tablets and Phones.
+The Android/Apple GitHub application makes it very easy to interact with us and provide your contribution without the need to learn git!
+Have a look in your device' on-line store for the GitHub application published by GitHub.
+
+# We now have a repo dedicated to Everything Coding on RISC OS
+
+The repo is maintained and updated to collect resources to help everyone (from absolute beginners till experienced developers) to learn and/or improve codign skills on RISC OS.
+
+You can find the repo [here](https://github.com/RISC-OS-Community/CodingOnRISC-OS)
+
+So no excuses! ;-)
+
diff --git a/doc/.gitkeep b/doc/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/MkGCC.sh b/src/MkGCC.sh
new file mode 100644
index 0000000..2d0c924
--- /dev/null
+++ b/src/MkGCC.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# This is a special file that will be used to control automated code
+# analysis tools such as SonarQube, Coverity, etc. on GitHub.
+# This file is not meant to be executed by humans, but by automated
+# tools.
+# If you want to build the project, please use the MkGCC (note no .sh)
+# script instead or MkDDE on RISC OS.
+
+# MAKE SURE this file is calling your MakefileGCC with the correct
+# target and make sure your MakefileGCC uses the variable OS to
+# determine the target OS.
+
+current_dir="$1"
+if [ "$current_dir" == "" ]; then
+ current_dir="$(pwd)"
+fi
+cd ${current_dir}
+
+# Display MakefielGCC
+cat ${current_dir}/MakeFileGCC
+
+# Make the artifacts
+make static OS=`uname -s` -f ${current_dir}/MakefileGCC
diff --git a/tests/.gitkeep b/tests/.gitkeep
new file mode 100644
index 0000000..e69de29