#! /usr/bin/python

import sys, os, types, string
from _gtk import *
from GDK import *
from GTK import *
from gtk import *
import GtkExtra
import GTK,GDK
import threading
from gnome.ui import *
import time

global clock1
clock1=None
global usermenu
usermenu=None
global user_data
user_data={"":""}
global peng_conf
peng_conf="/etc/Pengaol/PengAol.conf"
global CONNECTED
CONNECTED=0  # are we connected or not
global dia
dia=None
global connb
connb=None
global status_label
status_label=None
global montext
montext=None
global diawin
global diamesg
diawin=None
diamesg=None
global SETUP
SETUP=None
global PHONE
PHONE=None
global PHONE_FILE
PHONE_FILE="/etc/Pengaol/PengNumbers.txt"
global phone_data
phone_data={"555-555-5555":"555-555-5555"}
global phonecombo
phonecombo=None
global phonecombo2
phonecombo2=None
global phonetext
phonetext=None
global combo_entry1
combo_entry1=None
global phone_number
phone_number=""
global phone_sel
phone_sel=None
global usercombo
usercombo=None
global USERP
USERP=None
global user_entry1
global usertext
global passtext
user_entry1=None
usertext=None
passtext=None
global CONNECTING
CONNECTING=0
global STOP_CALLED
STOP_CALLED=0
global setup_hash
setup_hash={}

def addUser(*args):
   global usertext ## set up a global
   addToUserMenu(usertext)

def addToUserMenu(usern,*args):
  global usermenu
  global user_data
  global usercombo
  user_data[str(usern)]=str(usern)
  ul=user_data.keys()
  ul.sort()
  usermenu.set_popdown_strings(ul)
  usercombo.set_popdown_strings(ul)
  usercombo.show_all()
  usermenu.show_all()

def delFromUserMenu(usern,*args):
   global usermenu
   global user_data
   global usercombo
   try:
     ul=user_data.keys()
     ul.sort()
     usermenu.set_popdown_strings(ul)
     usercombo.set_popdown_strings(ul)
     del user_data[str(usern)]
   except:
     pass
   usermenu.show_all()
   usercombo.show_all()

def setNumber(*args):
   global  phone_sel
   global phone_number
   phone_number=phone_sel.get_text().strip()
   global phonetext
   phonetext.set_text(phone_number)
   addNumber()
   

def addNumber(*args):
   global phone_data
   global phonecombo
   global phonecombo2
   global phonetext
   numb=str(phonetext.get_text()).strip()
   phone_data[numb]=numb
   phonecombo.set_popdown_strings(phone_data.keys())
   phonecombo.show_all()
   phonecombo2.set_popdown_strings(phone_data.keys())
   phonecombo2.show_all()

def delNumber(*args):
   global phone_data
   global phonecombo
   global phonetext
   global phonecombo2
   global combo_entry1
   numb=str(combo_entry1.get_text()).strip()
   try:
     del phone_data[numb]
   except:
     pass
   phonecombo.set_popdown_strings(phone_data.keys())
   phonecombo.show_all()
   phonecombo2.set_popdown_strings(phone_data.keys())
   phonecombo2.show_all()



def stopClock(*args):
  global clock1
  clock1.stop()
  clock1.set_seconds(0)
  clock1.set_text("00:00:00")

def startClock(*args):
  global clock1
  showStatus("Connected")
  clock1.start()

def showStatus(status1="DISCONNECTED",*args):
  global status_label
  global connb
  if status_label:
    status_label.set_text(str(status1).strip())
    connb.show_all()

def showMonitor(mon_stat="",*args):
   global montext
   montext.insert_defaults("\n"+str(mon_stat))

def clearMonitor(*args):
  global montext
  try:
    montext.delete_text(0,montext.get_length())
    montext.delete_text(0,montext.get_length()+1)
  except:
    pass

