#!/bin/sh
#| -*- mode: scheme; coding: utf-8; -*- |#
:; exec gosh -- $0 "$@"
(use gauche.sequence)
(use c-wrapper)
(c-load '("gdal/gdal.h" "gdal/ogr_srs_api.h") :libs-cmd "gdal-config --libs")

(define gdal-init
  (let1 called #f
    (lambda()
      (cond [(not called)
             (set! called #t)
             (GDALAllRegister)
             #t]
            [else
             #f]))))

(define-macro (assert e)
  `(when (not ,e)
     (error "assertion failed: " ,(x->string e))))

(define (gdal-open-dataset name)
  (gdal-init)
  (let ((dataset (GDALOpen name GA_Update))) ;; GA_ReadOnly allows vrt write, too!
    (assert (not (null-ptr? dataset)))
    dataset))

(define (main args)
  (let* ((ds (gdal-open-dataset (cadr args)))
         (transform (make (c-array <c-double> 6))))
    (assert (= (GDALGetGeoTransform ds (ptr transform)) CE_None))
    (set! (ref transform 0) (+ (ref transform 0) (x->number (ref args 2))))
    (set! (ref transform 3) (+ (ref transform 3) (x->number (ref args 3 0))))
    (assert (= (GDALSetGeoTransform ds (ptr transform)) CE_None))
    )
  0)
