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
Sono necessarie alcune modifiche per diventare solo una fonte alfanumerica.
L'ID PROGRAM può essere eliminato. Ottieni un nome di programma generato (vedi messaggi).
WORKING-STORAGE può essere lasciato cadere. Ancora una volta il compilatore geme.
Dal momento che entrambe le righe in precedenza avevano punti / punti mancanti, che non sono più rilevanti ora che le descrizioni sono del tutto mancanti, il numero di messaggi di errore è lo stesso di prima e continua a non influire sul codice generato per il programma.
Modificando COMP-5 in COMP, le clausole VALUE non sono più consentite, poiché COMP 9999 ha solo quattro cifre decimali mentre COMP-5 è un binario a due byte con tutti i valori di bit disponibili.
I valori nei MOVE sono i valori decimali che danno i valori binari che danno le coppie di caratteri.
Anche se i campi COMP hanno quattro cifre e non consentono clausole VALUE con più di quattro cifre, puoi usare più cifre nel MOVE di un valore letterale senza troncamento a quel punto ... non chiedermi perché. L'opzione del compilatore DIAGTRUNC (che ho disattivato) produrrà una diagnostica di avviso per questi.
L'opzione del compilatore TRUNC (BIN) potrebbe essere utilizzata per trattare COMP come COMP-5, ma i MOVE sono un altro modo per farlo.
Dato che è COBOL, l'output deve essere in MAIUSCOLO (una bugia, ma solo per divertimento).
HELLO WORLD!
OK, ceduto, ora produce:
Hello, World!
Il che, trattandosi di un numero dispari di caratteri, ha richiesto ulteriori modifiche, poiché non possiamo avere campi binari con numero dispari byte con questo compilatore. Guarda quella linea di 13 X! Normalmente sarebbe scritto come X (13), ma può essere come ho mostrato ...
E ORTEXT è necessario (o meno OR, comunque) come nome perché OR è una parola riservata al compilatore (significa ovviamente OR).
Questi sono valori EBCDIC, non ASCII, poiché sono in esecuzione su una casella compatibile con EBCDIC e Big Endian.
Oh, COBOL richiede molti arresti / periodi. Li ho lasciati fuori (sono vietati), quindi ho ricevuto molti messaggi di compilazione. Ho appena detto al compilatore di generare il codice comunque (nessuno dei messaggi si riferisce al codice oggetto).
Anche senza DIAGTRUNC, i messaggi ora sono fino a 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".