class window1:
    def __init__ (self) :
	window1 = GtkWindow (GTK.WINDOW_TOPLEVEL)
	self._root = window1
        self._top = window1
        global clock1
        global usermenu
        global connb
        global status_label
        global montext
	window1.realize()
	window1.set_title ("GtkPengAOL")
	window1.set_position (GTK.WIN_POS_NONE)
	self.window1 = window1
	hpaned1 = GtkHPaned ()
        window1.set_usize(438,220)
	hpaned1.set_position (300)
	self.hpaned1 = hpaned1
	vbox2 = GtkVBox (0, 0)
	self.vbox2 = vbox2
	progtitle = GtkLabel ("GtkPengAOL")
	progtitle.set_usize (-2, 27)
	self.progtitle = progtitle
	vbox2.pack_start (progtitle, 1, 1, 6)

	usermenu = GtkCombo()
	usermenu.set_border_width (7)
	usermenu.set_usize (34, 38)
	self.usermenu = usermenu
	usermenu.children()[0].set_editable ( 0)
	vbox2.pack_start (usermenu, 0, 0, 0)
	vbox3 = GtkVBox(0, 0)
	self.vbox3 = vbox3
	connb = GtkButton("Sign On")
	connb.set_border_width (6)
	connb.set_usize (29, 48)
        connb.connect("clicked",checkConnect)
	self.connb = connb
	vbox3.pack_start (connb, 0, 0, 10)
	botbox = GtkVBox (0, 0)
	self.botbox = botbox
	clock1 = GtkClock (0)
        clock1.set_format("%H:%M:%S")
        clock1.set_update_interval(1)
	self.clock1 = clock1
	botbox.pack_start (clock1, 0, 0, 2)
	hseparator1 = GtkHSeparator()
	self.hseparator1 = hseparator1
	botbox.pack_start ( hseparator1, 1, 1, 0)
	buttbox = GtkHBox (0, 0)
	self.buttbox = buttbox
	userb = GtkButton("Users")
	self.userb = userb
        userb.connect("clicked",doUser)
	buttbox.pack_start (userb, 1, 1, 0)
	phoneb =GtkButton ("Numbers")
	self.phoneb = phoneb
	buttbox.pack_start (phoneb, 1, 1, 0)
        phoneb.connect("clicked",doPhone)

	setupb =GtkButton ("Setup")
	self.setupb = setupb
	buttbox.pack_start (setupb, 1, 1, 0)
        setupb.connect("clicked",doSetup)

	resetb =GtkButton ("Reset Modem")
	self.resetb = resetb
	buttbox.pack_start (resetb, 1, 1, 0)
        resetb.connect("clicked",resetModem)
	vseparator1 = GtkVSeparator ()
	self.vseparator1 = vseparator1
	buttbox.pack_start (vseparator1, 1, 1, 3)
	aboutb = GtkButton("About")
        aboutb.connect("clicked",doAbout)
	self.aboutb = aboutb
	buttbox.pack_start (aboutb, 1, 1, 0)
	exitb = GtkButton("Quit")
	exitb.set_usize (31, -2)
        exitb.connect("clicked",askToQuit)
	self.exitb = exitb
	buttbox.pack_start (exitb, 1, 1, 4)
	botbox.pack_start( buttbox, 1, 1, 0)
	hseparator2 = GtkHSeparator ()
	self.hseparator2 = hseparator2
	botbox.pack_start (hseparator2, 1, 1, 0)
	vbox3.pack_start (botbox, 1, 1, 0)
	vbox2.pack_start (vbox3, 1, 1, 0)
	hpaned1.add(vbox2)
	window1.add(hpaned1)
	scrolledwindow1 = GtkScrolledWindow()
	self.scrolledwindow1 = scrolledwindow1
	montext = GtkText ()
	montext.set_editable (1)
	self.montext = montext
	scrolledwindow1.add(montext)
	hpaned1.add(scrolledwindow1)
	window1.add(hpaned1)
        stopClock()
        #addToUserMenu("Whip1472")
        #addToUserMenu("Me")
        status_label=connb.children()[0]
        try:
          ars=["","/etc/Pengaol/"]
          os.spawnvp(os.P_NOWAIT,"mkdir",args)
        except:
          pass
        loadConfig()
	window1.show_all()
        window1.set_usize(438,218)


def doUser(*args):
   global USERP
   USERP.show()
   return TRUE

def doPhone(*args):
   global PHONE
   PHONE.show()
   return TRUE

def doSetup(*args):
   global SETUP
   loadConfig()
   SETUP.show()
   return TRUE

def hideSetup(*args):
   global SETUP
   SETUP.hide()
   return TRUE

def hideUser(*args):
   global USERP
   USERP.hide()
   return TRUE

def writeConfig(*args):
   hideSetup()
   savePeng()
   setNumber()
   saveNumbers()


def loadConfig(*args):
  global peng_conf
  loadNumbers()  
  loadUserNames()
  loadPeng()

def loadPeng(*args):
  global peng_conf
  global setup_hash
  try:
    f=open(peng_conf,"r")
    pdata=f.read()
    f.close()
    lines=pdata.split("\n")
    for l in lines:
      lin=l.strip()
      if lin:
       if not lin.startswith("#"):
        if lin.find("=") > 1:
          parts=lin.split("=")
          if len(parts) > 1:
            part_id=parts[0].strip()
            part_val=parts[1].strip()
            if setup_hash.has_key(part_id):
              pwidget=setup_hash[part_id]
              pwidget.set_text(part_val)
  except:
    pass


