Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/interkosmos/fortran-zlib
Fortran 2018 interface bindings to zlib
https://github.com/interkosmos/fortran-zlib
fortran fortran-2018 fortran-package-manager zlib
Last synced: about 7 hours ago
JSON representation
Fortran 2018 interface bindings to zlib
- Host: GitHub
- URL: https://github.com/interkosmos/fortran-zlib
- Owner: interkosmos
- License: isc
- Created: 2022-05-20T19:26:39.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-03-03T13:35:22.000Z (8 months ago)
- Last Synced: 2024-03-03T14:38:24.667Z (8 months ago)
- Topics: fortran, fortran-2018, fortran-package-manager, zlib
- Language: Fortran
- Homepage:
- Size: 16.6 KB
- Stars: 8
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# fortran-zlib
A collection of Fortran 2018 interface bindings to selected zlib functions. The
library is also available on [MacPorts](https://ports.macports.org/port/fortran-zlib/).## Build Instructions
Build and install the library with the provided Makefile:
```
$ make
$ make install PREFIX=/opt
```Link your program against `/opt/lib/libfortran-zlib.a -lz`. Optionally,
overwrite the default compiler:```
$ make FC=ifx
```Or, use the [Fortran Package Manager](https://github.com/fortran-lang/fpm):
```
$ fpm build --profile release
```Build and run the test program:
```
$ make test
$ ./test_zlib
```## Example
The following basic example compresses and uncompresses an input string.
```fortran
! example.f90
program main
use :: zlib
implicit none (type, external)character(len=:), allocatable :: str_in, str_out, str_x
integer(kind=z_ulong) :: len_in, len_out, len_x
integer :: rc! Input.
str_in = repeat('Fortran ', 10)
len_in = len(str_in, kind=z_ulong)! Compress.
len_x = compress_bound(len_in)
allocate (character(len=len_x) :: str_x)
rc = compress(str_x, len_x, str_in, len_in)
if (rc /= Z_OK) stop 'Error: compress() failed'! Uncompress.
len_out = len_in
allocate (character(len=len_out) :: str_out)
rc = uncompress(str_out, len_out, str_x, len_x)
if (rc /= Z_OK) stop 'Error: uncompress() failed'
end program main
```If the library is installed to `/opt`, then compile, link, and run the example
program with:```
$ gfortran -I/opt/include/libfortran-zlib -o example example.f90 /opt/lib/libfortran-zlib.a -lz
$ ./example
```## Coverage
| C function | Fortran interface |
|-----------------|-------------------|
| `adler32` | `adler32` |
| `adler32_z` | `adler32_z` |
| `compress` | `compress` |
| `compress2` | `compress2` |
| `compressBound` | `compress_bound` |
| `crc32` | `crc32` |
| `crc32_z` | `crc32_z` |
| `deflate` | `deflate` |
| `deflateEnd` | `deflate_end` |
| `deflateInit` | `deflate_init` |
| `deflateInit2` | `deflate_init2` |
| `inflate` | `inflate` |
| `inflateEnd` | `inflate_end` |
| `inflateInit` | `inflate_init` |
| `inflateInit2` | `inflate_init2` |
| `uncompress` | `uncompress` |
| `uncompress2` | `uncompress2` |## Fortran Package Manager
You can add *fortran-zlib* as an *fpm* dependency:
```toml
[dependencies]
fortran-zlib = { git = "https://github.com/interkosmos/fortran-zlib.git" }
```## Licence
ISC