Compare commits

..

2 Commits

Author SHA1 Message Date
BodgeMaster 2609342198 Build system: Make things (kinda) work on Windows
This will need additional work, I just cba to do it as it’s irrelevant rn
2023-01-16 04:58:30 +01:00
BodgeMaster cac0fd47ef README: Add Windows branch disclaimer 2023-01-16 04:55:10 +01:00
45 changed files with 6863 additions and 7758 deletions

3
.gitignore vendored
View File

@ -24,9 +24,6 @@
# ignore nano's temp files
*.swp
# Ignore sublime text project files.
*.sublime-*
#vscode
.vscode

View File

@ -1,3 +1,13 @@
# WARNING: This is the Windows branch.
- Do NOT work on this branch. It is intended for building only.
- Do NOT merge back to master. This branch contains changes that would break the master branch.
- Original commits on this branch should only ever be made regarding fixes
to the build system or otherwise necessary changes to get FOSS-VG to build
and run on Windows.
- This branch will only be maintained as needed.
# FOSS-VG (FOSS Voxel Generator)
This is a WIP Minecraft clone.

View File

@ -22,8 +22,10 @@ each file.
Don't use excessive comments, use descriptive names instead.
There is no such thing as too long names (within reason, of course).
Don't have comments that go beyond 80 characters per line, preferably
slightly less.
Put comments on their own lines.
Format comments to improve readability, don't have long single-line comments.
Indent by four spaces.

View File

@ -1,122 +0,0 @@
[0: Compound]:
|Header: 3 bytes
|Payload: 232 bytes
|Total: 235 bytes
|Length: 4
|
|[3: List] int8 arrays:
| |Header: 14 bytes
| |Payload: 29 bytes
| |Total: 43 bytes
| |Contained Type: Array of 8 Bit Integers
| |Length: 3
| |
| |[22: Array of 8 Bit Integers]:
| | |Payload: 8 bytes
| | |Total: 8 bytes
| | |Length: 4
| | 'Values:
| | |13
| | |37
| | |52
| | '81
| |
| |[30: Array of 8 Bit Integers]:
| | |Payload: 8 bytes
| | |Total: 8 bytes
| | |Length: 4
| | 'Values:
| | |80
| | |0
| | |81
| | '35
| |
| '[38: Array of 8 Bit Integers]:
| |Payload: 8 bytes
| |Total: 8 bytes
| |Length: 4
| 'Values:
| |0
| |0
| |34
| '-65
|
|
|[46: List] int32 arrays:
| |Header: 15 bytes
| |Payload: 97 bytes
| |Total: 112 bytes
| |Contained Type: Array of 32 Bit Integers
| |Length: 3
| |
| |[66: Array of 32 Bit Integers]:
| | |Payload: 16 bytes
| | |Total: 16 bytes
| | |Length: 3
| | 'Values:
| | |13859
| | |7677676
| | '1337
| |
| |[82: Array of 32 Bit Integers]:
| | |Payload: 68 bytes
| | |Total: 68 bytes
| | |Length: 16
| | 'Values:
| | |1
| | |2
| | |4
| | |8
| | |16
| | |32
| | |64
| | |128
| | |256
| | |512
| | |1024
| | |2048
| | |4096
| | |8192
| | |16384
| | '32768
| |
| '[150: Array of 32 Bit Integers]:
| |Payload: 8 bytes
| |Total: 8 bytes
| |Length: 1
| 'Values:
| '-100000
|
|
|[158: List] int64 arrays:
| |Header: 15 bytes
| |Payload: 61 bytes
| |Total: 76 bytes
| |Contained Type: Array of 64 Bit Integers
| |Length: 2
| |
| |[178: Array of 64 Bit Integers]:
| | |Payload: 28 bytes
| | |Total: 28 bytes
| | |Length: 3
| | 'Values:
| | |9999999998
| | |0
| | '77777666666666
| |
| '[206: Array of 64 Bit Integers]:
| |Payload: 28 bytes
| |Total: 28 bytes
| |Length: 3
| 'Values:
| |-2141414141414141
| |7680
| '900
|
|
'[234: End]:
|Header: 1 byte
|Payload: 0 bytes
'Total: 1 byte

View File

@ -1,6 +0,0 @@
[0: 64 Bit Integer] test:
|Header: 7 bytes
|Payload: 8 bytes
|Total: 15 bytes
'Value: 9223372036854775807

View File

@ -1,12 +0,0 @@
[0: 64 Bit Integer] test:
|Header: 7 bytes
|Payload: 8 bytes
|Total: 15 bytes
'Value: 9223372036854775807
[15: 32 Bit Integer] int32:
|Header: 8 bytes
|Payload: 4 bytes
|Total: 12 bytes
'Value: 1866009202

File diff suppressed because it is too large Load Diff

View File

