COBOL
ID DIVISION
DATA DIVISION
01 HELLOWORLDBINARY
05 HE COMP PIC 9999
05 LL COMP PIC 9999
05 OCOMMA COMP PIC 9999
05 SPACEW COMP PIC 9999
05 ORTEXT COMP PIC 9999
05 LD COMP PIC 9999
05 EXCLAMATION COMP PIC 9999
01 FILLER REDEFINES HELLOWORLDBINARY
05 HELLOWORLDTEXT PIC XXXXXXXXXXXXX
05 FILLER PIC X
PROCEDURE DIVISION
MOVE 51333 TO HE
MOVE 37779 TO LL
MOVE 38507 TO OCOMMA
MOVE 16614 TO SPACEW
MOVE 38553 TO ORTEXT
MOVE 37764 TO LD
MOVE 23104 TO EXCLAMATION
DISPLAY HELLOWORLDTEXT
GOBACK
Wymagało pewnych zmian, aby stać się prawdziwie alfanumerycznym źródłem.
ID programu można usunąć. Otrzymasz wygenerowaną nazwę programu (patrz komunikaty).
PRZECHOWYWANIE-PRZECHOWYWANIE można upuścić. Znów kompilator jęczy.
Ponieważ w obu tych liniach wcześniej brakowało kropek / kropek, które nie są już istotne, ponieważ opisy zostały całkowicie pominięte, liczba komunikatów o błędach jest taka sama jak poprzednio i nadal nie wpływa na generowany kod dla programu.
Przy zmianie COMP-5 na COMP klauzule WARTOŚĆ nie są już dozwolone, ponieważ COMP 9999 ma tylko cztery cyfry dziesiętne, podczas gdy COMP-5 jest dwubajtowym plikiem binarnym z wszystkimi dostępnymi wartościami bitowymi.
Wartości w MOVE są wartościami dziesiętnymi, które dają wartości binarne, które dają pary znaków.
Mimo że pola COMP mają cztery cyfry i nie pozwalają na klauzule VALUE zawierające więcej niż cztery cyfry, możesz użyć więcej cyfr w MOVE o wartości dosłownej bez obcięcia w tym momencie ... nie pytaj mnie dlaczego. Opcja kompilatora DIAGTRUNC (którą wyłączyłem) wygeneruje dla nich diagnostykę ostrzegawczą.
Opcja kompilatora TRUNC (BIN) może być używana do traktowania COMP jako COMP-5, ale MOVE są innym sposobem na zrobienie tego.
Ponieważ jest to COBOL, wyjście musi być w DUŻYM PRZYPADKU (kłamstwo, ale dla zabawy).
HELLO WORLD!
OK, ustąpił, teraz produkuje:
Hello, World!
Które, ponieważ jest nieparzystą liczbą znaków, wymagało pewnych dalszych zmian, ponieważ w tym kompilatorze nie możemy mieć pól binarnych o nieparzystej liczbie bajtów. Spójrz na tę linię 13 Xs! Zwykle byłby zapisany jako X (13), ale może być tak, jak pokazałem ...
A ORTEXT jest potrzebny (lub nie OR, w każdym razie) jako nazwa, ponieważ OR jest słowem zastrzeżonym dla kompilatora (to znaczy OR, oczywiście).
Są to wartości EBCDIC, a nie ASCII, ponieważ działa on na pudełku obsługującym EBCDIC i Big Endian.
Och, COBOL wymaga wielu kropek / kropek. Zostawiłem je (są zbanowane), więc otrzymałem wiele kompilowanych wiadomości. Po prostu powiedział kompilatorowi, żeby wygenerował kod (żaden z komunikatów nie dotyczy kodu obiektowego).
Nawet bez DIAGTRUNC wiadomości mają teraz maksymalnie 17 ...
1 IGYDS1003-E A "PROGRAM-ID" paragraph was not found.
Program-name "CBLNAM01" was assumed.
2 IGYDS1082-E A period was required. A period was assumed
before "DATA".
3 IGYDS1082-E A period was required. A period was assumed
before "01".
Same message on line: 11
3 IGYDS1040-E A data item was found in the "DATA DIVISION"
before a section header was encountered.
"WORKING-STORAGE SECTION" was assumed.
4 IGYDS1082-E A period was required. A period was assumed
before "05".
Same message on line: 5 6 7 8
9 10 12 13
14 IGYDS1082-E A period was required. A period was assumed
before "PROCEDURE".
15 IGYPS2145-E A period was required. A period was assumed
before "MOVE".
23 IGYSC1082-E A period was required. A period was assumed
before "END OF PROGRAM".