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
Quelques modifications nécessaires pour devenir une source véritablement alphanumérique uniquement.
PROGRAM-ID peut être supprimé. Vous obtenez un nom de programme généré (voir les messages).
WORKING-STORAGE peut être abandonné. Encore une fois, le compilateur gémit.
Étant donné que les deux lignes précédemment manquaient de points / points manquants, qui ne sont plus pertinents maintenant que les descriptions sont totalement manquantes, le nombre de messages d'erreur est le même qu'auparavant et n'affecte toujours pas le code généré pour le programme.
En remplaçant COMP-5 par COMP, les clauses VALUE ne sont plus autorisées, car COMP 9999 ne comporte que quatre chiffres décimaux, tandis que COMP-5 est un fichier binaire à deux octets avec toutes les valeurs de bits disponibles.
Les valeurs dans les MOVE sont les valeurs décimales qui donnent les valeurs binaires qui donnent les paires de caractères.
Même si les champs COMP comportent quatre chiffres et n'autorisent pas les clauses VALUE comportant plus de quatre chiffres, vous pouvez utiliser plus de chiffres dans le déplacement d'une valeur littérale sans troncature à ce stade ... ne me demandez pas pourquoi. L'option du compilateur DIAGTRUNC (que j'ai désactivée) produira des diagnostics d'avertissement pour ceux-ci.
L'option de compilation TRUNC (BIN) peut être utilisée pour traiter COMP comme COMP-5, mais les MOVE sont un autre moyen de le faire.
Comme il s'agit de COBOL, la sortie doit être en majuscule (un mensonge, mais juste pour le fun).
HELLO WORLD!
OK, cédé, produit maintenant:
Hello, World!
Qui, étant un nombre impair de caractères, a nécessité quelques modifications supplémentaires, car nous ne pouvons pas avoir de champs binaires avec un nombre impair avec ce compilateur. Regardez cette ligne de 13 X! Ce serait normalement écrit comme X (13), mais peut être comme je l'ai montré ...
Et ORTEXT est nécessaire (ou pas OR, de toute façon) comme nom car OR est un mot réservé au compilateur (cela signifie OU, bien sûr).
Il s’agit de valeurs EBCDIC et non ASCII, car il s’exécute sur une boîte compatible EBCDIC et Big Endian.
Oh, COBOL nécessite beaucoup de points / périodes. Je les ai laissés de côté (ils sont bannis) donc j'ai reçu beaucoup de messages de compilation. Je viens de dire au compilateur de générer le code de toute façon (aucun des messages ne concerne le code de l'objet).
Même sans DIAGTRUNC, les messages sont maintenant à 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".