#! /usr/bin/env python

#                                                                          #
#                         GNAT COMPILER COMPONENTS                         #
#                                                                          #
#                               X S P A C K                                #
#                                                                          #
#           Copyright (C) 2001-2024, Free Software Foundation, Inc.        #
#                                                                          #
# GNAT is free software;  you can  redistribute it  and/or modify it under #
# terms of the  GNU General Public License as published  by the Free Soft- #
# ware  Foundation;  either version 3,  or (at your option) any later ver- #
# sion.  GNAT is distributed in the hope that it will be useful, but WITH- #
# OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY #
# or FITNESS FOR A PARTICULAR PURPOSE.                                     #
#                                                                          #
# As a special exception under Section 7 of GPL version 3, you are granted #
# additional permissions described in the GCC Runtime Library Exception,   #
# version 3.1, as published by the Free Software Foundation.               #
#                                                                          #
# You should have received a copy of the GNU General Public License and    #
# a copy of the GCC Runtime Library Exception along with this program;     #
# see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    #
# <http://www.gnu.org/licenses/>.                                          #
#                                                                          #
# GNAT was originally developed  by the GNAT team at  New York University. #
# Extensive contributions were provided by Ada Core Technologies Inc.      #

# xspack

# Generate s-pack*.{ads,adb} from templates s-pack.ads.tmpl and s-pack.adb.tmpl

tmpl_base = "s-pack.ad%c.tmpl"


def read_template(part):
    return open(tmpl_base % part).readlines()


def output(pkg, bits, part):
    global tmpl

    bits_str_pad = "%02d" % bits
    if bits > 99:
        bits_str_dbl = "1 %d %d" % ((bits / 10) % 10, bits % 10)
    else:
        bits_str_dbl = "%d %d  " % (bits / 10, bits % 10)
    bits_str = "%d" % bits

    out = open(pkg % (bits, part), 'w')
    skip = False

    for line in tmpl[part]:
        if line.find('@even') == 0 and bits % 2 == 1:
            skip = True
        if line.find('@/even') == 0:
            skip = False
        if line[0] != '@' and not skip:
            line = line.replace('@@', bits_str_pad)
            line = line.replace('@ @  ', bits_str_dbl)
            line = line.replace('@', bits_str)
            out.write(line)


parts = ['s', 'b']
tmpl = {}

for part in parts:
    tmpl[part] = read_template(part)

for bits in range(1, 128):
    if bits & (bits - 1) == 0:
        # Power of two: no package generated
        continue

    if bits > 99:
        pkg_base = "s-pack%3d.ad%c"
    else:
        pkg_base = "s-pack%02d.ad%c"

    for part in parts:
        output(pkg_base, bits, part)