Patch title: Release 96 bulk changes
Abstract:
File: /pliant/language/data/id.pli
Key:
    Removed line
    Added line
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 2
# as published by the Free Software Foundation.
#
# 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# version 2 along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

module "/pliant/install/ring2.pli"

gvar Str header
gvar Float start
gvar Float stop
gvar Sem sem
gvar Str previous
gvar Int counter

function setup_year
  datetime split (var Int year) (var Int month) (var Int day) (var Int hour) (var Int minute) (var Int second) (var Float fraction)
  header := right (string year-2000 "radix 36") 2 "0"
  start := (datetime year 1 1 0 0 0 0.0):seconds
  stop := (datetime year+1 1 1 0 0 0 0.0):seconds
setup_year
  

function generate_id -> id
  arg Str id
  var DateTime now := datetime
  sem request
  if now:seconds>=stop
    setup_year
  var Int second := cast datetime:seconds-start Int
  id := header+(right (string second "radix 36") 5 "0")
  if id<>previous
    previous := id
    counter := 0
  if counter>0
    var Str extra := string counter "radix 36"
    id += (string extra:len)+extra
  counter += 1
  sem release

export generate_id