@ -1,592 +0,0 @@
[0: Compound]:
|Header: 3 bytes
|Payload: 792 bytes
|Total: 795 bytes
|Length: 3
|
|[3: List] 60:
| |Header: 5 bytes
| |Payload: 222 bytes
| |Total: 227 bytes
| |Contained Type: List
| |Length: 5
| |
| |[13: List]:
| | |Payload: 81 bytes
| | |Total: 81 bytes
| | |Contained Type: String
| | |Length: 3
| | |
| | |[18: String]:
| | | |Payload: 18 bytes
| | | |Total: 18 bytes
| | | 'Value: Du bist so dumm,
| | |
| | |[36: String]:
| | | |Payload: 38 bytes
| | | |Total: 38 bytes
| | | 'Value: Du wirfst nen Stein aufn Boden
| | |
| | '[74: String]:
| | |Payload: 20 bytes
| | |Total: 20 bytes
| | 'Value: und triffst nicht.
| |
| |
| |[94: List]:
| | |Payload: 12 bytes
| | |Total: 12 bytes
| | |Contained Type: 8 Bit Integer
| | |Length: 7
| | |
| | |[99: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: 115
| | |
| | |[100: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: 35
| | |
| | |[101: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: 7
| | |
| | |[102: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: -3
| | |
| | |[103: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: 56
| | |
| | |[104: 8 Bit Integer]:
| | | |Payload: 1 byte
| | | |Total: 1 byte
| | | 'Value: 105
| | |
| | '[105: 8 Bit Integer]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | 'Value: 125
| |
| |
| |[106: List]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | |Contained Type: End
| | 'Length: 0
| |
| |[111: List]:
| | |Payload: 77 bytes
| | |Total: 77 bytes
| | |Contained Type: Compound
| | |Length: 3
| | |
| | |[116: Compound]:
| | | |Payload: 6 bytes
| | | |Total: 6 bytes
| | | |Length: 2
| | | |
| | | |[116: 8 Bit Integer] 3:
| | | | |Header: 4 bytes
| | | | |Payload: 1 byte
| | | | |Total: 5 bytes
| | | | 'Value: 105
| | | |
| | | '[121: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | |[122: Compound]:
| | | |Payload: 38 bytes
| | | |Total: 38 bytes
| | | |Length: 3
| | | |
| | | |[122: String] 600:
| | | | |Header: 6 bytes
| | | | |Payload: 5 bytes
| | | | |Total: 11 bytes
| | | | 'Value: 800
| | | |
| | | |[133: List] cookie:
| | | | |Header: 9 bytes
| | | | |Payload: 17 bytes
| | | | |Total: 26 bytes
| | | | |Contained Type: String
| | | | |Length: 3
| | | | |
| | | | |[147: String]:
| | | | | |Payload: 5 bytes
| | | | | |Total: 5 bytes
| | | | | 'Value: eat
| | | | |
| | | | |[152: String]:
| | | | | |Payload: 4 bytes
| | | | | |Total: 4 bytes
| | | | | 'Value: it
| | | | |
| | | | '[156: String]:
| | | | |Payload: 3 bytes
| | | | |Total: 3 bytes
| | | | 'Value: !
| | | |
| | | |
| | | '[159: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | '[160: Compound]:
| | |Payload: 28 bytes
| | |Total: 28 bytes
| | |Length: 2
| | |
| | |[160: Compound]:
| | | |Header: 3 bytes
| | | |Payload: 24 bytes
| | | |Total: 27 bytes
| | | |Length: 2
| | | |
| | | |[163: Compound] e:
| | | | |Header: 4 bytes
| | | | |Payload: 19 bytes
| | | | |Total: 23 bytes
| | | | |Length: 3
| | | | |
| | | | |[167: 32 Bit Integer] a:
| | | | | |Header: 4 bytes
| | | | | |Payload: 4 bytes
| | | | | |Total: 8 bytes
| | | | | 'Value: 544502633
| | | | |
| | | | |[175: Compound] f:
| | | | | |Header: 4 bytes
| | | | | |Payload: 6 bytes
| | | | | |Total: 10 bytes
| | | | | |Length: 2
| | | | | |
| | | | | |[179: Compound] o:
| | | | | | |Header: 4 bytes
| | | | | | |Payload: 1 byte
| | | | | | |Total: 5 bytes
| | | | | | |Length: 1
| | | | | | |
| | | | | | '[183: End]:
| | | | | | |Header: 1 byte
| | | | | | |Payload: 0 bytes
| | | | | | 'Total: 1 byte
| | | | | |
| | | | | |
| | | | | '[184: End]:
| | | | | |Header: 1 byte
| | | | | |Payload: 0 bytes
| | | | | 'Total: 1 byte
| | | | |
| | | | |
| | | | '[185: End]:
| | | | |Header: 1 byte
| | | | |Payload: 0 bytes
| | | | 'Total: 1 byte
| | | |
| | | |
| | | '[186: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | '[187: End]:
| | |Header: 1 byte
| | |Payload: 0 bytes
| | 'Total: 1 byte
| |
| |
| |
| '[188: List]:
| |Payload: 42 bytes
| |Total: 42 bytes
| |Contained Type: List
| |Length: 2
| |
| |[193: List]:
| | |Payload: 20 bytes
| | |Total: 20 bytes
| | |Contained Type: String
| | |Length: 5
| | |
| | |[198: String]:
| | | |Payload: 3 bytes
| | | |Total: 3 bytes
| | | 'Value: a
| | |
| | |[201: String]:
| | | |Payload: 3 bytes
| | | |Total: 3 bytes
| | | 'Value: b
| | |
| | |[204: String]:
| | | |Payload: 3 bytes
| | | |Total: 3 bytes
| | | 'Value: c
| | |
| | |[207: String]:
| | | |Payload: 3 bytes
| | | |Total: 3 bytes
| | | 'Value: d
| | |
| | '[210: String]:
| | |Payload: 3 bytes
| | |Total: 3 bytes
| | 'Value: e
| |
| |
| '[213: List]:
| |Payload: 17 bytes
| |Total: 17 bytes
| |Contained Type: 32 Bit Integer
| |Length: 3
| |
| |[218: 32 Bit Integer]:
| | |Payload: 4 bytes
| | |Total: 4 bytes
| | 'Value: 457829
| |
| |[222: 32 Bit Integer]:
| | |Payload: 4 bytes
| | |Total: 4 bytes
| | 'Value: 300
| |
| '[226: 32 Bit Integer]:
| |Payload: 4 bytes
| |Total: 4 bytes
| 'Value: 60
|
|
|
|
|[230: Compound] compound_level_1:
| |Header: 19 bytes
| |Payload: 545 bytes
| |Total: 564 bytes
| |Length: 5
| |
| |[249: List] 100:
| | |Header: 6 bytes
| | |Payload: 291 bytes
| | |Total: 297 bytes
| | |Contained Type: Compound
| | |Length: 4
| | |
| | |[260: Compound]:
| | | |Payload: 6 bytes
| | | |Total: 6 bytes
| | | |Length: 2
| | | |
| | | |[260: 8 Bit Integer] 3:
| | | | |Header: 4 bytes
| | | | |Payload: 1 byte
| | | | |Total: 5 bytes
| | | | 'Value: 3
| | | |
| | | '[265: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | |[266: Compound]:
| | | |Payload: 125 bytes
| | | |Total: 125 bytes
| | | |Length: 4
| | | |
| | | |[266: Array of 8 Bit Integers] 600:
| | | | |Header: 6 bytes
| | | | |Payload: 16 bytes
| | | | |Total: 22 bytes
| | | | |Length: 12
| | | | 'Values:
| | | | |69
| | | | |36
| | | | |67
| | | | |66
| | | | |40
| | | | |-121
| | | | |98
| | | | |-46
| | | | |21
| | | | |101
| | | | |104
| | | | '97
| | | |
| | | |[288: 64 Bit Integer] eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:
| | | | |Header: 85 bytes
| | | | |Payload: 8 bytes
| | | | |Total: 93 bytes
| | | | 'Value: 317827579944
| | | |
| | | |[381: 16 Bit Integer] nose:
| | | | |Header: 7 bytes
| | | | |Payload: 2 bytes
| | | | |Total: 9 bytes
| | | | 'Value: 12547
| | | |
| | | '[390: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | |[391: Compound]:
| | | |Payload: 154 bytes
| | | |Total: 154 bytes
| | | |Length: 3
| | | |
| | | |[391: List] 681:
| | | | |Header: 6 bytes
| | | | |Payload: 8 bytes
| | | | |Total: 14 bytes
| | | | |Contained Type: 8 Bit Integer
| | | | |Length: 3
| | | | |
| | | | |[402: 8 Bit Integer]:
| | | | | |Payload: 1 byte
| | | | | |Total: 1 byte
| | | | | 'Value: 3
| | | | |
| | | | |[403: 8 Bit Integer]:
| | | | | |Payload: 1 byte
| | | | | |Total: 1 byte
| | | | | 'Value: 3
| | | | |
| | | | '[404: 8 Bit Integer]:
| | | | |Payload: 1 byte
| | | | |Total: 1 byte
| | | | 'Value: 5
| | | |
| | | |
| | | |[405: Compound] moar:
| | | | |Header: 7 bytes
| | | | |Payload: 132 bytes
| | | | |Total: 139 bytes
| | | | |Length: 2
| | | | |
| | | | |[412: Compound] nesting:
| | | | | |Header: 10 bytes
| | | | | |Payload: 121 bytes
| | | | | |Total: 131 bytes
| | | | | |Length: 2
| | | | | |
| | | | | |[422: Compound] go:
| | | | | | |Header: 5 bytes
| | | | | | |Payload: 115 bytes
| | | | | | |Total: 120 bytes
| | | | | | |Length: 2
| | | | | | |
| | | | | | |[427: Compound] brrrrr:
| | | | | | | |Header: 9 bytes
| | | | | | | |Payload: 105 bytes
| | | | | | | |Total: 114 bytes
| | | | | | | |Length: 7
| | | | | | | |
| | | | | | | |[436: 16 Bit Integer] anyway:
| | | | | | | | |Header: 9 bytes
| | | | | | | | |Payload: 2 bytes
| | | | | | | | |Total: 11 bytes
| | | | | | | | 'Value: 12547
| | | | | | | |
| | | | | | | |[447: List] data:
| | | | | | | | |Header: 7 bytes
| | | | | | | | |Payload: 21 bytes
| | | | | | | | |Total: 28 bytes
| | | | | | | | |Contained Type: 32 Bit Integer
| | | | | | | | |Length: 4
| | | | | | | | |
| | | | | | | | |[459: 32 Bit Integer]:
| | | | | | | | | |Payload: 4 bytes
| | | | | | | | | |Total: 4 bytes
| | | | | | | | | 'Value: 10
| | | | | | | | |
| | | | | | | | |[463: 32 Bit Integer]:
| | | | | | | | | |Payload: 4 bytes
| | | | | | | | | |Total: 4 bytes
| | | | | | | | | 'Value: 808464643
| | | | | | | | |
| | | | | | | | |[467: 32 Bit Integer]:
| | | | | | | | | |Payload: 4 bytes
| | | | | | | | | |Total: 4 bytes
| | | | | | | | | 'Value: 645
| | | | | | | | |
| | | | | | | | '[471: 32 Bit Integer]:
| | | | | | | | |Payload: 4 bytes
| | | | | | | | |Total: 4 bytes
| | | | | | | | 'Value: 1337
| | | | | | | |
| | | | | | | |
| | | | | | | |[475: 8 Bit Integer] here:
| | | | | | | | |Header: 7 bytes
| | | | | | | | |Payload: 1 byte
| | | | | | | | |Total: 8 bytes
| | | | | | | | 'Value: 3
| | | | | | | |
| | | | | | | |[483: Double] is:
| | | | | | | | |Header: 5 bytes
| | | | | | | | |Payload: 8 bytes
| | | | | | | | |Total: 13 bytes
| | | | | | | | 'Value: 7.29293e-304
| | | | | | | |
| | | | | | | |[496: 32 Bit Integer] so:
| | | | | | | | |Header: 5 bytes
| | | | | | | | |Payload: 4 bytes
| | | | | | | | |Total: 9 bytes
| | | | | | | | 'Value: 808464643
| | | | | | | |
| | | | | | | |[505: Array of 32 Bit Integers] some:
| | | | | | | | |Header: 7 bytes
| | | | | | | | |Payload: 28 bytes
| | | | | | | | |Total: 35 bytes
| | | | | | | | |Length: 6
| | | | | | | | 'Values:
| | | | | | | | |3865431
| | | | | | | | |230597146
| | | | | | | | |2147483647
| | | | | | | | |-1870208349
| | | | | | | | |-1195067710
| | | | | | | | '-2031966525
| | | | | | | |
| | | | | | | '[540: End]:
| | | | | | | |Header: 1 byte
| | | | | | | |Payload: 0 bytes
| | | | | | | 'Total: 1 byte
| | | | | | |
| | | | | | |
| | | | | | '[541: End]:
| | | | | | |Header: 1 byte
| | | | | | |Payload: 0 bytes
| | | | | | 'Total: 1 byte
| | | | | |
| | | | | |
| | | | | '[542: End]:
| | | | | |Header: 1 byte
| | | | | |Payload: 0 bytes
| | | | | 'Total: 1 byte
| | | | |
| | | | |
| | | | '[543: End]:
| | | | |Header: 1 byte
| | | | |Payload: 0 bytes
| | | | 'Total: 1 byte
| | | |
| | | |
| | | '[544: End]:
| | | |Header: 1 byte
| | | |Payload: 0 bytes
| | | 'Total: 1 byte
| | |
| | |
| | '[545: Compound]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | |Length: 1
| | |
| | '[545: End]:
| | |Header: 1 byte
| | |Payload: 0 bytes
| | 'Total: 1 byte
| |
| |
| |
| |[546: Compound] compound_level_2a:
| | |Header: 20 bytes
| | |Payload: 1 byte
| | |Total: 21 bytes
| | |Length: 1
| | |
| | '[566: End]:
| | |Header: 1 byte
| | |Payload: 0 bytes
| | 'Total: 1 byte
| |
| |
| |[567: Compound] compound_level_2b:
| | |Header: 20 bytes
| | |Payload: 191 bytes
| | |Total: 211 bytes
| | |Length: 3
| | |
| | |[587: Float] 300:
| | | |Header: 6 bytes
| | | |Payload: 4 bytes
| | | |Total: 10 bytes
| | | 'Value: 1.89896e+28
| | |
| | |[597: List] 900:
| | | |Header: 6 bytes
| | | |Payload: 174 bytes
| | | |Total: 180 bytes
| | | |Contained Type: String
| | | |Length: 6
| | | |
| | | |[608: String]:
| | | | |Payload: 7 bytes
| | | | |Total: 7 bytes
| | | | 'Value: aaaaa
| | | |
| | | |[615: String]:
| | | | |Payload: 30 bytes
| | | | |Total: 30 bytes
| | | | 'Value: bbbbbbbbbbbbbbbbbbbbbbbbbbbb
| | | |
| | | |[645: String]:
| | | | |Payload: 6 bytes
| | | | |Total: 6 bytes
| | | | 'Value: nose
| | | |
| | | |[651: String]:
| | | | |Payload: 13 bytes
| | | | |Total: 13 bytes
| | | | 'Value: hello there
| | | |
| | | |[664: String]:
| | | | |Payload: 37 bytes
| | | | |Total: 37 bytes
| | | | 'Value: Eat more bricks, theyre healthy.
| | | |
| | | '[701: String]:
| | | |Payload: 76 bytes
| | | |Total: 76 bytes
| | | 'Value: ŧ€æ ̣←¶ĸæ↓ŧŧþ€ł„ ̣€æ€“¢↓ø→ł¶€¶„ŋ
| | |
| | |
| | '[777: End]:
| | |Header: 1 byte
| | |Payload: 0 bytes
| | 'Total: 1 byte
| |
| |
| |[778: List] eeeeeee:
| | |Header: 10 bytes
| | |Payload: 5 bytes
| | |Total: 15 bytes
| | |Contained Type: End
| | 'Length: 0
| |
| '[793: End]:
| |Header: 1 byte
| |Payload: 0 bytes
| 'Total: 1 byte
|
|
'[794: End]:
|Header: 1 byte
|Payload: 0 bytes
'Total: 1 byte

View File

@ -1,78 +0,0 @@
[0: Compound]:
|Header: 3 bytes
|Payload: 2395 bytes
|Total: 2398 bytes
|Length: 2
|
|[3: List] servers:
| |Header: 10 bytes
| |Payload: 2384 bytes
| |Total: 2394 bytes
| |Contained Type: Compound
| |Length: 2
| |
| |[18: Compound]:
| | |Payload: 1184 bytes
| | |Total: 1184 bytes
| | |Length: 4
| | |
| | |[18: String] ip:
| | | |Header: 5 bytes
| | | |Payload: 14 bytes
| | | |Total: 19 bytes
| | | 'Value: minecraft.ip
| | |
| | |[37: String] name:
| | | |Header: 7 bytes
| | | |Payload: 20 bytes
| | | |Total: 27 bytes
| | | 'Value: Survival0 Internal
| | |
| | |[64: String] icon:
| | | |Header: 7 bytes
| | | |Payload: 1130 bytes
| | | |Total: 1137 bytes
| | | 'Value: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADFUlEQVR4Xt2bPW4UQRCFx9qUA+wBkJB8ElIkbmAJn4GYhNQ38AmcEBORcA8OQdjQbfeq9pvq6und/pv9pCeL/qv3amakHS9elsY45w7ucg48bxcwRS1YZyr++7uj4Ybcsf4wvBm668jYRtDNKOirOTQwC/TZBBadDfqtCovNCn1XgUVmh/6vgofvBea4CB66N5inCB62V5hrEzwk4qdaqSVLCdwsCdN/f1RXpmwVmDMJN0bClGK+lozSVWBOFW6ShGlhtpZ6NcCzWLjMi01Y8mb0829XTfLcDqRfoLiShCVKAyIMtlXy3B6cp37DXXj1NRjwbP2f90Ecl+d3YH0XcAUJS5QGlGqSBqzvAi4gYUlhAyIc1yTP78FF4a0G3L8cT5LhI1xPsUYPihuQCq81ICdJHJN1elClATI4xbUMLhnWAJf5vX00dW0DPNxLsVYHDtkqNCUDeRiaDSAMPbgBLltFu/1JHH/69G4Vylovdf/1GNT9MeAA0RqQUqoBmmLgqOcvH4KmagBvSZqWyjWA62NgijVbY1agGZqVYkCK61NizdaYFeTtSKMt1fMxMCvM2AA/VioLczYaiWZ6yXoE5PwWaWdIzNnSYrWlmY+e2DRNqTMk5uzMDeA6GZpzFuYsOzpCJIwpzaL8J9GrG5DCH/rr5/dqypmUbG1AVO5sdZZXYQZd481CnQ2blG6OEkMwoKUcfsXqdTg24PHh4ybRcKkeH76d/Ts+vy/H9XPMgFtk8Prf8DgahhSjoyQtlnpT4p0I4a0G8EqnxKK1pTXA/8yJe0kI71EmViZGSlrUvDE051KcGuDBRNjMK50Si9aWtKeF1JT7HHAW3oPJ6SS9MawluVeyEJf4asxP8YNLD71aWuPHS6Ww/mrMw1UePzxKKbjOksaSwiXughtDv/oRrr41mFeFm24F5kzCjbcCc5pw895hvk3wkL3CXEXwsL3BPBfBQ/cCc1wFD58d+q8Ci8wKfVeFxWaDfpvAorNAn82hgVHQV1fc2Bco+8WmJ94M3TVknuAadFsL1tkFTvneoYDmfz7/D2WFu2nv97K8AAAAAElFTkSuQmCC
| | |
| | '[1201: End]:
| | |Header: 1 byte
| | |Payload: 0 bytes
| | 'Total: 1 byte
| |
| |
| '[1202: Compound]:
| |Payload: 1195 bytes
| |Total: 1195 bytes
| |Length: 4
| |
| |[1202: String] ip:
| | |Header: 5 bytes
| | |Payload: 25 bytes
| | |Total: 30 bytes
| | 'Value: lostcave.ddnss.de:45539
| |
| |[1232: String] name:
| | |Header: 7 bytes
| | |Payload: 20 bytes
| | |Total: 27 bytes
| | 'Value: Survival0 External
| |
| |[1259: String] icon:
| | |Header: 7 bytes
| | |Payload: 1130 bytes
| | |Total: 1137 bytes
| | 'Value: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADFUlEQVR4Xt2bPW4UQRCFx9qUA+wBkJB8ElIkbmAJn4GYhNQ38AmcEBORcA8OQdjQbfeq9pvq6und/pv9pCeL/qv3amakHS9elsY45w7ucg48bxcwRS1YZyr++7uj4Ybcsf4wvBm668jYRtDNKOirOTQwC/TZBBadDfqtCovNCn1XgUVmh/6vgofvBea4CB66N5inCB62V5hrEzwk4qdaqSVLCdwsCdN/f1RXpmwVmDMJN0bClGK+lozSVWBOFW6ShGlhtpZ6NcCzWLjMi01Y8mb0829XTfLcDqRfoLiShCVKAyIMtlXy3B6cp37DXXj1NRjwbP2f90Ecl+d3YH0XcAUJS5QGlGqSBqzvAi4gYUlhAyIc1yTP78FF4a0G3L8cT5LhI1xPsUYPihuQCq81ICdJHJN1elClATI4xbUMLhnWAJf5vX00dW0DPNxLsVYHDtkqNCUDeRiaDSAMPbgBLltFu/1JHH/69G4Vylovdf/1GNT9MeAA0RqQUqoBmmLgqOcvH4KmagBvSZqWyjWA62NgijVbY1agGZqVYkCK61NizdaYFeTtSKMt1fMxMCvM2AA/VioLczYaiWZ6yXoE5PwWaWdIzNnSYrWlmY+e2DRNqTMk5uzMDeA6GZpzFuYsOzpCJIwpzaL8J9GrG5DCH/rr5/dqypmUbG1AVO5sdZZXYQZd481CnQ2blG6OEkMwoKUcfsXqdTg24PHh4ybRcKkeH76d/Ts+vy/H9XPMgFtk8Prf8DgahhSjoyQtlnpT4p0I4a0G8EqnxKK1pTXA/8yJe0kI71EmViZGSlrUvDE051KcGuDBRNjMK50Si9aWtKeF1JT7HHAW3oPJ6SS9MawluVeyEJf4asxP8YNLD71aWuPHS6Ww/mrMw1UePzxKKbjOksaSwiXughtDv/oRrr41mFeFm24F5kzCjbcCc5pw895hvk3wkL3CXEXwsL3BPBfBQ/cCc1wFD58d+q8Ci8wKfVeFxWaDfpvAorNAn82hgVHQV1fc2Bco+8WmJ94M3TVknuAadFsL1tkFTvneoYDmfz7/D2WFu2nv97K8AAAAAElFTkSuQmCC
| |
| '[2396: End]:
| |Header: 1 byte
| |Payload: 0 bytes
| 'Total: 1 byte
|
|
|
'[2397: End]:
|Header: 1 byte
|Payload: 0 bytes
'Total: 1 byte

View File

@ -1,223 +0,0 @@
[0: Compound]:
|Header: 3 bytes
|Payload: 475 bytes
|Total: 478 bytes
|Length: 15
|
|[3: String] Spaces and special characters are allowed in tag names, right?:
| |Header: 65 bytes
| |Payload: 24 bytes
| |Total: 89 bytes
| 'Value: Idk. Lets find out.
|
|[92: Compound] compound:
| |Header: 11 bytes
| |Payload: 45 bytes
| |Total: 56 bytes
| |Length: 3
| |
| |[103: 32 Bit Integer] some_number:
| | |Header: 14 bytes
| | |Payload: 4 bytes
| | |Total: 18 bytes
| | 'Value: -754506943
| |
| |[121: String] some_text:
| | |Header: 12 bytes
| | |Payload: 14 bytes
| | |Total: 26 bytes
| | 'Value: eat a cookie
| |
| '[147: End]:
| |Header: 1 byte
| |Payload: 0 bytes
| 'Total: 1 byte
|
|
|[148: Double] double:
| |Header: 9 bytes
| |Payload: 8 bytes
| |Total: 17 bytes
| 'Value: 623594
|
|[165: Float] float:
| |Header: 8 bytes
| |Payload: 4 bytes
| |Total: 12 bytes
| 'Value: 35.2678
|
|[177: 16 Bit Integer] int16:
| |Header: 8 bytes
| |Payload: 2 bytes
| |Total: 10 bytes
| 'Value: 2000
|
|[187: 32 Bit Integer] int32:
| |Header: 8 bytes
| |Payload: 4 bytes
| |Total: 12 bytes
| 'Value: 10101010
|
|[199: Array of 32 Bit Integers] int32_array:
| |Header: 14 bytes
| |Payload: 20 bytes
| |Total: 34 bytes
| |Length: 4
| 'Values:
| |398452796
| |43259
| |2147483647
| '1634890337
|
|[233: 64 Bit Integer] int64:
| |Header: 8 bytes
| |Payload: 8 bytes
| |Total: 16 bytes
| 'Value: 810001800766
|
|[249: Array of 64 Bit Integers] int64_array:
| |Header: 14 bytes
| |Payload: 44 bytes
| |Total: 58 bytes
| |Length: 5
| 'Values:
| |239865
| |23586749
| |9223372036854775807
| |188944201329624
| '3116157694992754
|
|[307: 8 Bit Integer] int8:
| |Header: 7 bytes
| |Payload: 1 byte
| |Total: 8 bytes
| 'Value: 100
|
|[315: Array of 8 Bit Integers] int8_array:
| |Header: 13 bytes
| |Payload: 12 bytes
| |Total: 25 bytes
| |Length: 8
| 'Values:
| |113
| |53
| |119
| |98
| |84
| |100
| |-11
| '50
|
|[340: List] list_int8:
| |Header: 12 bytes
| |Payload: 10 bytes
| |Total: 22 bytes
| |Contained Type: 8 Bit Integer
| |Length: 5
| |
| |[357: 8 Bit Integer]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | 'Value: 65
| |
| |[358: 8 Bit Integer]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | 'Value: 96
| |
| |[359: 8 Bit Integer]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | 'Value: 78
| |
| |[360: 8 Bit Integer]:
| | |Payload: 1 byte
| | |Total: 1 byte
| | 'Value: 127
| |
| '[361: 8 Bit Integer]:
| |Payload: 1 byte
| |Total: 1 byte
| 'Value: -6
|
|
|[362: List] list_strings:
| |Header: 15 bytes
| |Payload: 77 bytes
| |Total: 92 bytes
| |Contained Type: String
| |Length: 12
| |
| |[382: String]:
| | |Payload: 8 bytes
| | |Total: 8 bytes
| | 'Value: Pacman
| |
| |[390: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: ate
| |
| |[395: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: all
| |
| |[400: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: the
| |
| |[405: String]:
| | |Payload: 6 bytes
| | |Total: 6 bytes
| | 'Value: dots
| |
| |[411: String]:
| | |Payload: 4 bytes
| | |Total: 4 bytes
| | 'Value: so
| |
| |[415: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: now
| |
| |[420: String]:
| | |Payload: 8 bytes
| | |Total: 8 bytes
| | 'Value: hes
| |
| |[428: String]:
| | |Payload: 8 bytes
| | |Total: 8 bytes
| | 'Value: coming
| |
| |[436: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: for
| |
| |[441: String]:
| | |Payload: 5 bytes
| | |Total: 5 bytes
| | 'Value: the
| |
| '[446: String]:
| |Payload: 8 bytes
| |Total: 8 bytes
| 'Value: words.
|
|
|[454: String] string:
| |Header: 9 bytes
| |Payload: 14 bytes
| |Total: 23 bytes
| 'Value: Hello World!
|
'[477: End]:
|Header: 1 byte
|Payload: 0 bytes
'Total: 1 byte

View File

@ -59,9 +59,3 @@ Usage: `check_endianness > header_file`
Note that, while this tool should in theory be able to detect
PDP and Honeywell-316-style endianness, the FOSS-VG project itself
does not support these.
## region_files
Exactly what the name says. At this point just a random region file I grabbed
from Minecraft, will probably contain synthetic files for test cases in the
future as well.

View File

@ -1,90 +0,0 @@
if [ "$1" = "-v" ]; then
VERBOSE=true
shift
else
VERBOSE=false
fi
if [ "$1" = "-n" ]; then
DECOMPRESS=false
shift
else
DECOMPRESS=true
fi
if [ ! -f "$1" ]; then
echo "Usage: $0 [-v] [-n] FILE"
echo " -v display raw content and NBT dump"
echo " -n don't decompress"
exit 1
fi
# pointer data
OFFSET_HEX="0x$(dd bs=1 if="$1" count=3 2>/dev/null | hexdump -e '3/1 "%02x" "\n"')"
OFFSET="$(baseconvert -d $OFFSET_HEX)"
echo " offset: $OFFSET ($OFFSET_HEX)"
LENGTH_HEX="0x$(dd bs=1 if="$1" count=1 skip=3 2>/dev/null | hexdump -e '1/1 "%02x" "\n"')"
LENGTH="$(baseconvert -d $LENGTH_HEX)"
echo " length: $LENGTH ($LENGTH_HEX)"
#TODO: last modified
# chunk
DATA="$(dd if="$1" bs=4096 count=$LENGTH skip=$OFFSET 2>/dev/null | hexdump -v -e '16/1 "%02x" "\n"' | tr -d '
')"
# blob header
# bs=2 because each byte is two digits hex
COMPRESSED_LENGTH_HEX="0x$(dd bs=2 count=4 2> /dev/null <<< $DATA)"
COMPRESSED_LENGTH="$(baseconvert -d $COMPRESSED_LENGTH_HEX)"
echo " compressed length in bytes: $COMPRESSED_LENGTH ($COMPRESSED_LENGTH_HEX)"
FORMAT_HEX="0x$(dd bs=2 skip=4 count=1 2> /dev/null <<< $DATA)"
case $FORMAT_HEX in
"0x01")
FORMAT="gzip"
function UNCOMPRESS {
gzip -dc
}
;;
"0x02")
FORMAT="zlib"
function UNCOMPRESS {
cat > /tmp/chunk_zlib_decompress
python3 <<< "
import zlib,sys
a = open('/tmp/chunk_zlib_decompress', 'rb')
data = a.read()
a.close()
sys.stdout.buffer.write(zlib.decompress(data))
sys.stdout.buffer.flush()
"
rm /tmp/chunk_zlib_decompress
}
;;
*)
FORMAT="unknown"
function UNCOMPRESS {
false
}
;;
esac
echo " format: $FORMAT ($FORMAT_HEX)"
if $DECOMPRESS; then
dd if="$1" bs=4096 count=$LENGTH skip=$OFFSET 2>/dev/null | dd bs=1 skip=5 count=$(($COMPRESSED_LENGTH-1)) 2>/dev/null | UNCOMPRESS > /tmp/chunk_uncompressed_nbt
else
dd if="$1" bs=4096 count=$LENGTH skip=$OFFSET 2>/dev/null | dd bs=1 skip=5 count=$(($COMPRESSED_LENGTH-1)) 2>/dev/null > /tmp/chunk_compressed_nbt
fi
if $VERBOSE; then
echo "Raw chunk data:"
echo "$DATA"
echo "NBT dump:"
#TODO: use pipes instead of a file
#TODO: fix this up to work with both compressed and uncompressed NBT
dumpnbt /tmp/chunk_uncompressed_nbt
rm /tmp/chunk_uncompressed_nbt
fi

Binary file not shown.

View File

@ -35,19 +35,10 @@ fi
# dynamically linked libraries.
echo ">>> Building libs..."
create_directory bin/lib
COMPILE_COMMANDS=(
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/net/connection.so ./src/lib/net/connection.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/cli.so ./src/lib/cli.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/file.so ./src/lib/file.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/game/block.so ./src/lib/game/block.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/game/entity.so ./src/lib/game/entity.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/nbt.so ./src/lib/nbt.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -o ./bin/lib/region.so ./src/lib/region.cpp"
"$CXX_WITH_FLAGS -I ./include -fPIC -shared -l:libz.so -o ./bin/lib/zlibutil.so ./src/lib/zlibutil.cpp"
)
for command in ${!COMPILE_COMMANDS[@]}; do
echo "${COMPILE_COMMANDS[command]}"
${COMPILE_COMMANDS[command]} &
for lib in $(find ./src/lib -name "*.cpp"); do
COMPILE_COMMAND="$CXX_WITH_FLAGS -I ./include -fPIC -shared -o $(sed -e 's/^.\/src/.\/bin/;s/cpp$/so/' <<< $lib) $lib"
echo $COMPILE_COMMAND
$COMPILE_COMMAND &
$WAIT_ANYWAY
done
@ -64,16 +55,15 @@ wait
# How to run a tool: specify the library path to use for the dynamic linker
# when running a program
# Example: LD_LIBRARY_PATH=bin/lib bin/tools/dumpnbt
echo ">>> Building programs..."
echo ">>> Building tools..."
create_directory bin/tools
# add compile commands to this array
COMPILE_COMMANDS=(
"$CXX_WITH_FLAGS src/tools/dumpnbt.cpp -I./include -Lbin/lib -l:nbt.so -l:cli.so -o bin/tools/dumpnbt"
"$CXX_WITH_FLAGS src/tools/arraydump.cpp -I./include -Lbin/lib -l:file.so -l:cli.so -o bin/tools/arraydump"
"$CXX_WITH_FLAGS src/tools/baseconvert.cpp -I./include -Lbin/lib -l:cli.so -o bin/tools/baseconvert"
"$CXX_WITH_FLAGS src/tools/zlibutil.cpp -I./include -Lbin/lib -l:cli.so -l:file.so -l:zlibutil.so -l:libz.so -o bin/tools/zlibutil"
"$CXX_WITH_FLAGS -pthread src/tools/hexnet.cpp -I./include -Lbin/lib -l:cli.so -l:libsockpp.so -o bin/tools/hexnet"
"$CXX_WITH_FLAGS -DFOSSVG_DEBUG src/fossvg.cpp -I./include -Lbin/lib -l:file.so -l:cli.so -lglfw -lvulkan -o bin/fossvg"
"$CXX_WITH_FLAGS src/fossvg.cpp -I./include -Lbin/lib -l:cli.so -lglfw -o bin/fossvg"
"$CXX_WITH_FLAGS src/fossvgd.cpp -I./include -Lbin/lib -l:cli.so -o bin/fossvgd"
)
for command in ${!COMPILE_COMMANDS[@]}; do
@ -83,21 +73,3 @@ for command in ${!COMPILE_COMMANDS[@]}; do
done
wait
echo ">>> Compiling shaders..."
create_directory bin/shaders
for shader in $(find ./src/shaders -name "*.vsh"); do
COMPILE_COMMAND="dependencies/shaderc/bin/glslc -o $(sed -e 's/^.\/src/.\/bin/;s/vsh$/vsh.spv/' <<< $shader) -fshader-stage=vertex $shader"
echo $COMPILE_COMMAND
$COMPILE_COMMAND &
$WAIT_ANYWAY
done
for shader in $(find ./src/shaders -name "*.fsh"); do
COMPILE_COMMAND="dependencies/shaderc/bin/glslc -o $(sed -e 's/^.\/src/.\/bin/;s/fsh$/fsh.spv/' <<< $shader) -fshader-stage=fragment $shader"
echo $COMPILE_COMMAND
$COMPILE_COMMAND &
$WAIT_ANYWAY
done
wait

View File

@ -29,17 +29,16 @@ create_directory ./bin/lib/net
create_directory ./include
if uname -s | tr [:upper:] [:lower:] | grep cygwin >/dev/null; then
ln -vs ../../dependencies/sockpp-0.8.1/build/cygsockpp-0.dll bin/lib/libsockpp.so
ln -vs ../../dependencies/sockpp-0.8.1/build/cygsockpp-0.dll bin/lib/
ln -vs ../../dependencies/sockpp-0.7.1/build/cygsockpp-0.dll bin/lib/libsockpp.so
ln -vs ../../dependencies/sockpp-0.7.1/build/cygsockpp-0.dll bin/lib/
else
ln -vs ../../dependencies/sockpp-0.8.1/build/libsockpp.so bin/lib/
ln -vs ../../dependencies/sockpp-0.8.1/build/libsockpp.so.0 bin/lib/
ln -vs ../../dependencies/sockpp-0.8.1/build/libsockpp.so.0.8.1 bin/lib/
ln -vs ../../dependencies/sockpp-0.7.1/build/libsockpp.so bin/lib/
ln -vs ../../dependencies/sockpp-0.7.1/build/libsockpp.so.0 bin/lib/
ln -vs ../../dependencies/sockpp-0.7.1/build/libsockpp.so.0.7.1 bin/lib/
fi
ln -vs ../dependencies/sockpp-0.8.1/include/sockpp/ ./include/
ln -vs ../dependencies/sockpp-0.7.1/include/sockpp/ ./include/
ln -vs ../dependencies/tiny-utf8-4.4.3/include/tinyutf8/ ./include/
ln -vs ../dependencies/zlib-1.3.1/ ./include/zlib
create_file ./bin/.placeholder
create_file ./include/.placeholder

View File

@ -17,7 +17,6 @@
source scripts/lib.sh
#TODO: move this to download.sh
echo ">>> Checking download cache for unneeded or corrupted files..."
for file in $(ls .download_cache); do
#TODO: remove if unknown shasum
@ -36,6 +35,6 @@ done
echo "
>>> Cleaning dependencies..."
remove -f ./dependencies
remove ./dependencies
create_directory ./dependencies
create_file ./dependencies/.placeholder

View File

@ -1,61 +0,0 @@
if [ "$#" -lt 3 -o "$#" -gt 3 ]; then
echo "Usage: $0 URL DESTINATION SHA256SUM"
exit 1
fi
source scripts/lib.sh
URL="$1"
DESTINATION="$2"
SHA256SUM="$3"
if command -v wget >/dev/null 2>&1; then
USE_WGET=yes
else
if command -v curl >/dev/null 2>&1; then
USE_WGET=no
else
echo "Found neither wget nor curl. Aborting."
exit 1
fi
fi
if [ ! -d .download_cache ]; then
echo "Cache directory missing."
create_directory .download_cache
fi
#TODO: keep track of which cached file is downloaded to which destination
#TODO: when downloading a file with a new hash to the same destination, mark the old one as no longer in use
#TODO: if there is an even older one for the same download path, delete it
#TODO: remove cache maintenance from clean_dependencies
if [ -f ".download_cache/$SHA256SUM" ]; then
if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then
echo "Using locally cached file for $DESTINATION"
cp ".download_cache/$SHA256SUM" "$DESTINATION"
exit 0
else
echo "Locally cached file for $DESTINATION is corrupted."
rm ".download_cache/$SHA256SUM"
$0 "$URL" "$DESTINATION" "$SHA256SUM"
exit $?
fi
else
echo -n "Downloading $URL to $DESTINATION... "
if [ $USE_WGET = yes ]; then
wget -O ".download_cache/$SHA256SUM" "$URL" >/dev/null 2>&1
else
curl -L "$URL" --output ".download_cache/$SHA256SUM" >/dev/null 2>&1
fi
if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then
cp ".download_cache/$SHA256SUM" "$DESTINATION"
echo "done."
exit 0
else
echo "error."
echo "Checksum verification failed. Your download is either corrupted or the file has been altered. Removing file."
rm ".download_cache/$SHA256SUM"
exit 1
fi
fi

11
scripts/lib.sh Executable file → Normal file
View File

@ -57,18 +57,11 @@ fi
# `rm -v` only prints the names of the removed things instead of a more
# comprehensible message like "removing NAME".
function remove {
local USE_FORCE=""
if [ "$1" = "-f" ]; then
USE_FORCE="f"
shift
echo "Forcefully removing $1..."
else
echo "Removing $1..."
fi;
if [ -d "$1" ]; then
rm -"$USE_FORCE"rv "$1"
rm -rv "$1"
else
rm -"$USE_FORCE"v "$1"
rm -v "$1"
fi
}

View File

@ -17,19 +17,68 @@
source scripts/lib.sh
echo -n "Wget or curl? "
if command -v wget >/dev/null 2>&1; then
USE_WGET=yes
echo "wget"
else
if command -v curl >/dev/null 2>&1; then
USE_WGET=no
echo "curl"
else
echo "Found neither wget nor curl. Aborting."
exit 1
fi
fi
function download {
URL="$1"
DESTINATION="$2"
SHA256SUM="$3"
if [ ! -d .download_cache ]; then
echo "Cache directory missing."
create_directory .download_cache
fi
if [ -f ".download_cache/$SHA256SUM" ]; then
if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then
echo "Using locally cached file for $DESTINATION"
cp ".download_cache/$SHA256SUM" "$DESTINATION"
return 0
else
echo "Locally cached file for $DESTINATION is corrupted."
rm ".download_cache/$SHA256SUM"
download "$URL" "$DESTINATION" "$SHA256SUM"
return $?
fi
else
echo -n "Downloading $URL to $DESTINATION... "
if [ $USE_WGET = yes ]; then
wget -O ".download_cache/$SHA256SUM" "$URL" >/dev/null 2>&1
else
curl -L "$URL" --output ".download_cache/$SHA256SUM" >/dev/null 2>&1
fi
if check_sha256 ".download_cache/$SHA256SUM" "$SHA256SUM"; then
cp ".download_cache/$SHA256SUM" "$DESTINATION"
echo "done."
return 0
else
echo "error."
echo "Checksum verification failed. Your download is either corrupted or the file has been altered. Removing file."
rm ".download_cache/$SHA256SUM"
return 1
fi
fi
}
scripts/clean.sh
scripts/clean_dependencies.sh
set -e # failures are not acceptable here
create_directory dependencies/tmp
scripts/download.sh https://github.com/DuffsDevice/tiny-utf8/archive/refs/tags/v4.4.3.tar.gz dependencies/tmp/tiny-utf8.tar.gz 8e3f61651909c9f3105d3501932a96aa65733127fb6e7cf94cb1b0a2dff42c8f
scripts/download.sh https://github.com/fpagliughi/sockpp/archive/refs/tags/v0.8.1.tar.gz dependencies/tmp/sockpp.tar.gz a8aedff8bd8c1da530b91be650352008fddabc9f1df0d19701d76cbc359c8651
scripts/download.sh https://www.zlib.net/zlib-1.3.1.tar.xz dependencies/tmp/zlib.tar.xz 38ef96b8dfe510d42707d9c781877914792541133e1870841463bfa73f883e32
#TODO: figure out how to cache shaderc
#also TODO: target a specific commit
git clone --branch known-good https://github.com/google/shaderc.git dependencies/tmp/shaderc
#scripts/download.sh https://github.com/google/shaderc/archive/refs/tags/v2023.7.tar.gz dependencies/tmp/shaderc.tar.gz 681e1340726a0bf46bea7e31f10cbfe78e01e4446a35d90fedc2b78d400fcdeb
download https://github.com/DuffsDevice/tiny-utf8/archive/refs/tags/v4.4.3.tar.gz dependencies/tmp/tiny-utf8.tar.gz 8e3f61651909c9f3105d3501932a96aa65733127fb6e7cf94cb1b0a2dff42c8f
download https://github.com/fpagliughi/sockpp/archive/refs/tags/v0.7.1.tar.gz dependencies/tmp/sockpp.tar.gz 2e023528bebbd2ac083fc91fbe6d5c4158c3336bedbcff48f594f3b28f53b940
echo -n ">>> Extracting tiny-utf8... "
gzip -d dependencies/tmp/tiny-utf8.tar.gz
@ -41,60 +90,13 @@ gzip -d dependencies/tmp/sockpp.tar.gz
tar -xf dependencies/tmp/sockpp.tar -C dependencies
echo "done"
echo -n ">>> Extracting zlib... "
xz -d dependencies/tmp/zlib.tar.xz
tar -xf dependencies/tmp/zlib.tar -C dependencies
echo "done"
echo ">>> Building sockpp... "
pushd dependencies/sockpp-0.8.1/ >/dev/null 2>&1
if uname -s | tr [:upper:] [:lower:] | grep cygwin >/dev/null; then
echo "Adding Cygwin workaound for building sockpp."
pushd dependencies/sockpp-0.7.1/ >/dev/null 2>&1
#for FILE in "$(find ./ -type f)"; do
# sed -i -e 's/_WIN32/PLEASE_DO_NOT_DEFINE_THIS_MACRO/g' $FILE
#done
#mv ./include/sockpp/socket.h ./include/sockpp/socket.h_original
#echo '#include <sys/time.h>
##include "socket.h_original"' > ./include/sockpp/socket.h
sed -i -e 's/SO_REUSEPORT/SO_REUSEADDR/g' ./src/acceptor.cpp
#CFLAGS="-D_XOPEN_SOURCE=700" CXXFLAGS="-D_XOPEN_SOURCE=700" cmake -Bbuild
#CFLAGS="-D_XOPEN_SOURCE=700" CXXFLAGS="-D_XOPEN_SOURCE=700" cmake --build build
cmake -Bbuild .
cmake -G "MinGW Makefiles" -Bbuild .
cmake --build build
else
cmake -Bbuild .
cmake --build build
fi
popd >/dev/null 2>&1
echo ">>> done"
echo ">>> Dealing with shaderc shenanigans..."
pushd dependencies/tmp/shaderc
echo "Getting sources using the provided script..."
./update_shaderc_sources.py
SHADERC_BUILD="build-$(dd if=/dev/urandom bs=1 count=5 2>/dev/null | base32)"
echo "Creating and entering directory $SHADERC_BUILD."
mkdir "$SHADERC_BUILD"
cd "$SHADERC_BUILD"
echo "Running CMake..."
CXXFLAGS="-Wno-error" cmake -GNinja -DCMAKE_BUILD_TYPE=Release ../src/
echo "Running Ninja..."
ninja
popd >/dev/null 2>&1
#if needed copy more relevant files to dependencies/shaderc
echo "Copying binary to dependencies/shaderc/bin..."
mkdir -vp dependencies/shaderc/bin
cp -v "dependencies/tmp/shaderc/$SHADERC_BUILD/glslc/glslc" dependencies/shaderc/bin
echo ">>> done"
echo ">>> Building zlib..."
pushd dependencies/zlib-1.3.1/
./configure
make
popd
echo "done"
echo ">>> Cleaning up..."
remove -f dependencies/tmp
remove dependencies/tmp

File diff suppressed because it is too large Load Diff

23
scripts/test/hexnet.sh Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
# Copyright 2022, FOSS-VG Developers and Contributers
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# version 3 along with this program.
# If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
echo "################################################################################
Testing hexnet
################################################################################"
echo "Test not yet implemented."
#TODO: implement unit test after merging back with master

View File

@ -1,46 +0,0 @@
#!/usr/bin/env bash
echo "================================================================================"
echo "Testing \`zlibutil\`:"
echo "--------------------------------------------------------------------------------"
TMPDIR="$(mktemp -d -t fossvg-zlibutil-XXXXX)"
TMPDATA="$(dd if=/dev/urandom bs=33 count=1 2>/dev/null | base64)"
echo -n "Compression test... "
echo -n "$TMPDATA" >> "$TMPDIR/compress"
zlibutil "$TMPDIR/compress"
python3 <<< "
import zlib, sys
tmpfile = open('$TMPDIR/compress.zz', 'rb')
data = tmpfile.read()
tmpfile.close()
try:
if zlib.decompress(data)==b'$TMPDATA':
print('PASS')
else:
print('FAIL: Wrong data.')
except:
print('FAIL: Exception.')
"
echo -n "Decompression test... "
#TODO: create a compressed file using another implementation (Python)
python3 <<< "
import zlib
tmpfile = open('$TMPDIR/decompress.zz', 'wb')
tmpfile.write(zlib.compress(b'$TMPDATA'))
tmpfile.close()
"
zlibutil -d "$TMPDIR/decompress.zz"
if [ "$(cat "$TMPDIR/decompress")" = "$TMPDATA" ]; then
echo "PASS"
else
echo "FAIL"
fi
rm -r "$TMPDIR"
echo "================================================================================"

View File

@ -13,7 +13,7 @@
# version 3 along with this program.
# If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
echo ">>> Loading shell environment for FOSS-VG development..."
echo ">>> Loading Windows-specific shell environment for FOSS-VG development..."
export PROJECT_BASE_DIR="$( cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 ; pwd -P )"
echo "Project base directory is $PROJECT_BASE_DIR"
@ -42,18 +42,12 @@ function build {
echo "Added aliases and functions."
export PATH="$PROJECT_BASE_DIR/bin:$PROJECT_BASE_DIR/bin/tools:$PROJECT_BASE_DIR/scripts/tools:$PATH"
if uname -s | tr [:upper:] [:lower:] | grep cygwin >/dev/null; then
echo "Adding Cygwin workaound for library path."
export PATH="$PROJECT_BASE_DIR/bin/lib:$PATH"
fi
echo "PATH is $PATH"
if [ -z "$LD_LIBRARY_PATH" ]; then
export LD_LIBRARY_PATH="$PROJECT_BASE_DIR"/bin/lib
else
export LD_LIBRARY_PATH="$PROJECT_BASE_DIR"/bin/lib:"$LD_LIBRARY_PATH"
fi
echo "LD_LIBRARY_PATH is $LD_LIBRARY_PATH"
# Windows workaround:
# Windows doesn't have LD_LIBRARY_PATH and searches for libraries on PATH instead.
export PATH="$PROJECT_BASE_DIR/bin/lib:$PATH"
echo "PATH is $PATH"
echo ">>> Checking for dependencies..."
MISSING_DEPS=0

View File

@ -21,10 +21,7 @@
#include <cstdint>
#include <string>
#define GLFW_INCLUDE_VULKAN
extern "C" {
#include <GLFW/glfw3.h>
}
#include "./lib/cli.hpp"
@ -32,27 +29,24 @@ extern "C" {
#define EXIT_RUNTIME 1
#define EXIT_USAGE 2
uint32_t windowWidth = 1366;
uint32_t windowHeight = 768;
//TODO: check the TODO above glfwInit() in void main()
// #### Callbacks ##############################################################
void cursorPositionCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] double x, [[maybe_unused]] double y) {
void cursorPositionCallback(GLFWwindow* window, double x, double y) {
}
void keyCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] int32_t key, [[maybe_unused]] int32_t scancode, [[maybe_unused]] int32_t action, [[maybe_unused]] int32_t mods) {
void keyCallback(GLFWwindow* window, int32_t key, int32_t scancode, int32_t action, int32_t mods) {
}
void textInputCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] uint32_t codepoint) {
void textInputCallback(GLFWwindow* window, uint32_t codepoint) {
}
void cursorEnterLeaveCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] int32_t entered) {
void cursorEnterLeaveCallback(GLFWwindow* window, int32_t entered) {
}
void mouseButtonCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] int32_t button, [[maybe_unused]] int32_t action, [[maybe_unused]] int32_t mods) {
void mouseButtonCallback(GLFWwindow* window, int32_t button, int32_t action, int32_t mods) {
}
void scrollCallback([[maybe_unused]] GLFWwindow* window, [[maybe_unused]] double x, [[maybe_unused]] double y) {
void scrollCallback(GLFWwindow* window, double x, double y) {
}
// #### End Callbacks ##########################################################
@ -61,8 +55,6 @@ int main(int argc, char* argv[]) {
flags.push_back(CLI::Flag('h', "help", "print help and exit"));
flags.push_back(CLI::Flag('l', "license", "print license information and exit"));
std::vector<CLI::Option> options;
options.push_back(CLI::Option('x', "window-width", "PIXELS", "window width on startup"));
options.push_back(CLI::Option('y', "window-height", "PIXELS", "window height on startup"));
std::vector<CLI::Argument> arguments;
CLI::ArgumentsParser cliParser = CLI::ArgumentsParser(argc, argv, flags, options, arguments, "FOSS-VG Client");
@ -96,14 +88,6 @@ int main(int argc, char* argv[]) {
return EXIT_USAGE;
}
if (cliParser.getOption("window-width").errorCode != ErrorCodes::NOT_PRESENT) {
windowWidth = std::stoi(cliParser.getOption("window-width").value);
}
if (cliParser.getOption("window-height").errorCode != ErrorCodes::NOT_PRESENT) {
windowHeight = std::stoi(cliParser.getOption("window-height").value);
}
// TODO: Find a better place for this
// Ideally, the window management and rendering portion of FOSS-VG should
@ -115,11 +99,9 @@ int main(int argc, char* argv[]) {
return EXIT_RUNTIME;
}
// do not create OpenGL context
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
//TODO: allow to set startup window size using CLI options
uint32_t windowWidth = 1366;
uint32_t windowHeight = 768;
//TODO: add a version macro
// (for example Git commit hash passed on the compiler command line)
std::string windowTitle = "FOSS-VG";
@ -131,6 +113,9 @@ int main(int argc, char* argv[]) {
return EXIT_RUNTIME;
}
// What dis do? It was in a tutorial.
glfwMakeContextCurrent(window);
glfwSetCursorPosCallback(window, cursorPositionCallback);
glfwSetKeyCallback(window, keyCallback);
glfwSetCharCallback(window, textInputCallback);
@ -139,10 +124,12 @@ int main(int argc, char* argv[]) {
glfwSetScrollCallback(window, scrollCallback);
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
}

View File

@ -17,11 +17,6 @@
#include <cstdint>
//TODO: needed macros:
// TRY: takes a variable, a function call, and the ErrorOr return type of the calling function - intended to automatically unwrap the ErrorOr data type or propagate the error upwards
// RAISE: takes an error code and optionally a message to produce something like `return ErrorOr<T>(true, errorCode, file, lineNumber, message)`
template <typename T>
struct ErrorOr {
bool isError;
@ -105,9 +100,6 @@ namespace ErrorCodes {
// when too much data is available
const uint8_t OVERFLOW = 13;
const uint8_t COMPRESSION = 14;
const uint8_t DECOMPRESSION = 15;
const uint8_t UNIMPLEMENTED = 254;
const uint8_t UNKNOWN = 255;

View File

View File

@ -1,103 +0,0 @@
#pragma once
#include <cstdint>
namespace block {
// For internal use only. These are examples, we will probably need
// a different way of assigning IDs in the future but a list should
// be fine for now, I guess.
// I dont know how Minecraft assigns its IDs or if it even matters
// given that it has used string IDs for a while now. We just need an
// internal way to distinguish between classes.
namespace ids {
const uint16_t AIR = 0;
const uint16_t STONE = 1;
}
// These are intended to be combined using bitwise OR.
namespace collisionBehavior {
// Let the block handle it.
// A function on the relevant block class will deal with it.
const uint8_t UNKNOWN = 0b00000000;
// Collision box inhibits movement?
// (stone or stone slab)
const uint8_t SOLID = 0b00000001;
// Does collision box fill entire block?
// (stone or grass block)
//
// The shape of the collision box is part of the relevant block class
// when this bit is unset.
const uint8_t FULL_BLOCK = 0b00000010;
const uint8_t SOLID_FULL_BLOCK = SOLID | FULL_BLOCK;
// Slow down entities when inside the block?
// (vines or soulsand)
//
// Entities are considered to be inside a given block when rounding
// their coordinates results in the coordinates of the block.
//
// The amount of slowdown is controlled by a function on the relevant
// block class.
const uint8_t SLOWDOWN = 0b00000100;
// Slow down entities when touching the collision box of the block?
// (honey block)
//
// The amount of slowdown is controlled by a function on the relevant
// block class.
const uint8_t SURFACE_SLOWDOWN = 0b00001000;
// Deal damage when entities are inside it?
// (berry bush)
//
// Entities are considered to be inside a given block when rounding
// their coordinates results in the coordinates of the block.
//
// The amount of damage is controlled by a function on the relevant
// block class.
const uint8_t DAMAGE = 0b00010000;
// Deal damage when entities touch the collision box?
// (magma block)
//
// The amount of damage is controlled by a function on the relevant
// block class.
const uint8_t SURFACE_DAMAGE = 0b00010000;
// Is the block bouncy?
// (bed or slime block)
//
// The bounciness of the block is handled by the relevant block class.
const uint8_t BOUNCY = 0b00100000;
}
class Generic {
private:
public:
virtual uint16_t id() = 0;
virtual uint8_t collisionBehavior() = 0;
//TODO: (not pure) virtual functions for collision box, slowdown, damage, bounciness, etc.
//TODO: (not pure) virtual function for hitbox (defaults to full block)
}
class Air {
public:
uint16_t id() {
return ids::AIR;
}
uint8_t collisionBehavior() {
// is a full block but doesn't collide or anything else
return collisionBehavior::FULL_BLOCK;
}
}
BlockGeneric* getNewBlockFromID(uint16_t id) {
//TODO
}
}

View File

@ -1311,8 +1311,7 @@ namespace NBT {
goto returnError;
}
contents.push_back(new Tag::Int8Array("", nextArray.value));
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() + 4;
*processedDataSize += (uint64_t) nextArray.value.size();
}
break;
}
@ -1371,8 +1370,7 @@ namespace NBT {
goto returnError;
}
contents.push_back(new Tag::Int32Array("", nextArray.value));
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() * 4 + 4;
*processedDataSize += (uint64_t) nextArray.value.size() * 4;
}
break;
}
@ -1384,8 +1382,7 @@ namespace NBT {
goto returnError;
}
contents.push_back(new Tag::Int64Array("", nextArray.value));
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() * 8 + 4;
*processedDataSize += (uint64_t) nextArray.value.size() * 8;
}
break;
}
@ -1630,8 +1627,7 @@ namespace NBT {
if (nextArray.isError) {
return false;
}
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() + 4;
*processedDataSize += (uint64_t) nextArray.value.size();
}
return true;
}
@ -1682,8 +1678,7 @@ namespace NBT {
if (nextArray.isError) {
return false;
}
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() * 4 + 4;
*processedDataSize += (uint64_t) nextArray.value.size() * 4;
}
return true;
}
@ -1693,8 +1688,7 @@ namespace NBT {
if (nextArray.isError) {
return false;
}
// +4 for the header of the array
*processedDataSize += (uint64_t) nextArray.value.size() * 8 + 4;
*processedDataSize += (uint64_t) nextArray.value.size() * 8;
}
return true;
}

