Quick viewing(Text Mode)

Cobol 1 Cobol

Cobol 1 Cobol

COBOL 1 COBOL

COBOL

Paradigm procedural, object-oriented

Appeared in 1959

Designed by , William Selden, Gertrude Tierney, Howard Bromberg, Howard Discount, Vernon Reeves, Jean . Sammet

Stable release COBOL 2002 (2002)

Typing discipline strong, static

Major OpenCOBOL, Micro Focus International

Dialects HP3000 COBOL/II, COBOL/2, IBM OS/VS COBOL, IBM COBOL/II, IBM COBOL SAA, IBM Enterprise COBOL, IBM COBOL/400, IBM ILE COBOL, COBOL X/Open, Micro Focus COBOL, COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, DOSVS COBOL, UNIVAC COBOL, Realia COBOL, Fujitsu COBOL, ICL COBOL, ACUCOBOL-GT, COBOL-IT, DEC COBOL-10, DEC VAX COBOL, Wang VS COBOL, Visual COBOL, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL (a COBOL74 variant for creating screens on text-based terminals)

Influenced by FLOW-MATIC, COMTRAN, FACT

Influenced PL/I, CobolScript, ABAP

COBOL at Wikibooks

COBOL (pronounced /ˈkoʊbɒl/) is one of the oldest programming . Its name is an acronym for COmmon Business-Oriented , defining its primary domain in business, finance, and administrative systems for companies and governments. The COBOL 2002 standard includes support for object-oriented programming and other modern language features.[1]

History and specification The COBOL specification was created by a committee of researchers from private industry, universities, and government during the second half of 1959. The specifications were to a great extent inspired by the FLOW-MATIC language invented by Grace Hopper - commonly referred to as "the mother of the COBOL language." The IBM COMTRAN language invented by Bob Bemer was also drawn upon, but the FACT language specification from was not distributed to committee members until late in the process and had relatively little impact. FLOW-MATIC' status as the only language of the bunch to have actually been implemented made it particularly attractive to the committee.[2] The scene was set on April 8, 1959 at a meeting of manufacturers, users, and university people at the University of Pennsylvania Center. The United States Department of Defense subsequently agreed to sponsor and oversee the next activities. A meeting chaired by Charles A. Phillips was held at the Pentagon on May 28 and 29 of 1959 (exactly one year after the Zürich ALGOL 58 meeting); there it was decided to set up three committees: short, intermediate and long range (the last one was never actually formed). It was the Short Range Committee, chaired by Joseph Wegstein of the US National Bureau of Standards, that during the following months created a description of the first version of COBOL.[3] The committee was formed to recommend a short range approach to a common business language. The committee was made up of members representing six computer COBOL 2

manufacturers and three government agencies. The six computer manufacturers were , IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, and Sylvania Electric Products. The three government agencies were the US Air Force, the David Taylor Model Basin, and the National Bureau of Standards (now National Institute of Standards and ). The intermediate-range committee was formed but never became operational. In the end a sub-committee of the Short Range Committee developed the specifications of the COBOL language. This sub-committee was made up of six individuals: • William Selden and Gertrude Tierney of IBM • Howard Bromberg and Howard Discount of RCA • Vernon Reeves and Jean E. Sammet of Sylvania Electric Products[4] The decision to use the name "COBOL" was made at a meeting of the committee held on 18 September 1959. The subcommittee completed the specifications for COBOL in December 1959. The first for COBOL were subsequently implemented during the year 1960 and on 6 and 7 December essentially the same COBOL program was run on two different makes of , an RCA computer and a Remington-Rand Univac computer, demonstrating that compatibility could be achieved.

ANS COBOL 1968 After 1959 COBOL underwent several modifications and improvements. In an attempt to overcome the problem of incompatibility between different versions of COBOL, the American National Standards Institute (ANSI) developed a standard of the language in 1968. This version was known as American National Standard (ANS) COBOL.

COBOL 1974 In 1974, ANSI published a revised version of (ANS) COBOL, containing a number of features that were not in the 1968 version.

COBOL 1985 In 1985, ANSI published still another revised version that had new features not in the 1974 standard, most notably structured language constructs (" terminators"), including END-IF, END-PERFORM, END-READ, etc.

