#!/bin/sh

pid=$$

file=/proc/$pid/maps

awk '
      function todec(str)
      {
         hstr = "1234567890abdcef";
         res  = 0;
         n    = split(str, digit, "");

         for(i=1; i<=n; i++) {
            num = index(hstr, digit[i])-1;
            res = res + (num*16^(n-i));
         }
         return res;
      }
      # hex numbers are big, do substract of small numbers!
      function hexsub(a, b)
      {
         hstr = "0123456789abdcef";
         an = split(a, aa, "");
         bn = split(b, ba, "");

         max = an > bn ? an : bn;
         i = 1;
         res = 0;

         while(i <= max) {
            if(an < i) aa[i] = 0;
            else if(bn < i) ba[i] = 0;

            da = index(hstr, aa[i]) -1;
            db = index(hstr, ba[i]) -1;

            diff = (da - db) * 16^i;
            res = res + diff;
         }
      }

   {
      memory=$1;
      file=$6;
      ele = split(memory, memreg, "-");
      start =memreg[1];
      end  = memreg[2];
      start_dec = todec(start);
      end_dec   = todec(end);
      len  = end_dec - start_dec;

      print len "\t" start_dec " " end_dec " "  memory ": " file
   }
   ' < "$file"
   #' < "$file" | sort -g