diff options
Diffstat (limited to 'cobol.html.markdown')
| -rw-r--r-- | cobol.html.markdown | 182 | 
1 files changed, 182 insertions, 0 deletions
| diff --git a/cobol.html.markdown b/cobol.html.markdown new file mode 100644 index 00000000..b0ab5b6d --- /dev/null +++ b/cobol.html.markdown @@ -0,0 +1,182 @@ +--- +language: COBOL +contributors: +    - ["Hyphz", "http://github.com/hyphz/"] +filename: learn.COB +--- +COBOL is a business-oriented language revised multiple times since its original design in 1960. It is claimed to still be used in over 80% of  +organizations. + +``` +      *COBOL. Coding like it's 1985. +        +      *COBOL has significant differences between legacy (COBOL-85) +      *and modern (COBOL-2002 and COBOL-2014) versions. +      *Legacy versions require columns 1-6 to be blank (they are used  +      *to store the index number of the punched card..) +      *A * in column 7 means a comment. +      *In legacy COBOL, a comment can only be a full line. +      *Modern COBOL doesn't require fixed columns and uses *> for +      *a comment, which can appear in the middle of a line. +      *Legacy COBOL also imposes a limit on maximum line length. +      *Keywords have to be in capitals in legacy COBOL, +      *but are case insensitive in modern. +               +      *First, we must give our program ID. +      *Identification division can include other values too,  +      *but they are comments only. Program-id is mandatory. +       identification division. +       program-id. learn. + +      *Let's declare some variables. +       data division. +       working-storage section. + +      *Variables are specified by a "picture" - how they should be  +      *displayed, and variable type is inferred from this. +      *The "01" value is the level number which is used for building +      *data structures. +       01  myname picture xxxxxxxxxx.    *> A 10 character string. +       01  age picture 999.   *> A number up to 3 digits. +       01  valx picture 999.  *> Another number up to 3 digits. +       01  inyear picture s9(7). *> S makes number signed. +                                 *> Brackets indicate 6 repeats of 9, +                                 *> ie a 6 digit number (not an array). +        +      *Now let's write some code. +       procedure division. + +       main-procedure. +            *> COBOL is the language that uses DISPLAY instead of PRINT. +            *> Note: no full stops after commands. Only after the LAST +            *> command. +            display "Hello. What's your name?" + +            *> Let's input a string. +            *> If input too long, later characters are trimmed. +            accept myname +            display "Hello " myname    *> We can display several things. +            display "How old are you?" + +            *> Let's input a number. +            *> If input too long, EARLIER characters are trimmed. +            accept age + +            display age *> Left-padded to three chracaters with zeroes, +                        *> because of the defined PICTURE for age. +             +            *> We have two ways of doing a FOR loop. +            *> Old style way: doesn't give an index. +            perform age times +                display "*" with no advancing *> Ie, no newline at end +            end-perform. +            display "." *> Output buffer isn't flushed until newline. +             +            *> New style way: with an index. +            perform varying valx from 1 by 1 until valx > age  +                display valx "-" with no advancing  +            end-perform. +            display "." +             +            *> If tests are still good old if tests. +            if myname = "Bob" then   +                display "I don't like Bob." +            else  +                display "I don't know you."  +            end-if  +             +            *> There are two ways of doing subprograms and calling  +            *> them. +            *> The simplest way: a paragraph. +            perform subparagraph +             +            *> The complex way, with parameters and stuff. +            call "eratosthenes" using age returning valx  +             +            display "There were " valx " primes." +             +            stop run. + +       subparagraph. *> Marks the top of an internal subprogram. +           *> Shares variable score with its caller. +           accept inyear from day yyyyddd. +            +           *> We can do math step-by-step like this... +           divide 1000 into inyear.  +           subtract age from inyear. +            +           display "You were born in " inyear "." +            +           *> Or we can just use expressions. +           compute inyear = 1970 - inyear. +            +           *> Note: if inyear has gone negative, its negativity will +           *> not appear when printed, because we didn't include an  +           *> S (sign character) in the PICTURE. +           if inyear >= 0 then  +               display "When you were " inyear ", " with no advancing +           else +               display inyear " years before you were born, " with no +                 advancing +           end-if +                +           display "COBOL was the most popular language in the world."          +           . +            +            +       identification division. +       program-id. eratosthenes. + +       data division. +       working-storage section. +      *Declare an array.  +      *We can declare a variable to use as an index for it at the  +      *same time. +       01  sieve pic 9 occurs 999 times indexed by sa, sb. +       01  pstart pic 999. +       01  counter pic 999. +             +      *Our parameters have to be declared in the linkage section. +       linkage section. +       01  maxvalue picture 999. +        +      *"using" declares our actual parameter variables.  +      *"returning" declares the variable value returned at end. +       procedure division using maxvalue returning counter. +       main-procedure. +            +           display "Here are all the primes up to " maxvalue "." +            +           perform varying sa from 1 by 1 until sa > maxvalue +               move 1 to sieve (sa) +           end-perform  +                +           perform varying sa from 2 by 1 until sa > maxvalue +               if sieve(sa) = 1 then  +                   compute pstart = sa + sa +                   perform varying sb from pstart by sa until sb >  +                   maxvalue  +                       move 0 to sieve(sb) +                   end-perform +               end-if +           end-perform + +           initialise counter  *> To zero by default for a number. + +           perform varying sa from 2 by 1 until sa > maxvalue  +               if sieve(sa) = 1 THEN +                   display sa +                   add 1 to counter +               end-if  +           end-perform. +            +       end program eratosthenes.      +            +       end program learn. +        +``` + +##Ready For More? + +* [GnuCOBOL](https://sourceforge.net/projects/open-cobol/) + | 
