Skip to content

Latest commit

 

History

History
54 lines (33 loc) · 1.41 KB

read_record_header.coffee.md

File metadata and controls

54 lines (33 loc) · 1.41 KB

Read record header

File structure

Bytes Type Description
4 ASCII Label (usually matches group label)
4 unsigned integer Size of record
4 - Bit flags
4 unsigned integer Record ID
4 unsigned integer Revision ID
2 unsigned integer Version
2 - -

Library imports

{always, applySpec, compose, ifElse, lte, propSatisfies, slice} = require 'ramda'

Relative imports

buffer_to = require './buffer_to'

Check buffer size

has_byte_length = propSatisfies(lte(24), 'length')

Get values

Plain version of label is buffer.slice(0, 4).toString('ascii').

get_main_values = applySpec
	bytes: always 24
	name: compose(buffer_to.ascii, slice(0, 4))
	value:
		data_bytes: buffer_to.uint32 4
		#flags = buffer.slice 8, 12
		id: buffer_to.uint32 12
		revision: buffer_to.uint32 16
		unknown: buffer_to.uint16 22
		version: buffer_to.uint16 20

Exports

module.exports = ifElse(has_byte_length, get_main_values, always({bytes: 0}))

Links