def savePeng(*args):
 try:

  global peng_conf
  pengf=open(peng_conf,"w")
  pengf.write("#Pengaol Config File\n#--------------\n\n[Loader]\n#Author: birdy57 \n#Msg: Vers 0.5 Linux \n#GUID: 4400 \n")
  pengf.write("DriverIn="+setup_hash["DriverIn"].get_text().strip()+"\nDriverOut="+setup_hash["DriverOut"].get_text().strip()+"\nUseAnotherDNS="+setup_hash["UseAnotherDNS"].get_text().strip()+"\nStartAtConnection="+setup_hash["StartAtConnection"].get_text().strip()+"\n\n")

  pengf.flush()

  pengf.write("[CPppDriver]\n#Author: Birdy57\n#Msg: Vers 0.55 Linux\n#GUID: 3812\n\n[CTunTapDriver]\n#Author: birdy57\n#Msg: Vers 0.5 Linux\n#GUID: 4212\n\n[CCableDriver]\n#Author: birdy57 & surfufu\n#Msg: Vers 0.5 Multi \n#GUID: 8301\n")

  pengf.write("FullDuplex="+setup_hash["FullDuplex"].get_text().strip()+"\nHost="+setup_hash["Host"].get_text().strip()+"\nPort="+setup_hash["Port"].get_text().strip()+"\nDevice="+setup_hash["Device"].get_text().strip()+"\n\n[CModemDriver]\n#Author: Birdy57 \n#Msg: Vers 0.5 Linux \n#GUID: 1711 \n")

  pengf.flush()

  pengf.write("FullDuplex="+setup_hash["FullDuplex2"].get_text().strip()+"\nDeviceModem="+setup_hash["DeviceModem"].get_text().strip()+"\nInitStr1="+setup_hash["InitStr1"].get_text().strip()+"\nInitStr2="+setup_hash["InitStr2"].get_text().strip()+"\nPhoneNbr="+setup_hash["PhoneNbr"].get_text().strip()+"\nModemSpeed="+setup_hash["ModemSpeed"].get_text().strip()+"\nDialCommand="+setup_hash["DialCommand"].get_text().strip()+"\nCheckString="+setup_hash["CheckString"].get_text().strip()+"\nForceDetect="+setup_hash["ForceDetect"].get_text().strip()+"\nAutoDetected="+setup_hash["AutoDetected"].get_text().strip()+"\nDialAt9600baud="+setup_hash["DialAt9600baud"].get_text().strip()+"\nServerType="+setup_hash["ServerType"].get_text().strip()+"\nServerLogin="+setup_hash["ServerLogin"].get_text().strip()+"\nServerPass="+setup_hash["ServerPass"].get_text().strip()+"\n\n")

  pengf.flush()
  pengf.close()

 except:
  showMessage("Error saving PengAOL configuration: "+str(peng_conf))


def hidedia(*args):
  global diawin
  diawin.hide()
  return TRUE


def restoreit(*args):    
    myconfirm()
    mydialog()
    setupw()
    phonedia()
    USERS()

def hidediac(*args):
  global dia
  dia.hide()
  return TRUE

def askToQuit(*args):
    global dia
    dia.show()
    return TRUE

def loadNumbers(*args):
    global PHONE_FILE
    global phone_data
    try:
      f=open(PHONE_FILE,"r")
      pdata=f.read()
      f.close()
      plist=pdata.split("\n")
      if len(plist):
        phone_data.clear()
        for i in plist:
          if i.strip():
            phone_data[i.strip()]=i.strip()
    except:
      pass
    phonecombo.set_popdown_strings(phone_data.keys())
    phonecombo.show_all()
    phonecombo2.set_popdown_strings(phone_data.keys())
    phonecombo2.show_all()

def saveNumbers(*args):
    global PHONE
    global PHONE_FILE
    global phone_data
    phone_list=phone_data.keys()
    PHONE.hide()
    phone_list.sort()
    try:
      f=open(PHONE_FILE,"w")
      for i in phone_list:
        f.write(""+str(i).strip()+"\n")
      f.flush()
      f.close()
    except:
      showMessage("ERROR: could not write phone numbers file:\n"+PHONE_FILE)

    return TRUE

def loadUserNames(*args):
  lusers=[]
  try:
    y=0
    b=1
    f=os.popen("pengaol -ListUser")
    while b:
      nm=f.readline().strip()
      y=y+1
      if y>40: 
        break
      if nm=="": 
        break
      if not nm.lower().find("load language") > -1:
        lusers.append(nm)
    f.close()
  except:
    pass
  global user_data
  user_data.clear()
  for i in lusers:
    addToUserMenu(i.strip())

def deletePengUser(usern,*args):
  try:
    os.popen("pengaol -DelUser "+str(usern).strip() )
  except:
    pass
  loadUserNames()

def addPengUser(usern, passwd,*args):
  try:
    os.popen("pengaol -AddUser "+str(usern).strip()+" "+str(passwd).strip() )
  except:
    pass
  loadUserNames()


def addUser(*args):
  global passtext
  global usertext
  addPengUser(usertext.get_text(),passtext.get_text())

def delUser(*args):
  global user_entry1
  deletePengUser(user_entry1.get_text())


def mydialog():
	        global diawin
                global diamesg
		diawin = GtkDialog()
		diawin.set_title("GReal")
                diawin.connect('destroy', restoreit)
		vbox = GtkVBox(spacing=5)
		vbox.set_border_width(10)
	        diawin.set_modal (1)
		diawin.vbox.pack_start(vbox)
		vbox.show()

		diamesg = GtkLabel("GReal")
		diamesg.set_alignment(0, 0.5)
		diamesg.set_usize(450, 60)
		vbox.pack_start(diamesg, expand=TRUE)
		diamesg.show()

		button = GtkButton("OK")
		button.connect("clicked", hidedia)
		diawin.action_area.pack_start(button)
		button.set_flags(CAN_DEFAULT)
		button.grab_default()
		button.show()


