Home | History | Annotate | Download | only in geodsp
      1 ## -----------------------------------------------------------------------
      2 ##
      3 ##   Copyright 2011 Gene Cumm
      4 ##
      5 ##   This program is free software; you can redistribute it and/or modify
      6 ##   it under the terms of the GNU General Public License as published by
      7 ##   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
      8 ##   Boston MA 02111-1307, USA; either version 2 of the License, or
      9 ##   (at your option) any later version; incorporated herein by reference.
     10 ##
     11 ## -----------------------------------------------------------------------
     12 
     13 ##
     14 ## mk-lba-img.pl
     15 ##
     16 ## Make an image where each sector contains the LBA of the sector with
     17 ## a head of an input file.
     18 ##
     19 
     20 # use bytes;
     21 
     22 use constant SECTOR_SIZE => 512;
     23 use constant LBA_SIZE => 8;
     24 use constant LONG_SIZE => 4;
     25 use constant NUM_SECTORS => (256*63+1);
     26 # use constant NUM_SECTORS => 5;
     27 use constant DEBUG => 1;
     28 
     29 # sub dprint
     30 # {
     31 #     if (DEBUG) {
     32 # 	print($_);
     33 #     }
     34 # }
     35 
     36 ($ifilen, $ofilen) = @ARGV;
     37 
     38 if ((!defined($ifilen)) || ($ifilen eq "-")) {	# 
     39     print(STDERR "Using stdin\n");
     40     $IFILE = STDIN;
     41 } else {
     42     open($IFILE, '<', $ifilen) or die "open:$!";
     43     print(STDERR "Using $ifilen\n");
     44 }
     45 
     46 binmode($ifile);
     47 
     48 if (!defined($ofilen)) {
     49     $OFILE = STDOUT;
     50 } else {
     51     open($OFILE, '>', $ofilen) or die "open:$!";
     52     print(STDERR "Using $ofilen\n");
     53 }
     54 
     55 binmode($OFILE);
     56 
     57 # $pk0 = pack('L', 0);
     58 $n_long = (SECTOR_SIZE/LONG_SIZE);
     59 $n_lba = (SECTOR_SIZE/LBA_SIZE);
     60 
     61 $len=0;
     62 while ( read($IFILE, $ch, 1) ) {
     63     print($OFILE $ch);
     64     $len++;
     65 }
     66 $tail = (SECTOR_SIZE - ($len % SECTOR_SIZE)) % SECTOR_SIZE;
     67 $ch = pack("C", 0);
     68 print("Len: $len\ttail: $tail\n");
     69 for ($i=0; $i<$tail; $i++) {
     70     print($OFILE $ch);
     71 }
     72 
     73 $st = ($len + $tail) / SECTOR_SIZE;
     74 
     75 for ($i=$st; $i<(NUM_SECTORS); $i++) {
     76     @ia = ();
     77     for ($j=0; $j< $n_lba; $j++) {
     78 	push(@ia, $i, 0);
     79     }
     80     @ipk = pack("L[$n_long]", @ia);
     81 	# There is a 64-bit INT conversion but it normally isn't usable
     82 	# on a 32-bit platform
     83     print($OFILE @ipk);	# Gently simulate a 64-bit LBA
     84 }
     85 
     86 if (defined($ifilen) && (!($ifilen eq "-"))) {
     87     close($IFILE);
     88 }
     89 
     90 if (defined($ofilen)) {
     91     close($OFILE);
     92 }
     93 
     94 exit 0;
     95