Subversion Repositories Vertical

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#!/usr/local/bin/perl 
2
use Tk;
3
my $mw = MainWindow->new;
4
$mw->Button(  -text=>"Hello" , -command=>sub{exit}  )->grid;
5
$box1 = $mw->Listbox(  -x=>1, -y=>10,-width=>10, -selectmode=>'single' ,-height=>0)->grid;
6
$scr1 = $mw->Scrollbar( -x=>2, -y=>10, -command=>sub{exit})->grid;
7
#$box1->configure(-command=>sub{exit});
8
$box1->insert('end',"dd","eee","ff");
9
$box1->insert('end',"ii","jj","kk");
10
MainLoop;
11
 
12
 
13
exit(0);
14
$home = $ENV{"HOME"};
15
$host = `hostname`;
16
chomp $host;
17
$directory = `pwd`;              
18
chomp $directory;
19
#
20
# discover the pager tool in use 
21
$pager = $ENV{"PAGER"};
22
 
23
 
24
 
25
if (length($pager)== 0 || !-e $pager ) {
26
  $pager = `which cat`;
27
  };
28
 
29
 
30
 
31
# determine install files that need to be copied
32
# tool repository
33
$releases = "/user/mjames/altera_breadboarding/releases";
34
 
35
#where the help file is 
36
$helpfile = "$releases/makeversion.txt";
37
#where the extended help file is 
38
$helpfile_long = "$releases/makeversion_long.txt";
39
 
40
 
41
 
42
#file to edit for version
43
$versionf  = "version.h";
44
$versiont  = "version.h.tmp";
45
 
46
# workout command line options 
47
#is this a query of releases 
48
# COde 0 : query (L option) versions
49
# code 1 : install
50
# code 2 : release
51
# code 3 : help (short)
52
# code 4 : show trial install
53
# code 5 : help (full)
54
 
55
$oper = 3;
56
$relnamegiven = 0;
57
$relname = "Default";
58
for($idx=0;$idx <= $#ARGV;$idx++) {
59
  $item = $ARGV[$idx];
60
  if (length($item)>0) {
61
    if( $item =~ /^-Release/ ) {
62
      print("Release\n");
63
      $oper = 2;
64
 
65
      if (length( $item)>8) {
66
        $relname = substr $item,8;
67
        $relnamegiven = 1;
68
        };
69
      };
70
    if( $item =~ /^-[iI]/ ) {
71
      print("Install\n");
72
      $oper = 1;
73
      if (length($ARGV[0])>2) {
74
        $relname = substr $item,2;
75
        $relnamegiven = 1;
76
        };
77
      };
78
    if( $item =~ /^-[tT]/ ) {
79
      print("Trial Install\n");
80
      $oper = 4;
81
      if (length($ARGV[0])>2) {
82
        $relname = substr $item,2;
83
        $relnamegiven = 1;
84
        };
85
      };
86
    if( $item =~ /^-[lL]/ ) {
87
      print("List releases \n");
88
      $oper = 0;
89
      };
90
    if( $item =~ /^-[hH]/ ) {
91
      print("Extended Help \n");
92
      $oper = 5;
93
      };
94
    if( $item =~ /^-[uU]/ ) {
95
      print("UnInstall\n");
96
      $oper = 6;
97
      if (length($ARGV[0])>2) {
98
        $relname = substr $item,2;
99
        $relnamegiven = 1;
100
        };
101
      };
102
    };
103
  };
104
 
105
 
106
 
107
 
108
if ( ($oper == 3 || $oper == 5) && -e "$helpfile") {
109
#printout of revision number to a suitable pager 
110
    open (IN,"<$helpfile");
111
    open (PAGER, "|$pager");
112
    while (<IN>) {
113
      print PAGER ;
114
      };
115
    close IN;
116
    if ( $oper == 5 && -e "$helpfile_long") {
117
      open (IN,"<$helpfile_long");
118
      while (<IN>) {
119
        print PAGER ;
120
        };
121
      };
122
    close (PAGER);
123
    exit;
124
    };
125
 
126
 
127
 
128
 