def myconfirm():
                global dia
		dia = GtkDialog()
		dia.set_title("GReal")
                dia.connect('destroy', restoreit)
		vbox = GtkVBox(spacing=5)
		vbox.set_border_width(10)
	        dia.set_modal (1)
		dia.vbox.pack_start(vbox)
                dia.connect("destroy",restoreit)
		vbox.show()

		mesg = GtkLabel("Are you sure you want to quit GtkPengAOL?")
		mesg.set_alignment(0, 0.5)
		mesg.set_usize(370, 65)
		vbox.pack_start(mesg, expand=TRUE)
		mesg.show()

		button = GtkButton("Yes, QUIT!")
		button.connect("clicked", quit)
		dia.action_area.pack_start(button)
		button.set_flags(CAN_DEFAULT)
		button.grab_default()
		button.show()

		button2 = GtkButton("Cancel")
		button2.connect("clicked", hidediac)
		dia.action_area.pack_start(button2)
		button2.set_flags(CAN_DEFAULT)
		button2.grab_default()
		button2.show()

def showMessage(mess=""):
    global diamesg
    global diawin
    diamesg.set_text(str(mess))
    diawin.show()
    return TRUE


def getSelectedUserName(*args):
   global usermenu
   return usermenu.children()[0].get_text().strip()


def checkConnect(*args):
  global CONNECTED
  global CONNECTING
  if CONNECTED:
    stopPeng()
  else:
    doConnect()

def doConnect(*args):
   startPeng()

def startPeng(*args):
   global CONNECTED
   global CONNECTING
   if not CONNECTED:

     if not getSelectedUserName():
       showMessage("You must select and/or add a User first!\nClick 'Users' to add usernames.")
       return
     showStatus("Starting...")
     clearMonitor()
     showMonitor("Starting PengAOL...")
     CONNECTING=1
     l=["","--foreground=#000000","--background=#FFFFFF","--geometry=70x9","--title=PengAOL","-x","pengaol","-Connect",getSelectedUserName()]
     os.spawnvp(os.P_NOWAIT,"gnome-terminal",l)
     CONNECTED=1
     showStatus("CONNECTED")
     startClock()

   else:
     showMessage("Already connected. Please disconnect first.")

def killPeng(*args):
     #l=["","pengaol"]
     #os.spawnvp(os.P_NOWAIT,"killall",l)
     os.popen("killall pengaol")
     os.popen("killall pengaol")


def stopPeng(*args):
    global peng_pid
    global CONNECTED
    global CONNECTING
    try:
        showStatus("Disconnecting...")
        killPeng()
        showMonitor("Disconnected.")
        stopClock()
        showStatus("Re-Connect")
        CONNECTED=0
    except:
        pass
    CONNECTING=0

def resetModem(*args):
   global CONNECTED
   if not CONNECTED:
     try:
       os.popen("cardctl eject")
       time.sleep(2)
       os.popen("cardctl insert")
       time.sleep(4)
       showMessage("Modem has been successfully reset.")
     except:
       showMessage("Error resetting modem!\nYou may need to reset it manually.")
   else:
     showMessage("Cannot reset the modem while connected to AOL!")

######### ABOUT #############
def doAbout(*args):
        about = GnomeAbout('GtkPengAOL', '0.1a', 'Copyright March 2002', ['PhrozenSmoke (PhrozenSmoke@yahoo.com)'], 'GtkPengAOL","GtkPengAOL v.0.1a\nThis is a very BASIC frontend for Linux users who connect to AOL via the Pengaol program.\nIt should be considered experimental and still incomplete.\nThe focus of GtkPenAOL is making Pengaol easy to configure, while providing a LIGHT-weight GUI.\nIt still uses a terminal, but allows the user to easily swap numbers and adjust configurations.\nI am not sure if I will be continuing work on this program, as it already suits my needs.\nIf you need a more feature-rich frontend, you might want to download and compile the official GUI frontend available at www.pengaol.org.\n\n NOTE: The *Reset-Modem* function is only intended for PC CARDS!\n\nWritten: March 2002\nBy: PhrozenSmoke@yahoo.com\n\nThis software comes with NO WARRANTY whatsoever.\n\nLicense: Open Source, free for non-commercial use.  Please leave these credits intact. \n\nThis program and its source may be freely modified and redistributed for non-commercial,  non-profit use only. \n\nThis program requires Python, PyGTK, and PyGnome. Tested only on: Mandrake 8.1, Kernel 2.4.8, Glibc 2.2, Python 2.2, PyGTK 0.6.9, PyGnome 1.4.2, Gtk 1.2.8.-4, and Pengaol 0.9.6')

        about.set_default_size(300,500)
        about.connect('destroy', about.destroy)
        about.show()

########### SUPPLEMENTARY WINDOWS #############