COBOL 2002 and object-oriented COBOL The language continues to evolve today. In the early 1990s it was decided to add object-orientation in the next full revision of COBOL. The initial estimate was to have this revision completed by 1997 and an ISO CD (Committee Draft) was available by 1997. Some implementers (including Micro Focus, Fujitsu, Veryant, and IBM) introduced object-oriented based on the 1997 or other drafts of the full revision. The final approved ISO Standard (adopted as an ANSI standard by INCITS) was approved and made available in 2002. Like the ++ and programming languages, object-oriented COBOL compilers are available even as the language moves toward standardization. Fujitsu and Micro Focus currently support object-oriented COBOL compilers targeting the .NET framework.[5] The 2002 (4th revision) of COBOL included many other features beyond object-orientation. These included (but are not limited to): • National Language support (including but not limited to support) • Locale-based processing • User-defined functions • CALL (and ) (for compile-time parameter checking) • Pointers and syntax for getting and freeing storage • Calling conventions to and from non-COBOL languages such as C COBOL 3

• Support for within framework environments such as Microsoft's .NET and Java (including COBOL instantiated as Enterprise JavaBeans) • and Boolean support • “True” binary support (up until this enhancement, binary items were truncated based on the (base-10) specification within the ) • Floating-point support • Standard (or portable) arithmetic results • XML generation and

History of COBOL standards The specifications approved by the full Short Range Committee were approved by the Executive Committee on January 3, 1960, and sent to the government printing office, edited and printed these specifications as Cobol 60. The American National Standards Institute (ANSI) produced several revisions of the COBOL standard, including: • COBOL-68 • COBOL-74 • COBOL-85 • Intrinsic Functions Amendment - 1989 • Corrections Amendment - 1991 After the Amendments to the 1985 ANSI Standard (which were adopted by ISO), primary development and ownership was taken over by ISO. The following editions and TRs (Technical Reports) have been issued by ISO (and adopted as ANSI) Standards: • COBOL 2002 • Finalizer Technical Report - 2003 • Native XML syntax Technical Report - 2006 • Object Oriented Collection Class Libraries - pending final approval... From 2002, the ISO standard is also available to the public coded as ISO/IEC 1989. Work is progressing on the next full revision of the COBOL Standard. It is expected to be approved and available in the early 2010s. For information on this revision, to see the latest draft of this revision, or to see what other works is happening with the COBOL Standard, see the COBOL Standards [6].

Legacy COBOL programs are in use globally in governmental and military agencies and in commercial enterprises, and are running on operating systems such as IBM's z/OS, the POSIX families (Unix/ etc.), and Microsoft's Windows as well as ICL's VME and ' OS 2200. In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code in existence and with an estimated 5 billion lines of new code annually.[7] Near the end of the twentieth century the was the focus of significant COBOL programming effort, sometimes by the same who had designed the systems decades before. The particular level of effort required for COBOL code has been attributed both to the large amount of business-oriented COBOL, as COBOL is by design a business language and business applications use dates heavily, and to constructs of the COBOL language such as the PICTURE clause, which can be used to define fixed-length numeric fields, including two-digit fields for years. COBOL 4

References [1] Oliveira, Rui (2006). The Power of Cobol. City: BookSurge Publishing. ISBN 0620346523.

[2] Sammet, Jean (1978). " The Early History of COBOL (http:/ / portal. acm. org/ citation. cfm?id=1198367)". ACM SIGPLAN Notices (Association for Computing Machinery, Inc.) 13 (8): 121–161. [3] Garfunkel, Jerome (1987). The Cobol 85 Example Book. New York: Wiley. ISBN 0471804614. [4] Wexelblat, Richard (1981). History of Programming Languages. Boston: Academic Press. ISBN 0127450408.

[5] NetCOBOL for .NET supports COBOL migration and development in the .NET environment (http:/ / www. adtools. com/ products/

windows/ netcobol. )

[6] http:/ / www. cobolstandards. com

[7] "What Professionals think of the Future of COBOL?" (http:/ / www. cobolportal. com/ developer/ future. asp?bhcp=1). Micro Focus. . Retrieved 2010-05-05.