129
#make a date etc from it
130
$tim =`date`;
131
chomp $tim;
132
#extract the time field from the date 
133
# Skip 4 read 6 skip 14 read rest chars
134
$tim =~ s/^.{4}(.{6}).{14}(.*)$/$1 $2/;
135
 
136
$tim =~ s/:/_/g;
137
$tim =~ s/ /_/g;
138
 
139
#use release name override for code release
140
if( $oper == 2 && -e $versionf && -e "makefile") {
141
  if(!$relnamegiven ) { $relname = "$tim"; };
142
 
143
# write a new version file 
144
  if ( -e $versiont ) {
145
    unlink( $versiont );
146
    };
147
# Need to have a copy of version.h in this directory and a makefile
148
# with the correct rules in it : make_tail for example 
149
  if (open (IN,"<$versionf") && open (OUT,">$versiont") ) {
150
    while ( <IN> )  {
151
     if ( /^#define RELDATE/ ) {
152
       printf (OUT "\#define RELDATE \"Release $relname\"\n");
153
       }
154
     else {
155
       printf(OUT "$_" ) ;
156
       };
157
     };
158
   close (IN);
159
   close (OUT);
160
   rename $versiont,$versionf;
161
   print("/usr/bin/make rel_tail RELDATE=\"$relname\"\n");
162
   system("/usr/bin/make rel_tail RELDATE=\"$relname\"");
163
  }
164
# create a new version to attach to any of the files that will be built
165
 
166
#this is the release directory where all files and links are to be
167
# installed.
168
  $release_dir = "$releases/$relname";
169
 
170
# Remove any files that are in the directory
171
 
172
  # Make the directory anyway
173
  mkdir $release_dir,0777;
174
  if (! -f "$release_dir/release.ini") {
175
    symlink "$releases/packages.ini","$release_dir/release.ini";
176
    };
177
  $packagefile = "$releases/packages.ini";
178
  }
179
#when creating a release use the parent   
180
 
181
 
182
else {
183
#not Releasing just querying or installing
184
  $release_dir = "$releases/$relname";
185
  $packagefile = "$release_dir/release.ini";
186
  }
187
 
188
 
189
 
190
#if we are querying release files we need to check all of the 
191
#directories in which we may find a release 
192
if ($oper==0) {
193
# startup a pager for any output
194
  open (PAGER, "|$pager");
195
  opendir (RELDIR,"$releases");
196
  $dir = readdir(RELDIR);
197
  while ($dir) {
198
    if( -e "$releases/$dir/release.ini" ) {
199
      printf(PAGER "Release $dir is available\n\n");  
200
 
201
#printout of revision number
202
      if ( -e "$releases/$dir/readme.txt" ) {
203
        open (IN,"$releases/$dir/readme.txt");
204
        while (<IN>) { print PAGER "  ",$_; };
205
        };
206
      };
207
    $dir = readdir(RELDIR);
208
    }
209
  close (PAGER);
210
  }
211
 
