Skip to content

Commit

Permalink
refactor: Use a copybook for REGISTRIES data structure (#59)
Browse files Browse the repository at this point in the history
This reduces code duplication to prevent mismatched declarations.
  • Loading branch information
meyfa authored Apr 11, 2024
1 parent 9a4795c commit 5dab9b4
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 40 deletions.
20 changes: 11 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ COBC = cobc
SOCKET_LIB = CBL_GC_SOCKET.so
UTIL_LIB = COBOLCRAFT_UTIL.so

# Sources and binary
SRC = main.cob src/*.cob src/*/*.cob
# Sources, copybooks, and binary
SRC = main.cob $(wildcard src/*.cob src/*/*.cob)
CPY_DIR = src/copybooks
CPY = $(wildcard src/copybooks/*.cpy)
BIN = cobolcraft

# Data extraction from Mojang's server.jar
Expand All @@ -30,15 +32,15 @@ $(JSON_DATA):
curl -o data/server.jar https://piston-data.mojang.com/v1/objects/8dd1a28015f51b1803213892b50b7b4fc76e594d/server.jar
cd data && java -DbundlerMainClass="net.minecraft.data.Main" -jar server.jar --reports

$(BIN): $(SOCKET_LIB) $(UTIL_LIB) $(SRC)
$(COBC) -x -debug -Wall -fnotrunc --free -lstdc++ -o $@ $(SRC)
$(BIN): $(SOCKET_LIB) $(UTIL_LIB) $(SRC) $(CPY)
$(COBC) -x -debug -Wall -fnotrunc --free -lstdc++ -I $(CPY_DIR) -o $@ $(SRC)

clean:
rm $(BIN)
rm $(SOCKET_LIB)
rm $(UTIL_LIB)
rm $(TEST_BIN)
rm -r data/
rm -f $(BIN)
rm -f $(SOCKET_LIB)
rm -f $(UTIL_LIB)
rm -f $(TEST_BIN)
rm -rf data/

run: $(BIN) $(JSON_DATA)
COB_PRE_LOAD=CBL_GC_SOCKET:COBOLCRAFT_UTIL ./$(BIN)
Expand Down
10 changes: 10 additions & 0 deletions src/copybooks/DD-REGISTRIES.cpy
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
*> --- Copybook: shared data for game registries ---
01 REGISTRIES EXTERNAL.
02 REGISTRIES-COUNT BINARY-LONG UNSIGNED.
02 REGISTRY OCCURS 100 TIMES.
03 REGISTRY-NAME PIC X(100).
03 REGISTRY-ID BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRIES-COUNT BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRY OCCURS 2000 TIMES.
04 REGISTRY-ENTRY-NAME PIC X(100).
04 REGISTRY-ENTRY-ID BINARY-LONG UNSIGNED.
42 changes: 11 additions & 31 deletions src/registries.cob
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,7 @@ WORKING-STORAGE SECTION.
01 OFFSET BINARY-LONG UNSIGNED.
01 EXIT-LOOP BINARY-CHAR UNSIGNED.
*> shared data
01 REGISTRIES EXTERNAL.
02 REGISTRIES-COUNT BINARY-LONG UNSIGNED.
02 REGISTRY OCCURS 100 TIMES.
03 REGISTRY-NAME PIC X(100).
03 REGISTRY-ID BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRIES-COUNT BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRY OCCURS 2000 TIMES.
04 REGISTRY-ENTRY-NAME PIC X(100).
04 REGISTRY-ENTRY-ID BINARY-LONG UNSIGNED.
COPY DD-REGISTRIES.
LINKAGE SECTION.
01 LK-JSON PIC X ANY LENGTH.
01 LK-JSON-LEN BINARY-LONG UNSIGNED.
Expand All @@ -37,7 +29,7 @@ PROCEDURE DIVISION USING BY REFERENCE LK-JSON LK-JSON-LEN LK-FAILURE.
PERFORM UNTIL EXIT
*> Read the registry.
ADD 1 TO REGISTRIES-COUNT
CALL "Registries-Parse-Registry" USING LK-JSON OFFSET LK-FAILURE REGISTRY(REGISTRIES-COUNT)
CALL "Registries-Parse-Registry" USING LK-JSON OFFSET LK-FAILURE REGISTRIES-COUNT
IF LK-FAILURE NOT = 0
GOBACK
END-IF
Expand All @@ -62,23 +54,19 @@ PROCEDURE DIVISION USING BY REFERENCE LK-JSON LK-JSON-LEN LK-FAILURE.
WORKING-STORAGE SECTION.
01 EXIT-LOOP BINARY-CHAR UNSIGNED.
01 OBJECT-KEY PIC X(100).
*> shared data
COPY DD-REGISTRIES.
LINKAGE SECTION.
01 LK-JSON PIC X ANY LENGTH.
01 LK-OFFSET BINARY-LONG UNSIGNED.
01 LK-FAILURE BINARY-CHAR UNSIGNED.
01 LK-REGISTRY.
02 LK-REGISTRY-NAME PIC X(100).
02 REGISTRY-ID BINARY-LONG UNSIGNED.
02 LK-REGISTRY-ENTRIES-COUNT BINARY-LONG UNSIGNED.
02 LK-REGISTRY-ENTRY OCCURS 2000 TIMES.
03 LK-REGISTRY-ENTRY-NAME PIC X(100).
03 LK-REGISTRY-ENTRY-ID BINARY-LONG UNSIGNED.
01 LK-REGISTRY BINARY-LONG UNSIGNED.

PROCEDURE DIVISION USING BY REFERENCE LK-JSON LK-OFFSET LK-FAILURE LK-REGISTRY.
MOVE 0 TO LK-REGISTRY-ENTRIES-COUNT
MOVE 0 TO REGISTRY-ENTRIES-COUNT(LK-REGISTRY)

*> Read the registry name.
CALL "JsonParse-ObjectKey" USING LK-JSON LK-OFFSET LK-FAILURE LK-REGISTRY-NAME
CALL "JsonParse-ObjectKey" USING LK-JSON LK-OFFSET LK-FAILURE REGISTRY-NAME(LK-REGISTRY)
IF LK-FAILURE NOT = 0
GOBACK
END-IF
Expand All @@ -99,7 +87,7 @@ PROCEDURE DIVISION USING BY REFERENCE LK-JSON LK-JSON-LEN LK-FAILURE.

EVALUATE OBJECT-KEY
WHEN "protocol_id"
CALL "JsonParse-Integer" USING LK-JSON LK-OFFSET LK-FAILURE REGISTRY-ID
CALL "JsonParse-Integer" USING LK-JSON LK-OFFSET LK-FAILURE REGISTRY-ID(LK-REGISTRY)
IF LK-FAILURE NOT = 0
GOBACK
END-IF
Expand All @@ -114,8 +102,8 @@ PROCEDURE DIVISION USING BY REFERENCE LK-JSON LK-JSON-LEN LK-FAILURE.
*> Loop over each key in the entries object, each representing an entry.
PERFORM UNTIL EXIT
*> Read the entry.
ADD 1 TO LK-REGISTRY-ENTRIES-COUNT
CALL "Registries-Parse-Entry" USING LK-JSON LK-OFFSET LK-FAILURE LK-REGISTRY-ENTRY(LK-REGISTRY-ENTRIES-COUNT)
ADD 1 TO REGISTRY-ENTRIES-COUNT(LK-REGISTRY)
CALL "Registries-Parse-Entry" USING LK-JSON LK-OFFSET LK-FAILURE REGISTRY-ENTRY(LK-REGISTRY, REGISTRY-ENTRIES-COUNT(LK-REGISTRY))
IF LK-FAILURE NOT = 0
GOBACK
END-IF
Expand Down Expand Up @@ -228,15 +216,7 @@ WORKING-STORAGE SECTION.
01 REGISTRY-INDEX BINARY-LONG UNSIGNED.
01 ENTRY-INDEX BINARY-LONG UNSIGNED.
*> shared data
01 REGISTRIES EXTERNAL.
02 REGISTRIES-COUNT BINARY-LONG UNSIGNED.
02 REGISTRY OCCURS 100 TIMES.
03 REGISTRY-NAME PIC X(100).
03 REGISTRY-ID BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRIES-COUNT BINARY-LONG UNSIGNED.
03 REGISTRY-ENTRY OCCURS 2000 TIMES.
04 REGISTRY-ENTRY-NAME PIC X(100).
04 REGISTRY-ENTRY-ID BINARY-LONG UNSIGNED.
COPY DD-REGISTRIES.
LINKAGE SECTION.
01 LK-REGISTRY-NAME PIC X ANY LENGTH.
01 LK-ENTRY-NAME PIC X ANY LENGTH.
Expand Down

0 comments on commit 5dab9b4

Please sign in to comment.