Features COBOL as defined in the original specification included a PICTURE clause for detailed field specification. It did not support local variables, recursion, dynamic memory allocation, or constructs. Support for some or all of these features has been added in later editions of the COBOL standard. COBOL has many reserved words (over 400), called keywords.

Self-modifying code The original COBOL specification supported self-modifying code via the infamous "ALTER X TO PROCEED TO Y" statement. X and Y are paragraph labels, and any "GOTO X" statements executed after such an ALTER statement have the meaning "GOTO Y" instead. Most compilers still support it, but it should not be used in new programs.

Syntactic features COBOL provides an update-in-place syntax, for example

ADD YEARS TO AGE

The equivalent in many procedural languages would be

age = age + years

This syntax is similar to the compound assignment operator later adopted by C:

age += years

The abbreviated conditional expression

IF SALARY > 9000 OR SUPERVISOR-SALARY OR = PREV-SALARY

is equivalent to

IF SALARY > 9000 OR SALARY > SUPERVISOR-SALARY OR SALARY = PREV-SALARY

COBOL provides "named conditions" (so-called 88-levels). These are declared as sub-items of another item (the conditional variable). The named condition can be used in an IF statement, and tests whether the conditional variable is equal to any of the values given in the named condition's VALUE clause. The SET statement can be used to a named condition TRUE (by assigning the first of its values to the conditional variable). COBOL allows to be up to 30 characters long. When COBOL was introduced, much shorter lengths (e.g., 6 characters for ) were prevalent. COBOL 5

The concept of copybooks was introduced by COBOL; these are chunks of code which can be inserted into a program's code. This is done with the COPY statement, which also allows parts of the copybook's code to be replaced with other code (using the REPLACING ... BY ... clause).

Data types Standard COBOL provides the following data types:

Data type Sample declaration Notes

Character PIC X(20) Alphanumeric and alphabetic-only PIC A(4)9(5)X(7) Single- character set (SBCS)

Edited character PIC X99BAXX Formatted and inserted characters

Numeric fixed-point PIC S999V99 Binary 16, 32, or 64 (2, 4, or 8 ) binary [USAGE] Signed or unsigned. Conforming compilers limit the maximum value of variables based COMPUTATIONAL on the picture clause and not the number of bits reserved for storage. or BINARY

Numeric fixed-point PIC S999V99 1 to 18 decimal digits (1 to 10 bytes) packed decimal PACKED-DECIMAL Signed or unsigned

Numeric fixed-point PIC S999V99 1 to 18 decimal digits (1 to 18 bytes) zoned decimal [USAGE DISPLAY] Signed or unsigned Leading or trailing sign, overpunch or separate

Numeric floating-point PIC S9V999ES99 Binary floating-point

Edited numeric PIC +Z,ZZ9.99 Formatted characters and digits PIC $***,**9.99CR

Group (record) 01 CUST-NAME. Aggregated elements 05 CUST-LAST PIC X(20). 05 CUST-FIRST PIC X(20).

Table (array) OCCURS 12 TIMES Fixed-size array, row-major order Up to 7 dimensions

Variable-length table OCCURS 0 to 12 TIMES Variable-sized array, row-major order DEPENDING ON Up to 7 dimensions CUST-COUNT

Renames (variant or 66 RAW-RECORD Character data overlaying other variables union data) RENAMES CUST-RECORD

Condition name 88 IS-RETIRED-AGE Boolean value VALUES 65 THRU 150 dependent upon another variable

Array index [USAGE] INDEX Array subscript

Most vendors provide additional types, such as: COBOL 6

Data type Sample declaration Notes

Numeric floating-point PIC S9V999ES99 Binary floating-point single precision [USAGE] COMPUTATIONAL-1 (IBM extension)

Numeric floating-point PIC S9V999ES99 Binary floating-point double precision [USAGE] COMPUTATIONAL-2 (IBM extension)

Numeric fixed-point PIC S9V999 same as PACKED DECIMAL packed decimal [USAGE] COMPUTATIONAL-3 (IBM extension)

Numeric fixed-point PIC S999V99 same as COMPUTATIONAL or BINARY binary [USAGE] COMPUTATIONAL-4 (IBM extension)

