{"id":18854346,"url":"https://github.com/urbanjost/m_strings","last_synced_at":"2026-02-22T21:55:20.734Z","repository":{"id":117558337,"uuid":"228430285","full_name":"urbanjost/M_strings","owner":"urbanjost","description":"Fortran string manipulations","archived":false,"fork":false,"pushed_at":"2025-06-23T07:38:34.000Z","size":52139,"stargazers_count":24,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-08T12:47:02.334Z","etag":null,"topics":["fortran","fortran-package-manager","fpm","string-manipulation","strings"],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/urbanjost.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-12-16T16:38:36.000Z","updated_at":"2025-06-23T07:38:06.000Z","dependencies_parsed_at":"2024-05-12T16:30:10.277Z","dependency_job_id":"07a1b5d6-be45-4438-bcfe-73b06afef58b","html_url":"https://github.com/urbanjost/M_strings","commit_stats":{"total_commits":242,"total_committers":1,"mean_commits":242.0,"dds":0.0,"last_synced_commit":"9aafb763c373ce227771f83c683b86040a22bfa5"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/urbanjost/M_strings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanjost%2FM_strings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanjost%2FM_strings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanjost%2FM_strings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanjost%2FM_strings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/urbanjost","download_url":"https://codeload.github.com/urbanjost/M_strings/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/urbanjost%2FM_strings/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275076532,"owners_count":25401313,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fortran","fortran-package-manager","fpm","string-manipulation","strings"],"created_at":"2024-11-08T03:47:55.386Z","updated_at":"2026-02-13T13:47:53.215Z","avatar_url":"https://github.com/urbanjost.png","language":"Fortran","readme":"[![string](docs/images/strings_small.gif)](https://urbanjost.github.io/M_strings/fpm-ford/index.html)\n# [M_strings and associated files](https://urbanjost.github.io/M_strings/man3.html)\n\n## Name\n   M_strings and M_strings__oop - Fortran modules for processing strings\n\n## Description\nThe `M_strings`(3fm) module is a collection of Fortran procedures that\nsupplement the built-in intrinsic string routines.  Routines for parsing,\ntokenizing, changing case, substituting new strings for substrings,\nlocating strings with simple wildcard expressions, removing tabs and\nline terminators as well as other string manipulations are included.\n\n`M_strings_oop`(3fm) is a companion module that provides an OOP interface\nto the `M_strings` module.\n\nNote there are some procedures with overlapping function that were all\ninitially gathered here that have varying performance and robustness\nthat may be consolidated at some point.\n\n## Synopsis\n\n\u003ctable border=\"1\"\u003e\n\u003ctr\u003e \u003cth\u003egrouping\u003c/th\u003e \u003cth\u003epage\u003c/th\u003e \u003cth\u003edescription\u003c/th\u003e \u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#d4eec6;\"\u003eINTRO:OOPS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/M_strings__oop.3m_strings__oop.html\"\u003eM_strings__oop\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e OOP Fortran string module\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cdefe2;\"\u003eINTRO\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/M_strings.3m_strings.html\"\u003eM_strings\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e Fortran string module\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dddaeb;\"\u003eARRAY\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/bundle.3m_strings.html\"\u003ebundle\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return up to twenty strings of arbitrary length as an array (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dddaeb;\"\u003eARRAY\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/c2s.3m_strings.html\"\u003ec2s\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert C string pointer to Fortran character string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dddaeb;\"\u003eARRAY\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/s2c.3m_strings.html\"\u003es2c\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert character variable to array of characters with last element set to null (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dddaeb;\"\u003eARRAY\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/switch.3m_strings.html\"\u003eswitch\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e converts between CHARACTER scalar and array of single characters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f6f0c0;\"\u003eBASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/base.3m_strings.html\"\u003ebase\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert whole number string in base [2-36] to string in alternate base [2-36] (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f6f0c0;\"\u003eBASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/base2.3m_strings.html\"\u003ebase2\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert whole number to string in base 2 (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f6f0c0;\"\u003eBASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/codebase.3m_strings.html\"\u003ecodebase\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert whole number in base 10 to string in base [2-36] (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f6f0c0;\"\u003eBASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/decodebase.3m_strings.html\"\u003edecodebase\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert whole number string in base [2-36] to base 10 number (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#c3dced;\"\u003eCASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/lower.3m_strings.html\"\u003elower\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e changes a string to lowercase over specified range (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#c3dced;\"\u003eCASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/lower_quoted.3m_strings.html\"\u003elower_quoted\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e elemental function converts string to lowercase skipping strings quoted per Fortran syntax rules (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#c3dced;\"\u003eCASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/upper.3m_strings.html\"\u003eupper\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e changes a string to uppercase (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#c3dced;\"\u003eCASE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/upper_quoted.3m_strings.html\"\u003eupper_quoted\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e elemental function converts string to uppercase skipping strings quoted per Fortran syntax rules (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/ends_with.3m_strings.html\"\u003eends_with\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e test if string ends with specified suffix(es) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/fortran_name.3m_strings.html\"\u003efortran_name\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e test if string meets criteria for being a fortran name (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/glob.3m_strings.html\"\u003eglob\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e compare given string for match to a pattern which may contain globbing wildcard characters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isalnum.3m_strings.html\"\u003eisalnum\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e test membership in subsets of ASCII set (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isalpha.3m_strings.html\"\u003eisalpha\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a letter and .false. otherwise (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isascii.3m_strings.html\"\u003eisascii\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if the character is in the range char(0) to char(256) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isblank.3m_strings.html\"\u003eisblank\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a blank character (space or horizontal tab). (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/iscntrl.3m_strings.html\"\u003eiscntrl\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a delete character or ordinary control character (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isdigit.3m_strings.html\"\u003eisdigit\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a digit (0, 1, ..., 9) and .false. otherwise (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isgraph.3m_strings.html\"\u003eisgraph\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a printable character except a space is considered non-printable (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/islower.3m_strings.html\"\u003eislower\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a miniscule letter (a-z) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isprint.3m_strings.html\"\u003eisprint\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is an ASCII printable character (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/ispunct.3m_strings.html\"\u003eispunct\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a printable punctuation character (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isspace.3m_strings.html\"\u003eisspace\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a null, space, tab, carriage return, new line, vertical tab, or formfeed (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isupper.3m_strings.html\"\u003eisupper\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is an uppercase letter (A-Z) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isxdigit.3m_strings.html\"\u003eisxdigit\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns .true. if character is a hexadecimal digit (0-9, a-f, or A-F). (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e3f7d4;\"\u003eCOMPARE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/longest_common_substring.3m_strings.html\"\u003elongest_common_substring\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function that returns the longest common substring of two strings.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#d5c8c6;\"\u003eDESCRIBE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/describe.3m_strings.html\"\u003edescribe\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns a string describing the name of a single character (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#d5c8c6;\"\u003eDESCRIBE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/edit_distance.3m_strings.html\"\u003eedit_distance\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e returns a naive edit distance using the Levenshtein distance algorithm (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/change.3m_strings.html\"\u003echange\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e change old string to new string with a directive like a line editor (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/join.3m_strings.html\"\u003ejoin\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e append CHARACTER variable array into a single CHARACTER variable with specified separator (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/modif.3m_strings.html\"\u003emodif\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e emulate the MODIFY command from the line editor XEDIT (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/replace.3m_strings.html\"\u003ereplace\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function replaces one substring for another in string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/reverse.3m_strings.html\"\u003ereverse\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e Return a string reversed (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/squeeze.3m_strings.html\"\u003esqueeze\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e delete adjacent duplicate occurrences of a character from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/substitute.3m_strings.html\"\u003esubstitute\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e subroutine globally substitutes one substring for another in string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#f4c9df;\"\u003eEDITING\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/transliterate.3m_strings.html\"\u003etransliterate\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e replace characters from old set with new set (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e0c7f3;\"\u003eENCODE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/decode_base64.3m_strings.html\"\u003edecode_base64\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e decode data from base64 encoding as defined in RFC-4648 (LICENSE:MIT)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e0c7f3;\"\u003eENCODE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/encode_base64.3m_strings.html\"\u003eencode_base64\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e encode data using base64 encoding as defined in RFC-4648 (LICENSE:MIT)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e0c7f3;\"\u003eENCODE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/percent_decode.3m_strings.html\"\u003epercent_decode\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e percent-decode strings and character arrays (LICENSE:ISC)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e0c7f3;\"\u003eENCODE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/percent_encode.3m_strings.html\"\u003epercent_encode\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e percent-encode strings and character arrays (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e0c7f3;\"\u003eENCODE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/rotate13.3m_strings.html\"\u003erotate13\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e apply trivial ROT13 encryption to a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/cpad.3m_strings.html\"\u003ecpad\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert to a cropped string and then centers the string to specified length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/len_white.3m_strings.html\"\u003elen_white\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e get length of string trimmed of whitespace. (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/lenset.3m_strings.html\"\u003elenset\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return string trimmed or padded to specified length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/lpad.3m_strings.html\"\u003elpad\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert to a cropped string and then blank-pad on the left to requested length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/merge_str.3m_strings.html\"\u003emerge_str\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e pads strings to same length and then calls MERGE(3f) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/pad.3m_strings.html\"\u003epad\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return string padded to at least specified length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/rpad.3m_strings.html\"\u003erpad\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert to a string and pad on the right to requested length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/stretch.3m_strings.html\"\u003estretch\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return string padded to at least specified length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#cce5f6;\"\u003eLENGTH\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/zpad.3m_strings.html\"\u003ezpad\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e pad a string on the left with zeros to specified length (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e1fec7;\"\u003eNONALPHA\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/dilate.3m_strings.html\"\u003edilate\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function to expand tab characters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e1fec7;\"\u003eNONALPHA\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/expand.3m_strings.html\"\u003eexpand\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e expand C-like escape sequences (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e1fec7;\"\u003eNONALPHA\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/noesc.3m_strings.html\"\u003enoesc\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert non-printable characters to a space (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e1fec7;\"\u003eNONALPHA\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/notabs.3m_strings.html\"\u003enotabs\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e expand tab characters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e1fec7;\"\u003eNONALPHA\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/visible.3m_strings.html\"\u003evisible\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e expand a string to control and meta-control representations (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#feeeee;\"\u003eNUMERIC\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/listout.3m_strings.html\"\u003elistout\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e expand a list of numbers where negative numbers denote range ends (1 -10 means 1 thru 10) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dcc0c1;\"\u003eQUOTES\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/matching_delimiter.3m_strings.html\"\u003ematching_delimiter\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e find position of matching delimiter (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dcc0c1;\"\u003eQUOTES\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/quote.3m_strings.html\"\u003equote\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e add quotes to string as if written with list-directed output (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#dcc0c1;\"\u003eQUOTES\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/unquote.3m_strings.html\"\u003eunquote\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e remove quotes from string as if read with list-directed input (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/chomp.3m_strings.html\"\u003echomp\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e Tokenize a string, consuming it one token per call (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/delim.3m_strings.html\"\u003edelim\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e parse a string and store tokens into an array (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/find_field.3m_strings.html\"\u003efind_field\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e parse a string into tokens (LICENSE:MIT)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/paragraph.3m_strings.html\"\u003eparagraph\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e break a long line into a paragraph (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/sep.3m_strings.html\"\u003esep\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function to parse string into an array using specified delimiters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/slice.3m_strings.html\"\u003eslice\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e parse string into an array using specified delimiters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/split.3m_strings.html\"\u003esplit\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e parse string into an array using specified delimiters (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/split2020.3m_strings.html\"\u003esplit2020\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e parse a string into tokens using proposed f2023 method (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcc0eb;\"\u003eTOKENS\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/strtok.3m_strings.html\"\u003estrtok\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e Tokenize a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/atoi.3m_strings.html\"\u003eatoi\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function returns a 32-bit integer value from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/atol.3m_strings.html\"\u003eatol\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function returns a 64-bit integer value from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/aton.3m_strings.html\"\u003eaton\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function returns argument as a numeric value from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/dble.3m_strings.html\"\u003edble\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e overloads DBLE(3f) so it can handle character arguments (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/fmt.3m_strings.html\"\u003efmt\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e convert any intrinsic to a string using specified format (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/getvals.3m_strings.html\"\u003egetvals\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e read arbitrary number of REAL values from a character variable up to size of VALUES() array (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/int.3m_strings.html\"\u003eint\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e overloads INT(3f) so it can handle character arguments (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/isnumber.3m_strings.html\"\u003eisnumber\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e determine if a string represents a number (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/nint.3m_strings.html\"\u003enint\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e overloads NINT(3f) so it can handle character arguments (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/real.3m_strings.html\"\u003ereal\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e overloads REAL(3f) so it can handle character arguments (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/s2v.3m_strings.html\"\u003es2v\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e function returns doubleprecision numeric value from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/s2vs.3m_strings.html\"\u003es2vs\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e given a string representing numbers return a numeric array (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/str.3m_strings.html\"\u003estr\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e converts multiple values to a (CSV) string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/string_to_value.3m_strings.html\"\u003estring_to_value\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e subroutine returns numeric value from string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/string_to_values.3m_strings.html\"\u003estring_to_values\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e read a string representing numbers into a numeric array (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/v2s.3m_strings.html\"\u003ev2s\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return numeric string from a numeric value (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#fcfbdc;\"\u003eTYPE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/value_to_string.3m_strings.html\"\u003evalue_to_string\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e return numeric string from a numeric value (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/adjustc.3m_strings.html\"\u003eadjustc\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e center text (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/clip.3m_strings.html\"\u003eclip\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e trim leading and trailing blanks or set of characters from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/compact.3m_strings.html\"\u003ecompact\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e converts contiguous whitespace to a single character (or nothing) (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/crop.3m_strings.html\"\u003ecrop\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e trim leading and trailing blanks and control characters from a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/indent.3m_strings.html\"\u003eindent\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e count number of leading spaces in a string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd style=\"background:#e6d3f4;\"\u003eWHITESPACE\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://urbanjost.github.io/M_strings/nospace.3m_strings.html\"\u003enospace\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e remove all whitespace from input string (LICENSE:PD)\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n## Intrinsics\n\nThe M_strings(3fm) module supplements and works in combination with\nthe Fortran built-in intrinsics. Standard Fortran lets you access the\ncharacters in a string using ranges much like they are character arrays\nassignment, comparisons with standard operators, supports dynamically\nallocatable strings and supports concatenation using the // operator:\n\n     adjustl             Left adjust a string\n     adjustr             Right adjust a string\n     index               Position of a substring within a string\n     repeat              Repeated string concatenation\n     scan                Scan a string for the presence of a set of characters\n     trim                Remove trailing blank characters of a string\n     verify              Scan a string for the absence of a set of characters\n     len                 It returns the length of a character string\n     achar               converts an integer into a character\n     iachar              converts a character into an integer\n     len_trim            finds length of string with trailing spaces ignored\n     new_line            Newline character\n     selected_char_kind  Choose character kind\n     lge                 Lexical greater than or equal\n     lgt                 Lexical greater than\n     lle                 Lexical less than or equal\n     llt                 Lexical less than\n\n---\n![gmake](docs/images/gnu.gif)\n---\n\n## Download and Build with make(1)\nJust download the github repository, enter the src/ directory and run make:\n\n     git clone https://github.com/urbanjost/M_strings.git\n     cd M_strings/src\n     # change Makefile if not using one of the listed compilers\n\n     # for gfortran\n     make clean\n     make F90=gfortran gfortran\n\n     # for ifort\n     make clean\n     make F90=ifort ifort\n\n     # for nvfortran\n     make clean\n     make F90=nvfortran nvfortran\n\n     # optionally\n     make test # run the unit tests\n     make run  # run all the demo programs from the man-pages\n     make help # see other developer options\n\nThis will compile the M_strings(3f) module and optionally build all the\nexample programs from the document pages in the example/ sub-directory\nand run the unit tests.\n\n---\n![fpm](docs/images/fpm_logo.gif)\n---\n\n## Download and Build with fpm(1)\n\nAlternatively, download the github repository and build it with\nfpm ( as described at [Fortran Package Manager](https://github.com/fortran-lang/fpm) )\n\n```bash\n     git clone https://github.com/urbanjost/M_strings.git\n     cd M_strings\n     fpm build\n     fpm test  # run unit tests\n```\n\nor just list it as a dependency in your fpm.toml project file.\n\n```toml\n     [dependencies]\n     M_strings        = { git = \"https://github.com/urbanjost/M_strings.git\" ,tag=\"v1.0.1\"}\n```\n\nNote that M_strings.f90 is registered at the [fpm(1) registry](https://github.com/fortran-lang/fpm-registry)\n\n---\n![docs](docs/images/docs.gif)\n---\n\n## Documentation\n\n### User\n\n   There are descriptions of each procedures in the style of man-pages in three formats:\n\n - An [index](https://urbanjost.github.io/M_strings/man3.html) to the HTML versions\n   of the man-pages.\n\n - A single page (that uses javascript) combining all the HTML descriptions of the man-pages\n   for easy searching and printing:\n   [BOOK_M_strings](https://urbanjost.github.io/M_strings/BOOK_M_strings.html).\n\n - ![man-pages](docs/images/manpages.gif) man-page archives for installation on GNU/Linux, Unix and CygWin platforms:\n    + [manpages.zip](https://urbanjost.github.io/M_strings/manpages.zip)\n    + [manpages.tgz](https://urbanjost.github.io/M_strings/manpages.tgz)\n - [CHANGELOG](docs/CHANGELOG.md) provides a history of significant changes\n\n### Developer\n\n - The code was run through [ford(1)](https://politicalphysicist.github.io/ford-fortran-documentation.html)\n   to produce a [developers' document](https://urbanjost.github.io/M_strings/fpm-ford/index.html).\n - [github action status](docs/STATUS.md)\n\n---\n![demos](docs/images/demo.gif)\n---\n\n## Demo Programs\n\nEach man-page includes a working example program. These and additional\nexamples are included in the [example/](example/) directory.\n\n## See Also\n+ [M_match](https://github.com/urbanjost/M_match) Fortran module for Basic Regular Expressions (LICENSE:PD)\n+ [M_regex](https://github.com/urbanjost/M_regex) Fortran interface to POSIX 1003.2 regular expression library using ISO_C_BINDING.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbanjost%2Fm_strings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furbanjost%2Fm_strings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furbanjost%2Fm_strings/lists"}