212
else {
213
 
214
#sanity check on install
215
  if($oper == 1 || $oper==4 || $oper==6) {
216
    if (!$relnamegiven) {
217
      print "No release name given\n";
218
      exit (1);
219
      };
220
    if (!-e $packagefile ) {
221
      print "Cant use release $relname\n";
222
      exit(1);
223
      };
224
    };
225
 
226
 
227
#setup the mode under which the files will be linked/copied
228
$filemode = 0744;
229
 
230
# set how the file links will be made
231
$lnflags = "-s";
232
 
233
# we have now built the tools in this directory.
234
# read in the base description of the package
235
$fileflag = 0;
236
$oldflag = 0;
237
$forceflag = 0;
238
 
239
 
240
$resp=" ";
241
 
242
if (open (IN,"<$packagefile")) {
243
 
244
  LINE: while ( <IN> )  {
245
    chomp;
246
    if ( /#/ || length() < 2)    {  next LINE; }   ;
247
    if ( /\[sourcedir\]/ ){$oldflag = $fileflag;$fileflag = 1;  next LINE; } ;
248
    if ( /\[destdir\]/ )  {$oldflag   = $fileflag;$fileflag = 5;  next LINE; } ;
249
    if ( /\[messages\]/ ) {$fileflag  = 6;  next LINE; } ;
250
    if ( /\[files\]/ )    {$forceflag = 0; $fileflag = 2;  next LINE; } ;
251
    if ( /\[links\]/ )    {$forceflag = 0; $fileflag = 3;  next LINE; } ;
252
    if ( /\[mode\]/ )     {$oldflag   = $fileflag;$fileflag = 4;  next LINE; } ;
253
    if ( /\[overwrite\]/ ) {$forceflag=1;  next LINE; } ;
254
    if ( /\[query\]/ )     {$forceflag=0;  next LINE; } ;
255
#pickup the file copy source path
256
    if ($fileflag==1)   {
257
      s/\~/$home/g; #expand special char
258
      $compile_dir  = $_ ;
259
      $fileflag=$oldflag;  
260
      next LINE; } ;
261
#these are actual release building flags
262
    if ($fileflag==2 || $fileflag==3 )   {
263
      @file = split ' ';
264
      $destname   = $file[0];
265
      $sourcename = $file[1];
266
# no source name given (only one name on the line)
267
# then source & dest are same name
268
      if ($#file<1) {  # last index is 0 =>less than 2 elements , is one ... 
269
        $sourcename = $destname;
270
        };
271
 
272
 
273
      if ($oper == 1 || $oper ==4 || $oper ==6) { #perfoming an installation from releases
274
        $newname = "$install_dir/$destname";
275
        $oldname = "$release_dir/$sourcename";
276
        $ok = 1;
277
        $exists = -e $newname;
278
        if ( $oper==1 && !$forceflag && $exists   ) { # check for overwrite permision
279
          if ($resp =~ /[aA]/ ) { $resp=" "; }; #if already said 'all' ignore
280
          while ( $resp =~ /[^YyNnAa]/ ) {
281
            print ("\n\aFound file $newname : overwrite ? \n(y/n/a) a=dont ask again:");
282
            $resp = getc;
283
           if ( $resp =~ /\n/ ) { $resp = getc; };
284
            };
285
          if ( $resp =~ /[nN]/ ) {$ok=0;};
286
          };
287
 
288
        if($ok && -e "$oldname") { #an installation linkage 
289
          if ( $oper== 1 ) {
290
            unlink  "$newname";
291
            symlink "$oldname","$newname";  
292
            printf("install %-15s to %s mode %o\n",$sourcename,$newname,$filemode);
293
            }
294
          elsif ($oper==6) { #an uninstall operation
295
            if($exists && $forceflag) {
296
              unlink  "$newname";
297
              printf("uninstall %-15s\n",$newname);
298
              };
299
            }
300
          else {
301
            printf("install %-15s to %s mode %o\n",$sourcename,$newname,$filemode);
302
            }
303
          };
304
        };  
305
 
306
      if ($oper ==2) { #a release copy procedure is being performed
307
        $newname = "$release_dir/$destname";
308
        $oldname = "$compile_dir/$sourcename";
309
 
310
        if ( -d $release_dir) { unlink "$newname"; };
311
        if ($fileflag == 2) { #file copy on release
312
          system ("/usr/bin/cp $oldname $newname\n");
313
          }
314
        else { #file link
315
          system ("/usr/bin/ln $lnflags $oldname $newname\n");
316
          };
317
        chmod $filemode,"$newname";
318
        };
319
      next LINE;
320
      }
321
#pickup file access mode
322
    if ($fileflag==4)   {$filemode  = oct($_) ; $fileflag=$oldflag;  next LINE; } ;
323
#pickup the file installation destination path
324
    if ($fileflag==5)   {
325
      s/\~/$home/g; #expand special char
326
      $install_dir  = $_ ;
327
      $fileflag=$oldflag;  
328
      next LINE; } ;
329
#pickup user message
330
    if ($fileflag==6)   {print("$_\n") ;  next LINE; } ;
331
 
332
 
333
      } ;
334
 
335
  };
336
 };