Numeric fixed-point PIC S999V99 Binary 16, 32, or 64 bits (2, 4, or 8 bytes) binary [USAGE] COMPUTATIONAL-5 Signed or unsigned. The maximum value of variables based on the number of bits (native binary) reserved for storage and not on the picture clause. (IBM extension)

Numeric fixed-point PIC S999V99 Binary 16, 32, or 64 bits (2, 4, or 8 bytes) binary [USAGE] COMPUTATIONAL-4 Signed or unsigned in native byte order

Numeric fixed-point PIC S999V99 Binary 16, 32, or 64 bits (2, 4, or 8 bytes) binary [USAGE] COMPUTATIONAL-5 Signed or unsigned in big-endian byte order

Wide character PIC G(20) Alphanumeric Double-byte character set (DBCS)

Edited wide character PIC G99BGGG Formatted and inserted wide characters

Edited floating-point PIC +9.9(6)E+99 Formatted characters and decimal digits

Data pointer [USAGE] POINTER Data

Code pointer [USAGE] Code memory address PROCEDURE-POINTER

Bit field PIC 1(n) [USAGE] n can be from 1 to 64, defining an n-bit integer COMPUTATIONAL-5 Signed or unsigned

Index [USAGE] INDEX Binary value corresponding to an occurrence of a table element May be linked to a specific table using INDEXED BY

Hello, world An example of the "Hello, world" program in COBOL:

IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. PROCEDURE DIVISION. DISPLAY 'Hello, world'. STOP RUN. COBOL 7

Criticism and defense

Lack of structurability In his letter to an editor in 1975 titled "How do we tell truths that might hurt?", which was critical of several programming languages contemporaneous with COBOL, computer scientist and recipient Edsger Dijkstra remarked that "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."[1] In his dissenting response to Dijkstra's article and the above "offensive statement", computer scientist Howard E. Tompkins defended structured COBOL: "COBOL programs with convoluted indeed tend to 'cripple the mind'", but this was because "there are too many such business application programs written by programmers that have never had the benefit of structured COBOL taught well...".[2] Additionally, the introduction of OO-COBOL has added support for object-oriented code as well as user-defined functions and user-defined data types to COBOL's repertoire.

Verbose syntax COBOL 85 was not fully compatible with earlier versions, resulting in the "cesarean birth of COBOL 85". Joseph . Brophy, CIO, Travelers Insurance, spearheaded an effort to users of COBOL of the heavy reprogramming costs of implementing the new standard. As a result the ANSI COBOL Committee received more than 3,200 letters from the public, mostly negative, requiring the committee to make changes. On the other hand, conversion to COBOL 85 was thought to increase productivity in future years, thus justifying the conversion costs.[3] COBOL syntax has often been criticized for its verbosity. However, proponents are quick to note that this was an intentional part of the language design and considered by many to be one of the COBOL's strengths. One of the design goals of COBOL was for COBOL code to be readable and understandable to non-programmers such as managers, supervisors and users. This is why COBOL has a very English-like syntax and structural elements—including: nouns, verbs, clauses, sentences, sections, and divisions. Consequently, COBOL is considered by at least one source to be "the most readable, understandable and self-documenting in use today. [...] Not only does this generally assist the maintenance process but the older a program gets the more valuable this readability becomes.".[4] On the other hand, the mere ability to read and understand a few lines of COBOL code does not grant to an executive or end user the experience and knowledge needed to design, build, and maintain large software systems.[5]

Other defenses Additionally, traditional COBOL is a simple language with a limited scope of function (with no pointers, no user-defined types, and no user-defined functions), encouraging a straightforward coding style. This has made it well-suited to its primary domain of business computing—where the program complexity lies in the business rules that need to be encoded rather than sophisticated or data . And because the standard does not belong to any particular vendor, programs written in COBOL are highly portable. The language can be used on a wide variety of hardware platforms and operating systems. And the rigid hierarchical restricts the definition of external to the Environment Division, which simplifies platform changes.[4] COBOL 8

References

[1] Dijkstra (2006). "E. W. Dijkstra Archive: How do we tell truths that might hurt? (EWD498)" (http:/ / www. cs. utexas. edu/ users/ EWD/

transcriptions/ EWD04xx/ EWD498. html). University of at Austin. . Retrieved August 29, 2007. [2] "In Defense of Teaching Structured COBOL as ", Howard E. Tompkins, ACM SIGPLAN Notices, Vol. 18, Issue 4, April 1983. [3] Garfunkel, Jerome (1987). The COBOL 85 example book. New York: Wiley. ISBN 0471804614.

