-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathkrnlsupa.cbl
More file actions
88 lines (88 loc) · 3.38 KB
/
Copy pathkrnlsupa.cbl
File metadata and controls
88 lines (88 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
******************************************************************
* KRNLSUPA - Kernel support code
******************************************************************
******************************************************************
* HTOPRINT - Hexadecimal character to printable character
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. HTOPRINT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RESIDUE PIC 9(8).
01 WS-DIVRES PIC 9(8).
01 I PIC S9(8) COMP.
01 J PIC S9(8) COMP.
01 WS-HEXCHMAP PIC X(16) VALUE "0123456789ABCDEF".
01 WS-CHAR PIC X.
01 WS-INSTR PIC X(8).
01 WS-OUTSTR PIC X(16).
PROCEDURE DIVISION.
HEX-TO-PRINTABLE.
MOVE SPACES TO WS-OUTSTR.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > LENGTH OF WS-INSTR
* Reminder: Every byte is equal to 2 characters as each character
* is representative of a nibble, and a byte is two nibbles
COMPUTE J = (I * 2) - 1 END-COMPUTE
* Calculate low nibble first
MOVE WS-INSTR(I:1) TO WS-CHAR
PERFORM HCHAR-TO-PRINTABLE
MOVE WS-CHAR TO WS-OUTSTR(J:1)
* Then calculate the high nibble
MOVE WS-INSTR(I:1) TO WS-CHAR
DIVIDE WS-CHAR BY 16 GIVING WS-DIVRES REMAINDER
WS-RESIDUE END-DIVIDE
MOVE WS-DIVRES TO WS-CHAR
PERFORM HCHAR-TO-PRINTABLE
ADD 1 TO J END-ADD
MOVE WS-CHAR TO WS-OUTSTR(J:1)
END-PERFORM.
GOBACK.
HCHAR-TO-PRINTABLE.
* Convert WS-CHAR to a printable character
DIVIDE WS-CHAR BY 16 GIVING WS-DIVRES REMAINDER WS-RESIDUE
END-DIVIDE.
ADD 1 TO WS-RESIDUE END-ADD.
MOVE WS-HEXCHMAP(WS-RESIDUE:1) TO WS-CHAR.
END PROGRAM HTOPRINT.
******************************************************************
* SUBITAND - Obtain bitwise AND of two numbers
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBITAND.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC S9(8) COMP.
01 WS-MULBY PIC 9(8).
01 WS-MULRES PIC 9(8).
01 WS-TMP PIC 9(8).
01 WS-TMP2 PIC 9(8).
LINKAGE SECTION.
01 L-ARGS.
05 L-AND1 PIC 9(8).
05 L-ANDBY PIC 9(8).
05 L-ANDRES PIC 9(8).
PROCEDURE DIVISION.
* Perform a bitwise AND operation
* given L-AND1 and L-ANDBY perform (L-AND1 & L-ANDBY)
* to give L-ANDRES
BITWISE-AND.
MOVE 0 TO L-ANDRES.
MOVE 1 TO I.
PERFORM UNTIL L-AND1 = 0 OR L-ANDBY = 0
DIVIDE L-AND1 BY 2 GIVING L-AND1 REMAINDER WS-TMP
END-DIVIDE
DIVIDE L-ANDBY BY 2 GIVING L-ANDBY REMAINDER WS-TMP2
END-DIVIDE
IF WS-TMP = 1 AND WS-TMP2 = 1
ADD I TO L-ANDRES END-ADD
END-IF
MOVE 2 TO WS-MULBY
MULTIPLY I BY WS-MULBY GIVING I END-MULTIPLY
END-PERFORM.
END PROGRAM SUBITAND.