View File

@ -1,42 +0,0 @@
// Copyright 2022, FOSS-VG Developers and Contributers
//
// Author(s):
// BodgeMaster
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
#pragma once
#include <string>
#include "../error.hpp"
namespace network {
struct Connection {
}
// host could be a hostname or address
ErrorOr<Connection> connect(std::string host);
void disconnect(Connection);
// start listening for incoming connections
ErrorOrVoid startListening();
// stop listening for new incoming connections but keep existing
// connections open
void stopListening();
// stop listening for incoming connections and disconnect all
void stopCommunication();
ErrorOr<Connection> acceptNextIncoming();
}

View File

@ -1,16 +0,0 @@
// Copyright 2022, FOSS-VG Developers and Contributers
//
// Author(s):
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html

View File

@ -1,17 +0,0 @@
// Copyright 2023, FOSS-VG Developers and Contributers
//
// Author(s):
// BodgeMaster
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html

View File

@ -1,57 +0,0 @@
// Copyright 2023, FOSS-VG Developers and Contributers
//
// Author(s):
// BodgeMaster
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
// File structure:
// 4K table of uint32_t: pointing to chunks
// -> 24bit offset, 8 bit length
// -> both offset and length are multiplied by 4096 to get the real value
// -> lowest valid offset = 2
// -> chunk is not present if pointer=0
// -> chunk calculation: ((x % 32) + (z % 32) * 32) * 4
// -> what about negative chunks?
// 4k table of uint32_t: last modified timestamps
// individual chunks
// -> 5 byte header
// -> 4 byte length
// -> 1 byte compression type: 0?? 1->gzip 2->zlib
// -> extension idea: support for other compression algorithms
// - lzma
// - xz
// - lz4
// - zstd
// -> compressed NBT data
#pragma once
#include <cstdint>
class Region {
uint32_t storagePointers[1024];
uint32_t lastModifiedTimestamps[1024];
// Chunk coordinates are uint8_t here bc they are 0<=x<32.
uint32_t* coordsToStoragePointer(uint8_t x, uint8_t z) {
return &storagePointers[z*32 + x];
}
// Chunk coordinates are uint8_t here bc they are 0<=x<32.
uint32_t* coordsToLastModified(uint8_t x, uint8_t z) {
return &lastModifiedTimestamps[z*32 + x];
}
}

