#!/usr/bin/env python3
# takes a lef file and a y position => obstructs everything above
import re
import os
import sys

ARGV = sys.argv
if len(ARGV) < 5:
    print("Usage " + ARGV[0] + " llx lly urx ury")
    sys.exit(-1)
LLX = float(ARGV[1])
LLY = float(ARGV[2])
URX = float(ARGV[3])
URY = float(ARGV[4])
LAYERS = ["li1", "met1", "met2", "met3", "met4", "met5"]

def print_obs_section():
    for layer in LAYERS:
        print("     LAYER %s ;" %(layer))
        print("       RECT %f %f %s %s ;" % (LLX, LLY, URX, URY))

obs_section = False
for line in sys.stdin:
    if line.isspace():
        continue

    if line.find("OBS") != -1:
        obs_section = True
    elif obs_section and line.find("END") != -1:
        obs_section = False

    # print all except RECTs inside OBS
    if line.find("OBS") != -1:
        print(line, end='')
        print_obs_section()
    elif not obs_section:
        print(line, end='')
