OpenEdge ABL

1 program Added 2026-02-07T12:00:00Z Agent: claude-codeModel: sonnetWebSearch: disabled Evidence Report issue View issues
Aliases: OpenEdge Advanced Business Language, Progress 4GL, Progress ABL
Provenance: commit 39dc602b74 · authored 2026-02-07T12:31:26+01:00 · agent claude-code · model sonnet

Sources mentioning this language

6 sources · pl_id: pl/openedge-abl
LLM (this repo) · 1LinguistPygmentsWikipediaHyperpolyglotWikidata · Q1963461

Wikipedia infobox

Pulled from the wikimedia/structured-wikipedia snapshot — see data/raw/wikipedia_pl_facts.*.jsonl and pl_fact.csv for the long-table provenance.

LicenseProprietary
Homepagehttps://www.progress.com/openedge

Extensions claimed by this language

5 claims. Each row is one upstream assertion with its strength. SWH column shows file occurrences with that extension across the entire archive.
ExtensionSourceStrengthSWH
.plinguistprimary5.0M files
.ppygmentsprimary5.0M files
.clslinguistsecondary2.6M files
.clspygmentssecondary2.6M files
.wlinguistsecondary188.1K files

Related languages

Progress ABL (0.89)ABAP (0.29)Progress 4GL (0.29)ADVPL (0.29)OPL (0.26)

LLM-contributed programs

Hello World with Loop

Provenance: commit 39dc602b74 · authored 2026-02-07T12:31:26+01:00 · agent claude-code · model sonnet · WebSearch disabled
code.p · added: 2026-02-07T12:00:00Z
/* Hello World with File Operations in OpenEdge ABL */
DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO.

/* Simple loop demonstrating ABL syntax */
DO iCounter = 1 TO 5:
    cMessage = "Hello, World! Iteration: " + STRING(iCounter).
    DISPLAY cMessage WITH FRAME frame-a.
END.

/* Display system information */
MESSAGE "OpenEdge ABL Version:" SKIP
        PROVERSION
        VIEW-AS ALERT-BOX INFORMATION.

Real programs from Software Heritage

1 sample mined from derived_datasets/<date>/contents/*.parquet, byte-verified against the SWH archive. Citation-grade qualified SWHIDs preserved.
nessus_translator.P · 2310 B · ext .p · seen 42× in SWH
via fallback
swh:1:cnt:8bd0acb72f6634648a52b82f1a345ca1ed7d9c77;origin=https://github.com/risksense/mulval;anchor=swh:1:rev:369f7484ea5263074f70464a7fada98b6e546df6;path=/src/adapter/nessus_translator.P
Open in SWH · Raw bytes (SWH) · GitHub raw
Show source

:- import member/2 from lists.
hasEffect(privEscalation).

vulExists(Host, CVE, Prog):- 
  vuln_exists(Host, CVE, Prog, _Range, _Losstype, _Severity, _AC ).

vulExists(Host, CVE, Prog):- 
  vuln_exists(Host, CVE, Prog, _Range, _Losstype, _Severity, _AC, Port, Prot ).

vulProperty(CVE, localExploit, Effect):- 
  vuln_exists(_Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC ),
  member(local,RangeList),
  lossTypetoEffect(Losstype, Effect).

vulProperty(CVE, remoteExploit, Effect, Port, Prot):- 
  vuln_exists(_Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC, Port, Prot ),
  member(remoteExploit,RangeList),
  not  member(user_action_req,RangeList),
  lossTypetoEffect(Losstype, Effect).

vulProperty(CVE, remoteExploit, Effect):- 
  vuln_exists(_Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC, _Port, _Prot ),
  member(remoteExploit,RangeList),
  not  member(user_action_req,RangeList),
  lossTypetoEffect(Losstype, Effect).


vulProperty(CVE, remoteClient, Effect):- 
  vuln_exists(_Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC ),
  member(remoteExploit,RangeList),
  member(user_action_req,RangeList),
  lossTypetoEffect(Losstype, Effect).


lossTypetoEffect(Losstype, Effect):-
            member('data_modification', Losstype),
            hasEffect(Effect).

lossTypetoEffect(Losstype, Effect):-
            member('data_loss', Losstype),
            hasEffect(Effect).

cvss(CVE, AC):-
	vuln_exists(Host, CVE, Prog, _RangeList, _Losstype, _Severity, AC ).

cvss(CVE, AC):-
        vuln_exists(_Host, CVE, _Prog, RangeList,Losstype, _Severity, AC, Port, Prot ).

networkServiceInfo(Host, Program, Prot, Port, someUser) :-
	vulExists(Host, CVE, Program),
        vulProperty(CVE, remoteExploit, _Effect, Port, Prot).

%hacl(Host, internet, Prot, Port) :-
 %       vuln_exists(Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC, Port, Prot ).

%hacl(internet, Host, Prot, Port) :-
 %      vuln_exists(Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC, Port, Prot ).

%this is not corrent, because it binds the CVE Port and Prot together which couldn't be true.
%hacl(Host, Host2, Prot, Port) :-
 %      vuln_exists(Host, CVE, _Prog, RangeList,Losstype, _Severity, _AC, Port, Prot ),
  %     vuln_exists(Host2, CVE, _Prog, RangeList,Losstype, _Severity, _AC, Port, Prot ).

Disambiguation rules

Linguist heuristic rules that predict this language when one of its claimed extensions is shared with another.
RuleExtKindPredicates (truncated)
h/linguist/.cls/4.clspredicates[{"kind": "any", "regexes": ["(?i)^\\s*(?:end\\s+(?:class|interface)\\.|(?:class|interface)\\s+[a-z_][a-z0-9_#$%&-]*:)"]}]
h/linguist/.w/0.wpredicates[{"kind": "any", "regexes": ["&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS"]}]
h/linguist/.p/1.ppredicates[{"kind": "any", "regexes": ["(?i)\\bDEFINE\\s+(?:VARIABLE|TEMP-TABLE|BUFFER|QUERY|INPUT\\s+PARAMETER|OUTPUT\\s+PARAMETER)\\b", "(?i)\\bEND(?:\\s+(?:PROCEDURE|FUNCTION|DO|FOR\\s+EACH))?\\."]}]

Contribute — propose a file extension

Tell us where to find evidence about OpenEdge ABL (mapped to pl/openedge-abl). A reference URL is required; at least one of extension or program code must be provided too. A maintainer reviews each submission via a draft PR before anything lands.
Optional: attach a program from that URL
If the reference URL points at a single source file you'd like to add as an example program, paste it below. The workflow will write it under languages/OpenEdge ABL/programs/<sha>/. Keep under ~200 lines.
(or open the pre-filled issue directly)
← opendoc-protocol openedge-advanced-business-language →