[4] COBOL Tutorial - Introduction to COBOL (http:/ / www. csis. ul. ie/ / Course/ COBOLIntro. htm#part1) [5] Citation needed.

Sources • Ebbinkhuijsen, Wim .C., COBOL Alphen aan den Rijn/Diegem: Samson Bedrijfsinformatie bv, 1990. ISBN 90-14-04560-3. (Dutch)

External links Standards:

• COBOL Standard Committee (http:/ / www. cobolstandards. com) manuals:

• IBM Enterprise COBOL for z/OS V4R1 Bookshelf (http:/ / publibfp. boulder. . com/ cgi-bin/ bookmgr/

Shelves/ igy3sh40)

• IBM VS COBOL II V1R4.0 Bookshelf (http:/ / publibz. boulder. ibm. com/ cgi-bin/ bookmgr_OS390/ Shelves/ IGYSH007)

• IBM COBOL documentation (iSeries Information Center) (http:/ / publib. boulder. ibm. com/ iseries/ v5r2/

ic2924/ index. htm?info/ rzahgcobol. htm)

• IBM AIX information center (http:/ / publib. boulder. ibm. com/ infocenter/ comphelp/ v101v121/

index. jsp)

• IBM ILE COBOL 's Guide (http:/ / publib. boulder. ibm. com/ infocenter/ iseries/ v5r4/ topic/ books/

sc092540. )PDF (6.8 MB)

• IBM ILE COBOL Language Reference (http:/ / publib. boulder. ibm. com/ infocenter/ iseries/ v5r4/ topic/ books/

sc092539. pdf)PDF (7.0 MB)

• OpenCOBOL Programmer's Guide (http:/ / opencobol. add1tocobol. com/ OpenCOBOL Programmers Guide. pdf)PDF (3.3 MB) Compilers and other products:

• IBM COBOL compilers (http:/ / www-01. ibm. com/ software/ awdtools/ cobol/ )

• Veryant (http:/ / www. veryant. com), affordable COBOL maintenance and modernization platform]

• COBOL-IT (http:/ / www. cobol-it. com), The Enterprise-Class Open Source COBOL Compiler]

• OpenCOBOL (http:/ / www. opencobol. org), an open-source COBOL compiler.

• OpenCOBOL FAQ (http:/ / opencobol. add1tocobol. com), and collection of code samples.

• TinyCOBOL (http:/ / tiny-cobol. sourceforge. net/ ), an open-source COBOL compiler based on the COBOL 85 standards

• Redvers Consulting (http:/ / www. redversconsulting. com/ tools. ), free COBOL tools for application programmers Article Sources and Contributors 9 Article Sources and Contributors