class setupw  :
    def __init__ (self) :
        global SETUP
	setupw = GtkWindow (GTK.WINDOW_TOPLEVEL)
	self._root = setupw
        global phone_data
        global phonecombo2
        global setup_hash
        setup_hash.clear()
	self._top = setupw
	setupw.realize (setupw)
	setupw.set_title ("GtkPengAOL Setup")
	setupw.set_position (GTK.WIN_POS_CENTER)
	setupw.set_modal (1)
        setupw.connect("destroy",restoreit)
	self.setupw = setupw
        SETUP=self.setupw
	vbox1 = GtkVBox (0, 0)
	self.vbox1 = vbox1
	progtitle = GtkLabel ("GtkPengAOL Setup")
	self.progtitle = progtitle
	vbox1.pack_start ( progtitle, 0, 0, 0)
	table1 = GtkTable (25, 2, 0)
	table1.set_border_width (6)
	self.table1 = table1
	hseparator1 = GtkHSeparator ()
	self.hseparator1 = hseparator1
	table1.attach (hseparator1, 0, 1, 0, 1, (GTK.EXPAND+GTK.FILL), (GTK.EXPAND+GTK.FILL), 0, 0)
	label6 = GtkLabel ("CCableDriver")
	label6.set_alignment (0, 0.5)
	self.label6 = label6
	table1.attach (label6, 1, 2, 15, 16, (GTK.FILL), (0), 3, 0)
	hseparator2 = GtkHSeparator ()
	self.hseparator2 = hseparator2
	table1.attach (hseparator2, 0, 1, 15, 16, (GTK.FILL), (GTK.FILL), 0, 0)
	hseparator3 = GtkHSeparator ()
	self.hseparator3 = hseparator3
	table1.attach (hseparator3, 0, 1, 20, 21, (GTK.FILL), (GTK.FILL), 0, 0)
	label5 = GtkLabel ("Miscellaneous")
	label5.set_alignment ( 0, 0.5)
	self.label5 = label5
	table1.attach (label5, 1, 2, 20, 21, (GTK.FILL), (0), 3, 0)
	label7 = GtkLabel ("DriverIn")
	label7.set_alignment ( 0, 0.5)
	self.label7 = label7
	table1.attach (label7, 0, 1, 21, 22, (GTK.FILL), (0), 0, 0)
	label8 = GtkLabel ("DriverOut")
	label8.set_alignment (0, 0.5)
	self.label8 = label8
	table1.attach (label8, 0, 1, 22, 23, (GTK.FILL), (0), 0, 0)
	label9 = GtkLabel ("UseAnotherDNS")
	label9.set_alignment ( 0, 0.5)
	self.label9 = label9
	table1.attach (label9, 0, 1, 23, 24, (GTK.FILL), (0), 0, 0)
	label10 = GtkLabel ("StartAtConnection")
	label10.set_alignment (0, 0.5)
	self.label10 = label10
	table1.attach (label10, 0, 1, 24, 25, (GTK.FILL), (0), 0, 0)
	DriverIntext = GtkEntry ()
	DriverIntext.set_text( 'Auto')
	self.DriverIntext = DriverIntext
	table1.attach (DriverIntext, 1, 2, 21, 22, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	DriverOuttext = GtkEntry ()
	DriverOuttext.set_text( 'Auto')
	self.DriverOuttext = DriverOuttext
	table1.attach (DriverOuttext, 1, 2, 22, 23, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	UseAnotherDNStext = GtkEntry ()
	UseAnotherDNStext.set_text( 'Yes')
	self.UseAnotherDNStext = UseAnotherDNStext
	table1.attach (UseAnotherDNStext, 1, 2, 23, 24, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	StartAtConnectiontext = GtkEntry ()
	StartAtConnectiontext.set_text( 'None')
	self.StartAtConnectiontext = StartAtConnectiontext
	table1.attach (StartAtConnectiontext, 1, 2, 24, 25, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	DeviceModemtext = GtkEntry ()
	DeviceModemtext.set_text( 'Auto')
	self.DeviceModemtext = DeviceModemtext
	table1.attach (DeviceModemtext, 1, 2, 2, 3, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	InitStr1text = GtkEntry ()
	InitStr1text.set_text( 'ATZ')
	self.InitStr1text = InitStr1text
	table1.attach (InitStr1text, 1, 2, 3, 4, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	InitStr2text = GtkEntry ()
	InitStr2text.set_text( 'ATM1L1')
	self.InitStr2text = InitStr2text
	table1.attach (InitStr2text, 1, 2, 4, 5, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	ModemSpeedtext = GtkEntry ()
	ModemSpeedtext.set_text( 'Auto')
	self.ModemSpeedtext = ModemSpeedtext
	table1.attach (ModemSpeedtext, 1, 2, 6, 7, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	DialCommandtext = GtkEntry ()
	DialCommandtext.set_text( 'ATDT')
	self.DialCommandtext = DialCommandtext
	table1.attach (DialCommandtext, 1, 2, 7, 8, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	CheckStringtext = GtkEntry ()
	CheckStringtext.set_text( 'AT')
	self.CheckStringtext = CheckStringtext
	table1.attach (CheckStringtext, 1, 2, 8, 9, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	ForceDetecttext = GtkEntry ()
	ForceDetecttext.set_text( 'No')
	self.ForceDetecttext = ForceDetecttext
	table1.attach (ForceDetecttext, 1, 2, 9, 10, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	AutoDetectedtext = GtkEntry ()
	AutoDetectedtext.set_text( '/dev/modem')
	self.AutoDetectedtext = AutoDetectedtext
	table1.attach (AutoDetectedtext, 1, 2, 10, 11, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	DialAt9600baudtext = GtkEntry ()
	DialAt9600baudtext.set_text( 'No')
	self.DialAt9600baudtext = DialAt9600baudtext
	table1.attach (DialAt9600baudtext, 1, 2, 11, 12, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	ServerTypetext = GtkEntry ()
	ServerTypetext.set_text( 'French')
	self.ServerTypetext = ServerTypetext
	table1.attach (ServerTypetext, 1, 2, 12, 13, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	ServerLogintext = GtkEntry ()
	ServerLogintext.set_text( 'Auto')
	self.ServerLogintext = ServerLogintext
	table1.attach (ServerLogintext, 1, 2, 13, 14, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	ServerPasstext = GtkEntry ()
	ServerPasstext.set_text( 'Auto')
	self.ServerPasstext = ServerPasstext
	table1.attach (ServerPasstext, 1, 2, 14, 15, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	FullDuplex2text = GtkEntry ()
	FullDuplex2text.set_text( 'No')
	self.FullDuplex2text = FullDuplex2text
	table1.attach (FullDuplex2text, 1, 2, 16, 17, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	Hosttext = GtkEntry ()
	Hosttext.set_text( 'americaonline.aol.com')
	self.Hosttext = Hosttext
	table1.attach (Hosttext, 1, 2, 17, 18, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	Porttext = GtkEntry ()
	Porttext.set_text( '5190')
	self.Porttext = Porttext
	table1.attach (Porttext, 1, 2, 18, 19, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	Devicetext = GtkEntry ()
	Devicetext.set_text( 'eth0')
	self.Devicetext = Devicetext
	table1.attach (Devicetext, 1, 2, 19, 20, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	label11 = GtkLabel ("FullDuplex")
	label11.set_alignment (0, 0.5)
	self.label11 = label11
	table1.attach (label11, 0, 1, 16, 17, (GTK.FILL), (0), 0, 0)
	label12 = GtkLabel ("Host")
	label12.set_alignment (0, 0.5)
	self.label12 = label12
	table1.attach (label12, 0, 1, 17, 18, (GTK.FILL), (0), 0, 0)
	label13 = GtkLabel ("Port")
	label13.set_alignment (0, 0.5)
	self.label13 = label13
	table1.attach (label13, 0, 1, 18, 19, (GTK.FILL), (0), 0, 0)
	label14 = GtkLabel ("Device")
	label14.set_alignment ( 0, 0.5)
	self.label14 = label14
	table1.attach (label14, 0, 1, 19, 20, (GTK.FILL), (0), 0, 0)
	label15 = GtkLabel ("FullDuplex")
	label15.set_alignment (0, 0.5)
	self.label15 = label15
	table1.attach (label15, 0, 1, 1, 2, (GTK.FILL), (0), 0, 0)
	label16 = GtkLabel ("DeviceModem")
	label16.set_alignment (0, 0.5)
	self.label16 = label16
	table1.attach (label16, 0, 1, 2, 3, (GTK.FILL), (0), 0, 0)
	label17 = GtkLabel ("InitStr1")
	label17.set_alignment (0, 0.5)
	self.label17 = label17
	table1.attach (label17, 0, 1, 3, 4, (GTK.FILL), (0), 0, 0)
	label18 = GtkLabel ("InitStr2")
	label18.set_alignment ( 0, 0.5)
	self.label18 = label18
	table1.attach (label18, 0, 1, 4, 5, (GTK.FILL), (0), 0, 0)
	label19 = GtkLabel ("PhoneNbr")
	label19.set_alignment ( 0, 0.5)
	self.label19 = label19
	table1.attach (label19, 0, 1, 5, 6, (GTK.FILL), (0), 0, 0)
	label20 = GtkLabel ("ModemSpeed")
	label20.set_alignment (0, 0.5)
	self.label20 = label20
	table1.attach (label20, 0, 1, 6, 7, (GTK.FILL), (0), 0, 0)
	label21 = GtkLabel ("DialCommand")
	label21.set_alignment (0, 0.5)
	self.label21 = label21
	table1.attach (label21, 0, 1, 7, 8, (GTK.FILL), (0), 0, 0)
	label22 = GtkLabel ("CheckString")
	label22.set_alignment (0, 0.5)
	self.label22 = label22
	table1.attach (label22, 0, 1, 8, 9, (GTK.FILL), (0), 0, 0)
	label23 = GtkLabel ("ForceDetect")
	label23.set_alignment (0, 0.5)
	self.label23 = label23
	table1.attach (label23, 0, 1, 9, 10, (GTK.FILL), (0), 0, 0)
	label24 = GtkLabel ("AutoDetected")
	label24.set_alignment (0, 0.5)
	self.label24 = label24
	table1.attach (label24, 0, 1, 10, 11, (GTK.FILL), (0), 0, 0)
	label25 = GtkLabel ("DialAt9600baud")
	label25.set_alignment ( 0, 0.5)
	self.label25 = label25
	table1.attach (label25, 0, 1, 11, 12, (GTK.FILL), (0), 0, 0)
	label26 = GtkLabel ("ServerType")
	label26.set_alignment ( 0, 0.5)
	self.label26 = label26
	table1.attach (label26, 0, 1, 12, 13, (GTK.FILL), (0), 0, 0)
	label27 = GtkLabel ("ServerLogin")
	label27.set_alignment ( 0, 0.5)
	self.label27 = label27
	table1.attach (label27, 0, 1, 13, 14, (GTK.FILL), (0), 0, 0)
	label28 = GtkLabel ("ServerPass")
	label28.set_alignment (0, 0.5)
	self.label28 = label28
	table1.attach (label28, 0, 1, 14, 15, (GTK.FILL), (0), 0, 0)
	FullDuplextext = GtkEntry ()
	FullDuplextext.set_text( 'No')
	self.FullDuplextext = FullDuplextext
	table1.attach (FullDuplextext, 1, 2, 1, 2, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	combo1 = GtkCombo ()
        phonecombo2=combo1
	combo1.set_popdown_strings (phone_data.keys())
	self.combo1 = combo1
	combo_entry1 = combo1.children()[0]
	combo_entry1.set_editable ( 0)
        global phone_sel
        phone_sel=combo_entry1
	self.combo_entry1 = combo_entry1
	table1.attach (combo1, 1, 2, 5, 6, (GTK.EXPAND+GTK.FILL), (0), 0, 0)
	label4 = GtkLabel ("CModemDriver")
	label4.set_alignment (0, 0.5)
	self.label4 = label4
	table1.attach (label4, 1, 2, 0, 1, (GTK.FILL), (0), 3, 0)
	vbox1.pack_start ( table1, 1, 1, 2)
	hbox1 = GtkHBox (0, 0)
	self.hbox1 = hbox1
	savebutt = GtkButton ("Save")
	savebutt.set_border_width ( 5)
        savebutt.connect("clicked",writeConfig)
	self.savebutt = savebutt
	hbox1.pack_start ( savebutt, 1, 1, 0)
	cancelbutt = GtkButton ("Cancel")
	cancelbutt.set_border_width ( 5)
        cancelbutt.connect("clicked",hideSetup)
	self.cancelbutt = cancelbutt
	hbox1.pack_start (cancelbutt, 1, 1, 0)
	vbox1.pack_start ( hbox1, 1, 1, 0)
	setupw.add (vbox1)

	setup_hash["DriverIn"]=DriverIntext
	setup_hash["DriverOut"]=DriverOuttext
	setup_hash["UseAnotherDNS"]=UseAnotherDNStext
	setup_hash["StartAtConnection"]=StartAtConnectiontext
	setup_hash["DeviceModem"]=DeviceModemtext
	setup_hash["InitStr1"]=InitStr1text
	setup_hash["InitStr2"]=InitStr2text
	setup_hash["ModemSpeed"]=ModemSpeedtext
	setup_hash["DialCommand"]=DialCommandtext
	setup_hash["CheckString"]=CheckStringtext
	setup_hash["ForceDetect"]=ForceDetecttext
	setup_hash["AutoDetected"]=AutoDetectedtext
	setup_hash["DialAt9600baud"]=DialAt9600baudtext
	setup_hash["ServerType"]=ServerTypetext
	setup_hash["ServerLogin"]=ServerLogintext
	setup_hash["ServerPass"]=ServerPasstext
	setup_hash["FullDuplex2"]=FullDuplex2text 
	setup_hash["Host"]=Hosttext
	setup_hash["Port"]=Porttext
	setup_hash["Device"]=Devicetext
	setup_hash["FullDuplex"]=FullDuplextext
	setup_hash["PhoneNbr"]=combo_entry1

        vbox1.show_all()
	#gtk_widget_show_all (setupw)

##################################

class phonedia :
    def __init__ (self) :
	phonedia = GtkWindow(GTK.WINDOW_TOPLEVEL)
	self._root = phonedia
	self._top = phonedia
        global PHONE
        global phonecombo
        global combo_entry1
        PHONE=phonedia
        global phone_data
	phonedia.realize ()
	phonedia.set_title ("Edit Phone Numbers")
	phonedia.set_position ( GTK.WIN_POS_CENTER)
	phonedia.set_modal ( 1)
        phonedia.connect("destroy",restoreit)
	self.phonedia = phonedia
	vbox3 = GtkVBox (0, 0)
	self.vbox3 = vbox3
	hbox4 = GtkHBox (0, 0)
	self.hbox4 = hbox4
	phonecombo = GtkCombo ()
	phonecombo.set_popdown_strings (phone_data.keys())
	self.phonecombo = phonecombo
	combo_entry1 = phonecombo.children()[0]
	combo_entry1.set_text ( '301-599-6375')
	combo_entry1.set_editable ( 0)
	self.combo_entry1 = combo_entry1
	hbox4.pack_start ( phonecombo, 1, 1, 3)
	vbox4 = GtkVBox (1, 5)
	vbox4.set_border_width ( 11)
	self.vbox4 = vbox4
	delbutt = GtkButton ("Delete")
        delbutt.connect("clicked",delNumber)
	self.delbutt = delbutt
	vbox4.pack_start ( delbutt, 0, 0, 0)
	closebutt = GtkButton("Close")
        closebutt.connect("clicked",saveNumbers)
	self.closebutt = closebutt
	vbox4.pack_start ( closebutt, 0, 0, 0)
	hbox4.pack_start ( vbox4, 1, 1, 0)
	vbox3.pack_start ( hbox4, 1, 1, 0)
	hbox5 = GtkHBox (0, 0)
	hbox5.set_border_width ( 5)
	self.hbox5 = hbox5
	vbox5 = GtkVBox (1, 0)
	self.vbox5 = vbox5
	hbox6 = GtkHBox (0, 0)
	self.hbox6 = hbox6
	phonel = GtkLabel ("Phone Number")
	self.phonel = phonel
	hbox6.pack_start ( phonel, 0, 0, 2)
        global phonetext
	phonetext = GtkEntry ()
	self.phonetext = phonetext
	hbox6.pack_start ( phonetext, 1, 1, 0)
	vbox5.pack_start ( hbox6, 1, 1, 0)
	hbox5.pack_start ( vbox5, 1, 1, 0)
	addb = GtkButton ("ADD")
        addb.connect("clicked",addNumber)
	addb.set_border_width ( 4)
	self.addb = addb
	hbox5.pack_start ( addb, 1, 1, 2)
	vbox3.pack_start ( hbox5, 1, 1, 0)
	phonedia.add(vbox3)
	vbox3.show_all()

##########################################


class USERS:
    def __init__ (self) :
	USERS = GtkWindow (GTK.WINDOW_TOPLEVEL)
	self._root = USERS
	self._top = USERS
	USERS.realize()
        global USERP
        global user_entry1
        global usertext
        global passtext
        global user_data
        USERP=USERS
	USERS.set_title ( "Edit Usernames")
	USERS.set_position (GTK.WIN_POS_CENTER)
	USERS.set_modal ( 1)
	self.USERS = USERS
        USERS.connect("destroy",restoreit)
	vbox3 = GtkVBox(0, 0)
	self.vbox3 = vbox3
	hbox4 = GtkHBox(0, 0)
	self.hbox4 = hbox4
        global usercombo
	usercombo = GtkCombo ()
	usercombo.set_popdown_strings (user_data.keys())
	self.usercombo = usercombo
	user_entry1 = usercombo.children()[0]
	user_entry1.set_editable ( 0)
	self.user_entry1 =user_entry1
	hbox4.pack_start ( usercombo, 1, 1, 3)
	vbox4 = GtkVBox(1, 0)
	vbox4.set_border_width ( 11)
	self.vbox4 = vbox4
	delbutt = GtkButton ("Delete")
        delbutt.connect("clicked",delUser)
	self.delbutt = delbutt
	vbox4.pack_start ( delbutt, 0, 0, 0)
	closebutt = GtkButton ("Close")
        closebutt.connect("clicked",hideUser)
	self.closebutt = closebutt
	vbox4.pack_start (closebutt, 0, 0, 0)
	hbox4.pack_start ( vbox4, 1, 1, 0)
	vbox3.pack_start ( hbox4, 1, 1, 0)
	hbox5 = GtkHBox(0, 0)
	hbox5.set_border_width ( 5)
	self.hbox5 = hbox5
	vbox5 = GtkVBox(1, 0)
	self.vbox5 = vbox5
	hbox6 = GtkHBox(0, 0)
	self.hbox6 = hbox6
	userl = GtkLabel ("Username:")
	self.userl = userl
	hbox6.pack_start ( userl, 0, 0, 2)
	usertext = GtkEntry ()
	self.usertext = usertext
	hbox6.pack_start ( usertext, 1, 1, 0)
	vbox5.pack_start ( hbox6, 1, 1, 0)
	hbox7 = GtkHBox(0, 0)
	self.hbox7 = hbox7
	passl = GtkLabel ("Password:")
	self.passl = passl
	hbox7.pack_start ( passl, 0, 0, 2)
	passtext = GtkEntry ()
	passtext.set_visibility ( 0)
	self.passtext = passtext
	hbox7.pack_start ( passtext, 1, 1, 0)
	vbox5.pack_start ( hbox7, 1, 1, 0)
	hbox5.pack_start ( vbox5, 1, 1, 0)
	addb = GtkButton ("ADD")
        addb.connect("clicked",addUser)
	addb.set_border_width ( 4)
	self.addb = addb
	hbox5.pack_start ( addb, 1, 1, 2)
	vbox3.pack_start (hbox5, 1, 1, 0)
	USERS.add ( vbox3)
        vbox3.show_all()





############# BASIC METHODS ######################

def quit (*args) :
    stopPeng()
    gtk_main_quit ()

def run () :
    gtk_init ()
    gtk_set_locale ()
    myconfirm()
    mydialog()
    global SETUP
    s=setupw()
    p=phonedia()
    u=USERS()
    w=window1 ()
    w.window1.connect("destroy", quit)
    gtk_main ()

if __name__ == "__main__" :
    run ()