View File

@ -1,116 +0,0 @@
// Copyright 2022, FOSS-VG Developers and Contributers
//
// Author(s):
// Jocadbz
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
// includes vector and error.hpp
#include "zlibutil.hpp"
#include <zlib/zlib.h>
#include <cstring>
#define EXIT_SUCCESS 0
#define EXIT_RUNTIME 1
#define EXIT_USAGE 2
#define CHUNK_SIZE 16384 // Chunk size
namespace zlib {
ErrorOr<std::vector<uint8_t>> compressData(std::vector<uint8_t> data) {
// I, too, love the fact that raw bytes are signed and therefore can have negative values. -_-
std::vector<int8_t> signedData = std::vector<int8_t>(data.begin(), data.end());
z_stream zs;
memset(&zs, 0, sizeof(zs));
if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) != Z_OK) {
return ErrorOr<std::vector<uint8_t>>(true, ErrorCodes::COMPRESSION);
//TODO: include error message once implemented
//throw(std::runtime_error("deflateInit failed while compressing."));
}
zs.next_in = reinterpret_cast<Bytef*>(reinterpret_cast<char*>(signedData.data()));
zs.avail_in = signedData.size();
int ret;
char outbuffer[CHUNK_SIZE];
std::vector<char> compressedData;
do {
zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
zs.avail_out = CHUNK_SIZE;
ret = deflate(&zs, Z_FINISH);
if (compressedData.size() < zs.total_out)
compressedData.insert(compressedData.end(), outbuffer, outbuffer + CHUNK_SIZE - zs.avail_out);
} while (ret == Z_OK);
deflateEnd(&zs);
if (ret != Z_STREAM_END) {
return ErrorOr<std::vector<uint8_t>>(true, ErrorCodes::COMPRESSION);
//TODO: include error message once implemented
//throw(std::runtime_error("Error while compressing: " + std::to_string(ret)));
}
return ErrorOr<std::vector<uint8_t>>(std::vector<uint8_t>(compressedData.begin(), compressedData.end()));
}
ErrorOr<std::vector<uint8_t>> decompressData(std::vector<uint8_t> data) {
// I, too, love the fact that raw bytes are signed and therefore can have negative values. -_-
std::vector<int8_t> signedData = std::vector<int8_t>(data.begin(), data.end());
z_stream zs;
memset(&zs, 0, sizeof(zs));
if (inflateInit(&zs) != Z_OK) {
return ErrorOr<std::vector<uint8_t>>(true, ErrorCodes::DECOMPRESSION);
//TODO: include error message once implemented
//throw(std::runtime_error("inflateInit failed while decompressing."));
}
zs.next_in = reinterpret_cast<Bytef*>(reinterpret_cast<char*>(signedData.data()));
zs.avail_in = signedData.size();
int ret;
char outbuffer[CHUNK_SIZE];
std::vector<char> decompressedData;
do {
zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
zs.avail_out = CHUNK_SIZE;
ret = inflate(&zs, 0);
if (decompressedData.size() < zs.total_out)
decompressedData.insert(decompressedData.end(), outbuffer, outbuffer + CHUNK_SIZE - zs.avail_out);
} while (ret == Z_OK);
inflateEnd(&zs);
if (ret != Z_STREAM_END) {
return ErrorOr<std::vector<uint8_t>>(true, ErrorCodes::DECOMPRESSION);
//TODO: include error message once implemented
//throw(std::runtime_error("Error while decompressing: " + std::to_string(ret)));
}
return ErrorOr<std::vector<uint8_t>>(std::vector<uint8_t>(decompressedData.begin(), decompressedData.end()));
}
}

