|
|
|
@ -1,17 +1,13 @@
|
|
|
|
|
# type: ignore
|
|
|
|
|
|
|
|
|
|
from typing import List, Tuple, Iterable
|
|
|
|
|
from itertools import chain
|
|
|
|
|
from io import BytesIO, BufferedIOBase
|
|
|
|
|
import struct
|
|
|
|
|
|
|
|
|
|
import pytest # type: ignore
|
|
|
|
|
import numpy
|
|
|
|
|
import pytest
|
|
|
|
|
from numpy.testing import assert_equal
|
|
|
|
|
|
|
|
|
|
from .utils import HEADER, FOOTER
|
|
|
|
|
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme
|
|
|
|
|
from ..basic import InvalidRecordError, InvalidDataError
|
|
|
|
|
from ..basic import write_uint, write_sint, write_bstring, write_byte
|
|
|
|
|
from ..basic import InvalidDataError
|
|
|
|
|
from ..main import OasisLayout
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -54,7 +50,6 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
write_uint(buf, 7) # PROPNAME record (implicit id 1)
|
|
|
|
|
write_bstring(buf, b'PROP1')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 14) # CELL record (explicit)
|
|
|
|
|
write_bstring(buf, b'A') # Cell name
|
|
|
|
|
|
|
|
|
@ -74,11 +69,29 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
write_uint(buf, 300) # (repetition) x-spacing
|
|
|
|
|
write_uint(buf, 320) # (repetition) y-spacing
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_0100) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'PROPX')
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 1
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 1) # property value 0 (real type 1, negative int)
|
|
|
|
|
write_uint(buf, 5) # (real 1)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 2
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
@ -90,60 +103,20 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 1) # property value 0 (real type 1, negative int)
|
|
|
|
|
write_uint(buf, 5) # (real 1)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 2
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0100_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (prop value)
|
|
|
|
|
write_uint(buf, 9) # prop value 1 (signed int)
|
|
|
|
|
write_sint(buf, -124) # (prop value)
|
|
|
|
|
write_uint(buf, 10) # prop value 2 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0100_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (prop value)
|
|
|
|
|
write_uint(buf, 9) # prop value 1 (signed int)
|
|
|
|
|
write_sint(buf, -124) # (prop value)
|
|
|
|
|
write_uint(buf, 10) # prop value 2 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE2')
|
|
|
|
|
write_uint(buf, 13) # prop value 3 (propstring ref.)
|
|
|
|
|
write_uint(buf, 13) # prop value 3 (propstring ref.)
|
|
|
|
|
write_uint(buf, 12)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 3
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0000) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 3) # number of values
|
|
|
|
|
write_uint(buf, 0) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (prop value)
|
|
|
|
|
write_uint(buf, 9) # prop value 1 (signed int)
|
|
|
|
|
write_sint(buf, -124) # (prop value)
|
|
|
|
|
write_uint(buf, 14) # prop value 2 (propstring ref.)
|
|
|
|
|
write_uint(buf, 13)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 4
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
@ -154,14 +127,36 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1000) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0000) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 3) # number of values
|
|
|
|
|
write_uint(buf, 0) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (prop value)
|
|
|
|
|
write_uint(buf, 9) # prop value 1 (signed int)
|
|
|
|
|
write_sint(buf, -124) # (prop value)
|
|
|
|
|
write_uint(buf, 14) # prop value 2 (propstring ref.)
|
|
|
|
|
write_uint(buf, 13)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
# RECTANGLE 4
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
var_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1000) # UUUU_VCNS
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
|
|
|
|
|
# TEXT 5
|
|
|
|
|
write_uint(buf, 19) # TEXT record
|
|
|
|
|
var_byte(buf, 0b0101_1011) # 0CNX_YRTL
|
|
|
|
|
var_byte(buf, 0b0101_1011) # 0CNX_YRTL
|
|
|
|
|
write_bstring(buf, b'A') # text-string
|
|
|
|
|
write_uint(buf, 2) # text-layer
|
|
|
|
|
write_uint(buf, 1) # text-datatype
|
|
|
|
@ -173,47 +168,47 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PATH 6
|
|
|
|
|
write_uint(buf, 22) # PATH record
|
|
|
|
|
var_byte(buf, 0b1111_1011) # EWPX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 10) # half-width
|
|
|
|
|
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
|
|
|
|
|
write_sint(buf, 5) # (extension-scheme)
|
|
|
|
|
write_sint(buf, -5) # (extension-scheme)
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 3) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 2000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
write_uint(buf, 22) # PATH record
|
|
|
|
|
var_byte(buf, 0b1111_1011) # EWPX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 10) # half-width
|
|
|
|
|
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
|
|
|
|
|
write_sint(buf, 5) # (extension-scheme)
|
|
|
|
|
write_sint(buf, -5) # (extension-scheme)
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 3) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 2000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# POLYGON 7
|
|
|
|
|
write_uint(buf, 21) # POLYGON record
|
|
|
|
|
var_byte(buf, 0b0011_1011) # 00PX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 4) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, 3000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
write_uint(buf, 21) # POLYGON record
|
|
|
|
|
var_byte(buf, 0b0011_1011) # 00PX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 4) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, 3000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
if include_repetitions:
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 1) # propname id
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 1) # propname id
|
|
|
|
|
|
|
|
|
|
if variant == 5:
|
|
|
|
|
write_uint(buf, 10) # PROPSTRING (explicit id)
|
|
|
|
@ -375,141 +370,141 @@ def write_file_3(buf: BufferedIOBase) -> BufferedIOBase:
|
|
|
|
|
write_uint(buf, 7) # PROPNAME record (implicit id 0)
|
|
|
|
|
write_bstring(buf, b'S_GDS_PROPERTY')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ** CELL **
|
|
|
|
|
write_uint(buf, 14) # CELL record (explicit)
|
|
|
|
|
write_bstring(buf, b'A') # Cell name
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 16) # XYRELATIVE record
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 0
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # property value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # property value 1 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # property value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # property value 1 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE2')
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 1
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 2) # number of values
|
|
|
|
|
write_uint(buf, 8) # property value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 10) # (...)
|
|
|
|
|
write_uint(buf, 14) # property value 1 (prop-string ref.)
|
|
|
|
|
write_uint(buf, 13) # (...)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 2) # number of values
|
|
|
|
|
write_uint(buf, 8) # property value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 10) # (...)
|
|
|
|
|
write_uint(buf, 14) # property value 1 (prop-string ref.)
|
|
|
|
|
write_uint(buf, 13) # (...)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 2
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 3
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 4
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 0) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, 1000) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname id
|
|
|
|
|
write_uint(buf, 8) # prop value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE2') # (...)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
|
|
|
|
|
# TEXT 5
|
|
|
|
|
write_uint(buf, 19) # TEXT record
|
|
|
|
|
write_byte(buf, 0b0101_1011) # 0CNX_YRTL
|
|
|
|
|
write_bstring(buf, b'A') # text-string
|
|
|
|
|
write_uint(buf, 2) # text-layer
|
|
|
|
|
write_uint(buf, 1) # text-datatype
|
|
|
|
|
write_sint(buf, 1000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
write_uint(buf, 19) # TEXT record
|
|
|
|
|
write_byte(buf, 0b0101_1011) # 0CNX_YRTL
|
|
|
|
|
write_bstring(buf, b'A') # text-string
|
|
|
|
|
write_uint(buf, 2) # text-layer
|
|
|
|
|
write_uint(buf, 1) # text-datatype
|
|
|
|
|
write_sint(buf, 1000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PATH 6
|
|
|
|
|
write_uint(buf, 22) # PATH record
|
|
|
|
|
write_uint(buf, 22) # PATH record
|
|
|
|
|
write_byte(buf, 0b1111_1011) # EWPX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 10) # half-width
|
|
|
|
|
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
|
|
|
|
|
write_sint(buf, 5) # (extension-scheme)
|
|
|
|
|
write_sint(buf, -5) # (extension-scheme)
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 3) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 2000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 10) # half-width
|
|
|
|
|
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
|
|
|
|
|
write_sint(buf, 5) # (extension-scheme)
|
|
|
|
|
write_sint(buf, -5) # (extension-scheme)
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 3) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 2000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# POLYGON 7
|
|
|
|
|
write_uint(buf, 21) # POLYGON record
|
|
|
|
|
write_uint(buf, 21) # POLYGON record
|
|
|
|
|
write_byte(buf, 0b0011_1011) # 00PX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 4) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, 3000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 0) # pointlist (1-delta, horiz. first)
|
|
|
|
|
write_uint(buf, 4) # (pointlist) dimension
|
|
|
|
|
write_sint(buf, 150) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, -50) # (pointlist)
|
|
|
|
|
write_sint(buf, 50) # (pointlist)
|
|
|
|
|
write_sint(buf, 3000) # geometry-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # geometry-y (absolute)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
buf.write(FOOTER)
|
|
|
|
|
return buf
|
|
|
|
@ -605,180 +600,180 @@ def write_file_4_6(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
write_bstring(buf, b'A') # Cell name
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 0
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 300) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, -400) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 300) # geometry-x (relative)
|
|
|
|
|
write_sint(buf, -400) # geometry-y (relative)
|
|
|
|
|
|
|
|
|
|
# ** CELL **
|
|
|
|
|
write_uint(buf, 14) # CELL record (explicit)
|
|
|
|
|
write_bstring(buf, b'TOP') # Cell name
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 0
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b1011_0000) # CNXY_RAAF
|
|
|
|
|
write_bstring(buf, b'A') # cell name
|
|
|
|
|
write_sint(buf, -300) # placement-x
|
|
|
|
|
write_sint(buf, 400) # placement-y
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b1011_0000) # CNXY_RAAF
|
|
|
|
|
write_bstring(buf, b'A') # cell name
|
|
|
|
|
write_sint(buf, -300) # placement-x
|
|
|
|
|
write_sint(buf, 400) # placement-y
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE2')
|
|
|
|
|
|
|
|
|
|
if variant == 6:
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 26) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 26) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE26')
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 1
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 0) # placement-x
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 0) # placement-x
|
|
|
|
|
if variant == 4:
|
|
|
|
|
write_sint(buf, 200) # placement-y
|
|
|
|
|
else:
|
|
|
|
|
write_sint(buf, 400) # placement-y
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 2) # number of values
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 10) # (...)
|
|
|
|
|
write_uint(buf, 14) # prop-value 1 (prop-string ref.)
|
|
|
|
|
write_uint(buf, 13) # (...)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b1111_0001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 2) # number of values
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 10) # (...)
|
|
|
|
|
write_uint(buf, 14) # prop-value 1 (prop-string ref.)
|
|
|
|
|
write_uint(buf, 13) # (...)
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 2
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 400) # placement-y
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 400) # placement-y
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 3
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0010_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 300) # placement-x
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0010_0000) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 300) # placement-x
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 4
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_0001) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 700) # placement-x (absolute)
|
|
|
|
|
write_sint(buf, 400) # placement-y (absolute)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_0001) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 700) # placement-x (absolute)
|
|
|
|
|
write_sint(buf, 400) # placement-y (absolute)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0000_1001) # UUUU_VCNS
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 16) # XYRELATIVE record
|
|
|
|
|
write_uint(buf, 16) # XYRELATIVE record
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 5
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0010) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 1000) # placement-y (relative)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0010) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 1000) # placement-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0010_0111) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 0) # propname-id
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 25) # (...)
|
|
|
|
|
write_uint(buf, 10) # prop-value 1 (a-string)
|
|
|
|
|
write_bstring(buf, b'PROP_VALUE2')
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 6
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0011) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 1000) # placement-y (relative)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0001_0011) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 1000) # placement-y (relative)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
write_uint(buf, 15) # XYABSOLUTE record
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 7
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # placement-y (absolute)
|
|
|
|
|
write_uint(buf, 1) # repetition (3x4 matrix)
|
|
|
|
|
write_uint(buf, 1) # (repetition) x-dimension
|
|
|
|
|
write_uint(buf, 2) # (repetition) y-dimension
|
|
|
|
|
write_uint(buf, 300) # (repetition) x-spacing
|
|
|
|
|
write_uint(buf, 300) # (repetition) y-spacing
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x (absolute)
|
|
|
|
|
write_sint(buf, 0) # placement-y (absolute)
|
|
|
|
|
write_uint(buf, 1) # repetition (3x4 matrix)
|
|
|
|
|
write_uint(buf, 1) # (repetition) x-dimension
|
|
|
|
|
write_uint(buf, 2) # (repetition) y-dimension
|
|
|
|
|
write_uint(buf, 300) # (repetition) x-spacing
|
|
|
|
|
write_uint(buf, 300) # (repetition) y-spacing
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 16) # XYRELATIVE record
|
|
|
|
|
write_uint(buf, 16) # XYRELATIVE record
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 8
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 0) # repetition (reuse)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 9
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 2) # repetition (3 cols.)
|
|
|
|
|
write_uint(buf, 1) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 320) # (repetition) offset
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 2) # repetition (3 cols.)
|
|
|
|
|
write_uint(buf, 1) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 320) # (repetition) offset
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 10
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 3) # repetition (4 rows)
|
|
|
|
|
write_uint(buf, 2) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 310) # (repetition) offset
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 3) # repetition (4 rows)
|
|
|
|
|
write_uint(buf, 2) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 310) # (repetition) offset
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 11
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 4) # repetition (4 arbitrary cols.)
|
|
|
|
|
write_uint(buf, 2) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 320) # (repetition)
|
|
|
|
|
write_uint(buf, 330) # (repetition)
|
|
|
|
|
write_uint(buf, 340) # (repetition)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 4) # repetition (4 arbitrary cols.)
|
|
|
|
|
write_uint(buf, 2) # (repetition) dimension
|
|
|
|
|
write_uint(buf, 320) # (repetition)
|
|
|
|
|
write_uint(buf, 330) # (repetition)
|
|
|
|
|
write_uint(buf, 340) # (repetition)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
|
# PLACEMENT 12
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors)
|
|
|
|
|
write_uint(buf, 1) # (repetition) n-dimension
|
|
|
|
|
write_uint(buf, 2) # (repetition) m-dimension
|
|
|
|
|
write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta (310, 320)
|
|
|
|
|
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
|
|
|
|
|
write_byte(buf, 0b0011_1111) # CNXY_RAAF
|
|
|
|
|
write_sint(buf, 2000) # placement-x
|
|
|
|
|
write_sint(buf, 0) # placement-y
|
|
|
|
|
write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors)
|
|
|
|
|
write_uint(buf, 1) # (repetition) n-dimension
|
|
|
|
|
write_uint(buf, 2) # (repetition) m-dimension
|
|
|
|
|
write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta (310, 320)
|
|
|
|
|
write_sint(buf, 320)
|
|
|
|
|
write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-dispalcement g-delta 330/northwest = (-330, 330)
|
|
|
|
|
write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-dispalcement g-delta 330/northwest = (-330, 330)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 29) # PROPERTY (reuse)
|
|
|
|
|
|
|
|
|
@ -937,16 +932,16 @@ def write_file_7_8_9(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
'''
|
|
|
|
|
buf.write(HEADER)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'FileProp1') # property name
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_bstring(buf, b'FileProp1Value')
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_bstring(buf, b'FileProp1Value')
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 8) # PROPNAME record (explicit id)
|
|
|
|
@ -957,70 +952,69 @@ def write_file_7_8_9(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
if variant == 8:
|
|
|
|
|
# Will give an error since the value modal variable is reset by PROPNAME_ID
|
|
|
|
|
write_byte(buf, 0b0001_1110) # UUUU_VCNS
|
|
|
|
|
write_byte(buf, 0b0001_1110) # UUUU_VCNS
|
|
|
|
|
else:
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
if variant != 8:
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 17) # (...)
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 17) # (...)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 10) # PROPSTRING (explicit id)
|
|
|
|
|
write_bstring(buf, b'FileProp2Value')
|
|
|
|
|
write_uint(buf, 12) # id
|
|
|
|
|
|
|
|
|
|
# associated with PROPSTRING?
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
if variant == 9:
|
|
|
|
|
# Will give an error since the value modal variable is unset
|
|
|
|
|
write_byte(buf, 0b0001_1110) # UUUU_VCNS
|
|
|
|
|
write_byte(buf, 0b0001_1110) # UUUU_VCNS
|
|
|
|
|
else:
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
write_byte(buf, 0b0001_0110) # UUUU_VCNS
|
|
|
|
|
write_uint(buf, 13) # prop-name reference
|
|
|
|
|
if variant != 9:
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 42) # (...)
|
|
|
|
|
write_uint(buf, 8) # prop-value 0 (unsigned int)
|
|
|
|
|
write_uint(buf, 42) # (...)
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 3) # CELLNAME record (implicit id 0)
|
|
|
|
|
write_bstring(buf, b'A')
|
|
|
|
|
|
|
|
|
|
# associated with cell A, through CELLNAME # TODO
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp0') # prop name
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp0') # prop name
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_bstring(buf, b'CPValue0')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ** CELL **
|
|
|
|
|
write_uint(buf, 13) # CELL record (name ref.)
|
|
|
|
|
write_uint(buf, 0) # Cell name 0 (XYZ)
|
|
|
|
|
|
|
|
|
|
# associated with cell A
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp1') # prop name
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_0100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp1') # prop name
|
|
|
|
|
write_uint(buf, 10) # prop-value 0 (a-string)
|
|
|
|
|
write_bstring(buf, b'CPValue')
|
|
|
|
|
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_1100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp2') # prop name
|
|
|
|
|
write_uint(buf, 28) # PROPERTY record
|
|
|
|
|
write_byte(buf, 0b0001_1100) # UUUU_VCNS
|
|
|
|
|
write_bstring(buf, b'CellProp2') # prop name
|
|
|
|
|
|
|
|
|
|
# RECTANGLE 0
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 300) # geometry-x
|
|
|
|
|
write_sint(buf, -400) # geometry-y
|
|
|
|
|
write_uint(buf, 20) # RECTANGLE record
|
|
|
|
|
write_byte(buf, 0b0111_1011) # SWHX_YRDL
|
|
|
|
|
write_uint(buf, 1) # layer
|
|
|
|
|
write_uint(buf, 2) # datatype
|
|
|
|
|
write_uint(buf, 100) # width
|
|
|
|
|
write_uint(buf, 200) # height
|
|
|
|
|
write_sint(buf, 300) # geometry-x
|
|
|
|
|
write_sint(buf, -400) # geometry-y
|
|
|
|
|
|
|
|
|
|
buf.write(FOOTER)
|
|
|
|
|
return buf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_file_7() -> None:
|
|
|
|
|
buf = write_file_7_8_9(BytesIO(), 7)
|
|
|
|
|
|
|
|
|
|