https://github.com/szaghi/befor64
BeFoR64, Base64 encoding/decoding library for FoRtran poor men
https://github.com/szaghi/befor64
base64 decoding encoding fortran oop
Last synced: about 2 months ago
JSON representation
BeFoR64, Base64 encoding/decoding library for FoRtran poor men
- Host: GitHub
- URL: https://github.com/szaghi/befor64
- Owner: szaghi
- Created: 2015-01-27T17:07:55.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2022-10-12T16:50:14.000Z (over 3 years ago)
- Last Synced: 2024-06-21T18:01:58.775Z (almost 2 years ago)
- Topics: base64, decoding, encoding, fortran, oop
- Language: Fortran
- Size: 1.72 MB
- Stars: 19
- Watchers: 8
- Forks: 13
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.bsd-2.md
Awesome Lists containing this project
README
# BeFoR64
>#### Base64 encoding/decoding library for Fortran
> A KISS pure Fortran 2003+ library for encoding and decoding any intrinsic type โ integers, reals, characters, and unlimited polymorphic variables โ to and from Base64 strings.
[](https://github.com/szaghi/BeFoR64/tags)
[](https://github.com/szaghi/BeFoR64/issues)
[](https://github.com/szaghi/BeFoR64/actions/workflows/ci.yml)
[](https://github.com/szaghi/BeFoR64/actions/workflows/ci.yml)
| ๐ข **All intrinsic types**
Integers `I1P`โ`I8P`, reals `R4P`/`R8P`/opt. `R16P`, characters, unlimited polymorphic | ๐ **Scalars & arrays**
Scalar and rank-1 array support for all types | ๐ **Pack mixed data**
Heterogeneous arrays via `pack_data` | ๐ **Bidirectional**
Symmetric encode and decode |
|:---:|:---:|:---:|:---:|
| ๐ฏ **KISS API**
`b64_init`, `b64_encode`, `b64_decode` โ that's it | โก **Pure Fortran 2003+**
No C, no external deps; tested with gfortran & ifort | ๐ง **Two build systems**
fpm and FoBiS.py โ static, shared, and test modes | ๐ **Open & documented**
GPL v3 ยท BSD ยท MIT; full API reference & usage guide |
For full documentations (guide, tutorial, examples, etc...) see the [BeFoR64 website](https://szaghi.github.io/BeFoR64/).
---
## Authors
- Stefano Zaghi โ [@szaghi](https://github.com/szaghi)
Contributions are welcome โ see the [Contributing](/guide/contributing) page.
## Copyrights
This project is distributed under a multi-licensing system:
- **FOSS projects**: [GPL v3](http://www.gnu.org/licenses/gpl-3.0.html)
- **Closed source / commercial**: [BSD 2-Clause](http://opensource.org/licenses/BSD-2-Clause), [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause), or [MIT](http://opensource.org/licenses/MIT)
> Anyone interested in using, developing, or contributing to this project is welcome โ pick the license that best fits your needs.
---
## A taste of BeFoR64
```fortran
use befor64
call b64_init()
character(len=:), allocatable :: code
call b64_encode(n=1.0_R8P, code=code) ! encode a scalar real
call b64_encode(n=[1_I4P, 2_I4P], code=code) ! or an integer array
real(R8P) :: val
call b64_decode(code='AAAAAAAA8D8=', n=val) ! decode back
```
---
## Usage
BeFoR64 exposes four public procedures and one flag:
| Symbol | Description |
|--------|-------------|
| `b64_init` | Initialise the library โ call once before any encode/decode |
| `is_b64_initialized` | Logical flag, true after `b64_init` |
| `b64_encode` / `b64_encode_up` | Encode intrinsic or unlimited polymorphic variable to Base64 |
| `b64_decode` / `b64_decode_up` | Decode a Base64 string back to an intrinsic or polymorphic variable |
| `pack_data` | Pack two numeric arrays of different kinds into a byte stream for mixed-type encoding |
Encoded strings are returned as `character(len=:), allocatable` โ a Fortran 2003 feature required by the compiler.
```fortran
! heterogeneous data: pack first, then encode
real(R8P) :: a(12)
real(R4P) :: b(7)
integer(I1P), allocatable :: packed(:)
character(len=:), allocatable :: code
call pack_data(a1=a, a2=b, packed=packed)
call b64_encode(n=packed, code=code)
```
See the full [Usage guide](https://szaghi.github.io/BeFoR64/guide/usage) for all supported type combinations.
---
## Install
### FoBiS.py
**Standalone** โ clone, build, and install in one command:
```bash
FoBiS.py install szaghi/BeFoR64 -mode static-gnu
FoBiS.py install szaghi/BeFoR64 -mode static-gnu --prefix /path/to/prefix
```
**As a project dependency** โ declare BeFoR64 in your `fobos` and run `fetch`:
```ini
[dependencies]
deps_dir = src/third_party
PENF = https://github.com/szaghi/BeFoR64
```
```bash
FoBiS.py fetch # fetch and build
FoBiS.py fetch --update # re-fetch and rebuild
```
### fpm
Add to your `fpm.toml`:
```toml
[dependencies]
BeFoR64 = { git = "https://github.com/szaghi/BeFoR64" }
```
### CMake
```bash
cmake -B build && cmake --build build
```
### Makefile
```bash
make # static library
make TESTS=yes # build and run tests
```