View File

@ -1,27 +0,0 @@
// Copyright 2024, FOSS-VG Developers and Contributers
//
// Author(s):
// Jocadbz
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
#pragma once
#include <vector>
#include "error.hpp"
namespace zlib {
ErrorOr<std::vector<uint8_t>> compressData(std::vector<uint8_t> data);
ErrorOr<std::vector<uint8_t>> decompressData(std::vector<uint8_t> data);
}

View File

View File

@ -1,155 +0,0 @@
// Copyright 2024, FOSS-VG Developers and Contributers
//
// Author(s):
// Jocadbz
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, version 3.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// version 3 along with this program.
// If not, see https://www.gnu.org/licenses/agpl-3.0.en.html
#include <bitset>
#include <iomanip>
#include <iostream>
#include <vector>
#include <tinyutf8/tinyutf8.h>
#include <zlib/zlib.h>
#include <cstring>
#include <fstream>
#include "../lib/cli.hpp"
#include "../lib/file.hpp"
#include "../lib/zlibutil.hpp"
#include "../lib/error.hpp"
#define EXIT_SUCCESS 0
#define EXIT_RUNTIME 1
#define EXIT_USAGE 2
#define CHUNK_SIZE 16384 // Chunk size
/*
Finally, the main file
*/
int main(int argc, char* argv[]) {
std::vector<CLI::Flag> flags;
flags.push_back(CLI::Flag('d', "decompress", "descompress a file"));
std::vector<CLI::Option> options;
std::vector<CLI::Argument> arguments;
arguments.push_back(CLI::Argument("FILE", "path of the file to compress/decompress"));
CLI::ArgumentsParser cliParser = CLI::ArgumentsParser(argc, argv, flags, options, arguments, "Compress or decompress files using zlib");
if (cliParser.getFlag("help").value) {
std::cout << cliParser.getUsage() << std::endl;
return EXIT_SUCCESS;
}
if (cliParser.getFlag("license").value){
std::cout
<< "Copyright 2022, FOSS-VG Developers and Contributers\n"
<< "\n"
<< "ZlibUtil is part of the FOSS-VG development tool suite.\n"
<< "\n"
<< "This program is free software: you can redistribute it and/or modify it\n"
<< "under the terms of the GNU Affero General Public License as published\n"
<< "by the Free Software Foundation, version 3.\n"
<< "\n"
<< "This program is distributed in the hope that it will be useful,\n"
<< "but WITHOUT ANY WARRANTY; without even the implied\n"
<< "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
<< "See the GNU Affero General Public License for more details.\n"
<< "\n"
<< "You should have received a copy of the GNU Affero General Public License\n"
<< "version 3 along with this program.\n"
<< "If not, see https://www.gnu.org/licenses/agpl-3.0.en.html"
<< std::endl;
return EXIT_SUCCESS;
}
if (cliParser.wrongUsage) {
std::cout << cliParser.getUsage() << std::endl;
return EXIT_USAGE;
}
std::string filename = cliParser.getArgument(0).value;
ErrorOr<File*> filePointer = File::open(filename, 'r');
if (filePointer.isError) {
std::cout << "Failed to open file: " << filename << std::endl;
return EXIT_RUNTIME;
}
File* file = filePointer.value;
File* writeFile;
if (cliParser.getFlag("decompress").value) {
std::vector<uint8_t> bytes = file->read(file->size.value).value;
ErrorOr<std::vector<uint8_t>> decompressed = zlib::decompressData(bytes);
if (decompressed.isError) {
std::cout << "Error: Failed to decompress: " << filename << std::endl;
delete file;
// not cleaning up writeFile here bc it hasn't been created
return EXIT_RUNTIME;
}
std::string outFilename;
if (filename.length() > 3 && filename.rfind(".zz") == filename.length()-3) {
outFilename = filename.substr(0, filename.length()-3);
} else {
outFilename = filename + ".uncompressed";
}
writeFile = File::open(outFilename, 'w').value;
writeFile->write(decompressed.value);
writeFile->close();
} else {
std::vector<uint8_t> bytes = file->read(file->size.value).value;
ErrorOr<std::vector<uint8_t>> compressed = zlib::compressData(bytes);
if (compressed.isError) {
std::cout << "Error: Failed to compress: " << filename << std::endl;
delete file;
// not cleaning up writeFile here bc it hasn't been created
return EXIT_RUNTIME;
}
writeFile = File::open(filename + ".zz", 'w').value;
writeFile->write(compressed.value);
writeFile->close();
}
delete file;
delete writeFile;
}