home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / plugins / resolv / resolv.tcl < prev   
Text File  |  2000-11-02  |  4KB  |  139 lines

  1.  
  2. # Example plugin
  3. #
  4. # Original idea and code by Stew Benedict
  5.  
  6. class nameserversPlugIn {
  7.     inherit basePlugIn
  8.  
  9.     # This variable contains property page
  10.  
  11.     variable nameserversXuiPP
  12.     variable nameserversNodeId
  13.  
  14.     constructor {} {
  15.  
  16.     # Create property page
  17.  
  18.     set nameserversXuiPP [::libgui::createXuiFromFile $::resolv::pp]
  19.     }
  20.     method init { args }
  21.     method fillPropertyPages {}
  22.     method saveNameServerSettings { xuiPropertyPage}
  23.     method _inquiryForRightPaneContent { node }
  24.     method _inquiryForPropertyPages { node }
  25.     method _receivedPropertyPages { node xuiPropertyPages}
  26. }
  27.  
  28.  
  29.  
  30. # args contains the options that are passed to the plugIn at initialization
  31. # time.
  32. #
  33. #  -namespace    contains the name of the name space server
  34.     
  35.  
  36. body nameserversPlugIn::init {args} {
  37.  
  38.     # We are hooking to the root node
  39.     # The ::plugInUtils::addNode syntaxis is the following
  40.     # ::plugInUtils::addNode caller namespace parentNode
  41.     # where
  42.     # caller: Name of the object that is adding the node (the plugIn object)
  43.     # namespace: Namespace where we are adding the node
  44.     # parentNode: Parent node
  45.     #
  46.     # The list of available icons is in view/images.tcl    
  47.  
  48.     array set options $args
  49.     set namespace $options(-namespace)
  50.     set parentNode [[ $namespace getRootNode] getId]
  51.     set nameserversNode [::plugInUtils::addNode $this $namespace $parentNode \
  52.         -classes {nameservers leaf} \
  53.     -openIcon network \
  54.     -closedIcon network \
  55.     -label [mesg::get resolv_nameservers_settings]]
  56.     set nameserversNodeId [$nameserversNode getId]
  57. }
  58.  
  59. body nameserversPlugIn::_inquiryForRightPaneContent { node } {
  60.     global tcl_platform
  61.     set result [mesg::get resolv_nameservers_right_pane]
  62.     if [catch { set inhdl [open /etc/resolv.conf r] } kk] {
  63.     return "<br>Not possible to read /etc/resolv.conf. \
  64.         Error follows:<br><pre> $kk </pre>"
  65.     }
  66.     while { [gets $inhdl buff] >= 0 } {
  67.     append result " <BR><b>$buff</b>"
  68.     }
  69.     close $inhdl
  70.     return $result
  71. }  
  72.  
  73.  
  74. body nameserversPlugIn::_inquiryForPropertyPages  { node } {
  75.     global tcl_platform
  76.     fillPropertyPages
  77.     return $nameserversXuiPP
  78. }      
  79.  
  80.  
  81. body nameserversPlugIn::_receivedPropertyPages { node xuiPropertyPages } {
  82.     set pp [$xuiPropertyPages getComponentByName nameserversPP]
  83.     saveNameServerSettings $pp
  84. }
  85.  
  86. body nameserversPlugIn::saveNameServerSettings { xuiPropertyPage } {
  87.     set domainList [$xuiPropertyPage.domainList getChildren]
  88.     set result {}
  89.     if [llength $domainList] {
  90.     append result "search"
  91.     foreach domain $domainList {
  92.         append result " [$domain getValue]"
  93.     }
  94.     append result \n
  95.     }
  96.     foreach nameserver [$xuiPropertyPage.dnsList getChildren] {
  97.     append result "nameserver [$nameserver getValue]\n"
  98.     }
  99.     set f [open /etc/resolv.conf w]
  100.     puts $f $result
  101.     close $f
  102. }
  103.  
  104. body nameserversPlugIn::fillPropertyPages {} {
  105.  
  106.     # Clear the property pages
  107.  
  108.     $nameserversXuiPP.domainList clear
  109.     $nameserversXuiPP.dnsList clear
  110.  
  111.     # Read the data
  112.     
  113.     set f [open /etc/resolv.conf r]
  114.     set lines [split [read $f] \n]
  115.     foreach line $lines {
  116.  
  117.     #   - For each line, test if comment, nameserver or search
  118.     # Fill the data
  119.     
  120.     set text [string trim $line]
  121.     switch -glob $text {
  122.         #* {
  123.         } search* {
  124.         foreach domain [lrange $text 1 end] {
  125.             set newDomain [$nameserversXuiPP.domainList newChild]
  126.             $newDomain setValue $domain
  127.             $nameserversXuiPP.domainList insertChild $newDomain
  128.         }
  129.         } nameserver* {
  130.         foreach dns [lrange $text 1 end] {
  131.             set newDns [$nameserversXuiPP.dnsList newChild]
  132.             $newDns setValue $dns
  133.             $nameserversXuiPP.dnsList insertChild $newDns
  134.         }
  135.         }
  136.     }
  137.     }
  138. }
  139.