Annotation of micropolis/res/buildidx.tcl, revision 1.1

1.1     ! root        1: #
        !             2: # buildidx.tcl --
        !             3: #
        !             4: # Code to build Tcl package library. Defines the proc `buildpackageindex'.
        !             5: # 
        !             6: #------------------------------------------------------------------------------
        !             7: # Copyright 1992 Karl Lehenbauer and Mark Diekhans.
        !             8: #
        !             9: # Permission to use, copy, modify, and distribute this software and its
        !            10: # documentation for any purpose and without fee is hereby granted, provided
        !            11: # that the above copyright notice appear in all copies.  Karl Lehenbauer and
        !            12: # Mark Diekhans make no representations about the suitability of this
        !            13: # software for any purpose.  It is provided "as is" without express or
        !            14: # implied warranty.
        !            15: #------------------------------------------------------------------------------
        !            16: # $Id: buildidx.tcl,v 2.0 1992/10/16 04:51:38 markd Rel $
        !            17: #------------------------------------------------------------------------------
        !            18: #
        !            19: 
        !            20: proc TCHSH:PutLibLine {outfp package where endwhere autoprocs} {
        !            21:     puts $outfp [concat $package $where [expr {$endwhere - $where - 1}] \
        !            22:                         $autoprocs]
        !            23: }
        !            24: 
        !            25: proc TCLSH:CreateLibIndex {libName} {
        !            26: 
        !            27:     if {[file extension $libName] != ".tlb"} {
        !            28:         error "Package library `$libName' does not have the extension `.tlb'"}
        !            29:     set idxName "[file root $libName].tndx"
        !            30: 
        !            31:     unlink -nocomplain $idxName
        !            32:     set libFH [open $libName r]
        !            33:     set idxFH [open $idxName w]
        !            34: 
        !            35:     set contectHdl [scancontext create]
        !            36: 
        !            37:     scanmatch $contectHdl "^#@package: " {
        !            38:         set size [llength $matchInfo(line)]
        !            39:         if {$size < 2} {
        !            40:             error [format "invalid package header \"%s\"" $matchInfo(line)]
        !            41:         }
        !            42:         if $inPackage {
        !            43:             TCHSH:PutLibLine $idxFH $pkgDefName $pkgDefWhere \
        !            44:                              $matchInfo(offset) $pkgDefProcs
        !            45:         }
        !            46:         set pkgDefName   [lindex $matchInfo(line) 1]
        !            47:         set pkgDefWhere  [tell $matchInfo(handle)]
        !            48:         set pkgDefProcs  [lrange $matchInfo(line) 2 end]
        !            49:         set inPackage 1
        !            50:     }
        !            51: 
        !            52:     scanmatch $contectHdl "^#@packend" {
        !            53:         if !$inPackage {
        !            54:             error "#@packend without #@package in $libName
        !            55:         }
        !            56:         TCHSH:PutLibLine $idxFH $pkgDefName $pkgDefWhere $matchInfo(offset) \
        !            57:                          $pkgDefProcs
        !            58:         set inPackage 0
        !            59:     }
        !            60: 
        !            61:     set inPackage 0
        !            62:     if {[catch {
        !            63:         scanfile $contectHdl $libFH
        !            64:        } msg] != 0} {
        !            65:        global errorInfo errorCode
        !            66:        close libFH
        !            67:        close idxFH
        !            68:        error $msg $errorInfo $errorCode
        !            69:     }
        !            70:     if {![info exists pkgDefName]} {
        !            71:         error "No #@package definitions found in $libName"
        !            72:     }
        !            73:     if $inPackage {
        !            74:         TCHSH:PutLibLine $idxFH $pkgDefName $pkgDefWhere [tell $libFH] \
        !            75:                          $pkgDefProcs
        !            76:     }
        !            77:     close $libFH
        !            78:     close $idxFH
        !            79:     
        !            80:     scancontext delete $contectHdl
        !            81: 
        !            82:     # Set mode and ownership of the index to be the same as the library.
        !            83: 
        !            84:     file stat $libName statInfo
        !            85:     chmod $statInfo(mode) $idxName
        !            86:     chown [list $statInfo(uid) $statInfo(gid)] $idxName
        !            87: 
        !            88: }
        !            89: 
        !            90: proc buildpackageindex {libfile} {
        !            91: 
        !            92:     set status [catch {TCLSH:CreateLibIndex $libfile} errmsg]
        !            93:     if {$status != 0} {
        !            94:         global errorInfo errorCode
        !            95:         error "building package index for `$libfile' failed: $errmsg" \
        !            96:               $errorInfo $errorCode
        !            97:     }
        !            98: }
        !            99: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.