COBOL Source: http://en.wikipedia.org/w/index.php?oldid=413497848 Contributors: -Barry-, 16@, A Monroe III, Accurizer, Ahoerstemeier, Ahy1, Ajsdecepida, Alansohn, Alexius08, Alexrakia, Alksentrs, Alyssa3467, Andre Engels, Andywebsdale, Angusus, AnnaFrance, Apollo2011, Aranel, ArielGold, Arthena, Arved, Ashley Pomeroy, Atlant, BBCWatcher, BTiffin, Balabiot, BarretBonden, Ben Tibbetts, Bluerasberry, Bobblewik, Bonadea, Brion VIBBER, BurntSky, Byrial, CJCurrie, CRGreathouse, Can't sleep, clown will eat me, CanadianLinuxUser, Canamcanam, Canamsoftware, Catstail, Cdc, Cedgin, Chameleon, Charlie Tango, ChongDae, Chris G, Chunawalla, Cistus, Classicfilms, Cleared as filed, ClemMcGann, Cobug, Collabi, Coneslayer, Conversion script, Cowlinator, Craig Schneiderwent, Cybercobra, Cybrspunk, DEddy, Damian Yerrick, Danakil, Daniel Staal, Dantheman531, DarthShrine, DaveMQuipoz, David Shay, Davidhorman, Dcoetzee, Dead3y3, Dick107, Dina, Dirk P Broer, Dmcomputerguy, Dmh, Dmsar, Doctorbunhead, Dogcow, Doug Alford, DragonflySixtyseven, Dysprosia, Dzubint, EJSawyer, ESkog, Edivorce, Edward, Ellmist, Emmo.Tevkliss, Enhandle, Enzo Aquarius, Erebus555, Evoluzion, Excirial, FCYTravis, Femto, Frap, Fubar Obfusco, Furrykef, Gabrielsroka, Gautam Viswanathan, Gazpacho, Gerbrant, Gerrit, Get It, Ghettoblaster, Gogo Dodo, Googolplexed, GraemeL, Graham87, Grayscale, Greg L, GwydionM, Hairy Dude, Haiviet, Heirpixel, Hephaestos, HiLo48, Hooperbloob, Howardpearce, Hu, I already forgot, I am not good at running, Iluvcapra, Imtiyaz quazi, Infocat12, Infrogmation, JMesserly, JTN, Jaavaaguru, Janoub, Jbolden1517, Jdcompguy, Jeeves, Jerome Cobol, Jesse Viviano, Joe12321, Joeinwap, Joncnunn, Josephbrophy, Jrsheehan, Julesd, Justfred, K5mwe, Kadin2048, Kajasudhakarababu, Kamasutra, Karl Dickman, KayaMF, Ke4roh, Kevin B12, Kevincar03, Kingk21, Kubanczyk, Kwamikagami, L.Willms, Labelreader, Leandrod, Leuko, Lfwlfw, Liberatus, Ligulem, Loadmaster, LorenzoB, Loudenvier, Ltruett, Lyverbe, MECU, Magnus Manske, Manop, Manor63, Mark Foskey, MarkMLl, Markthompson wi, Markus Kuhn, Martijn Hoekstra, MartinHarper, Massucco, Matt Britt, MauriceJFox3, Maximaximax, Maxl, Mcdogfood, Mernen, Metacarpus, Michael Devore, Michael Hardy, Miltonhowe, Minesweeper, Mirror Vax, Mk*, Mkjax, Mogakai, Mos43046721, MrOllie, Mushroom, Mwtoews, Mxn, Naddy, Ncmvocalist, Nixdorf, Nniol, NoaKor, Nohat, Offtherails, Ohnoitsjamie, Oleg Alexandrov, Onopearls, Orderud, Oxymoron83, PS., Pekoebrew, Phearson, Phil Sandifer, Piano non troppo, Pigsonthewing, Pithecanthropus, Pjvpjv, Plasticup, Plastikspork, Pne, Poli, Polluks, Poor Yorick, Pterre, R. S. Shaw, RHaworth, RTC, Rebecca, Redvers00, Reedy, Renku, Retired username, Rex the first, Rfc1394, Rich Farmbrough, Rjwilmsi, RobertMfromLI, RossPatterson, Ruud Koot, Sathiyamoorthysp, Seba5618, Sekelsenmat, Septimusx, Shadowth, Shlomif, Sietse Snel, Skaffman, Smdali, Smelialichu, Smjg, Soumyasch, Sporky023, Stevage, Subversive.sound, Suruena, Swac, T-bonham, Template initialisation script, Testing1234567891011, The Thing That Should Not Be, The morgawr, TheCatalyst31, Thivierr, Thumperward, Thv, Tide rolls, TimP, Timc, Tony Sidaway, Torc2, Trivialist, Twsx, Tzadikv, Ugha, UkPaolo, Umapathy, UnitedStatesian, Usien6, UtherSRG, VX, Validbanks 34, Vchimpanzee, Vereditorant, Wernher, Whiner01, Who, William Graham, Williamv1138, Wisgary, Wmklein2, Xsmdj, Zarkonnen, Zdeněk Zikán, Zundark, 521 anonymous edits Image Sources, Licenses and Contributors

File:Wikibooks-logo-en.svg Source: http://en.wikipedia.org/w/index.php?title=File:Wikibooks-logo-en.svg License: logo Contributors: User:Bastique, User:Ramac License

Creative Commons Attribution-Share Alike 3.0 Unported

http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/