#!/usr/bin/perl -w
######################################################################
###
### IMPORTANT!
### Please read the warranty and legal notice
### at the end of this file!
###
######################################################################
require 5.000;
use lib '/usr/local/bin/',"$ENV{HOME}/bin/",'/usr/stud/loescher/bin/';
use slutil;
use English;
use Tk;
######################################################################
### Voreinstellungen
######################################################################
$version = '1.1';
$appname = 'Dial';
$DefaultTelefonBuch = "$ENV{HOME}/.dialrc";
$modem = "/dev/modem";
$dial = "atdt0NUMMER,,!,,31,,;H\r";
######################################################################
### Unterscheidung zwischen Console und X11
######################################################################
$MeinName = $0;
$MeinName =~ s/.*[\/\\]([^\/\\]+)/$1/; # Ohne Pfad
if ($MeinName eq "dial")
{
######################################################################
### Hauptprogramm-Console
######################################################################
&Hilfe if ($#ARGV < 0);
@TelBuch = ();
if (-e $ARGV[0])
{
$nummer = &NummernAuswahl(shift);
}
else
{
$nummer = join('',@ARGV)
}
$durchgekommen = $FALSE;
while (! $durchgekommen)
{
$durchgekommen = &Waehle($nummer, $TRUE)
}
}
else
{
######################################################################
### Hauptprogramm-X11
######################################################################
my $main = new MainWindow;
$main->Label(-text => "X$appname $version von Stephan Löscher\n"
)->pack;
# Automatische Code-Generierung
eval(&GeneriereTkMenue($DefaultTelefonBuch));
$main->Button(-text => "X$appname beenden!",
-command => sub{exit}
)->pack;
MainLoop;
}
######################################################################
### Unterprogramme
######################################################################
sub Kopf
{
my $head = "$appname $version - von Stephan Löscher";
return "\n$head\n" . '~' x length($head) . "\n";
}
sub NummernAuswahl
{
my $tbfile = shift;
open(TELBUCH, $tbfile) || die "Kann Telefonbuch '$tbfile' nicht lesen!\n";
@TelBuch = ;
close TELBUCH;
my @nummern = ();
my $i;
for ($i=0; $i<=$#TelBuch; $i++)
{
next unless ($TelBuch[$i] =~ /\s*(.+?)\s*:\s*(.+)\s*/);
my $nummer = $1;
my $name = $2;
print sprintf("%2d",$i) . " : $name ($nummer)\n";
push @nummern, $nummer;
}
print "Bitte wählen Sie ein Nummer aus:\n";
my $input = ;
chomp $input;
die "Falsche Auswahl!\n" if ($input > $i-1);
print "Ihre Wahl: $input: $nummern[$input]\n";
return $nummern[$input];
}
sub GeneriereTkMenue
{
my $tbfile = shift;
my $code = "";
open(TELBUCH, $tbfile) || die "Kann Telefonbuch '$tbfile' nicht lesen!\n";
@TelBuch = ;
close TELBUCH;
foreach $zeile (@TelBuch)
{
next unless ($zeile =~ /\s*(.+?)\s*:\s*(.+)\s*/);
# Pro Nummer wird Code für einen Button erzeugt
$code .= "
\$main->Button(-text => \"$2\",
-command => sub{&Waehle(\"$1\", \$FALSE)}
)->pack;
";
}
return $code;
}
sub Waehle
{
# Als Parameter wird die Nummer übergeben und $TRUE, falls Textmodus
# Return: $FALSE, falls nochmal gewaehlt werden muss, sonst $TRUE;
my $nummer = shift;
my $text = shift;
open(MODEM, ">$modem") || die "Kann auf $modem nicht schreiben!\n";
select(MODEM); $|=1; select(STDOUT); $|=1;
print "Wähle die Nummer $nummer ...\n" if ($text);
$dial =~ s/NUMMER/$nummer/;
print MODEM $dial;
close MODEM;
}
sub Hilfe
{
printumlaute
Kopf().
"Syntax: dial Telefonnummer
oder: dial Telefonbuch-Datei
oder: xdial
Beispiel: Sie geben ein 'dial 08912345'.
Darauf hin sendet Dial 'atdt008912345,,!,,31,,;H\\r' an das Modem.
Wenn die Verbindung besteht, dann wird über die Telefonanlage auf die
Nebenstelle 31 weitervermittelt.
xdial sucht selbst nach $DefaultTelefonBuch als Telefonbuch.
Das Telefonbuch ist zeilenweise so aufgebaut:
Nummer : Name
Nummer : Name
Nummer : Name
...
";
exit;
}
######################################################################
#
# Warranty and legal notice
# ~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 1997 by Stephan Löscher - all rights reserved
# My Address: Stephan Löscher, Dr.Troll-str. 3, 82194 Gröbenzell, Germany
# Email: loescher@gmx.de
# WWW: http://www.loescher-online.de/
#
# This program is freeware.
# It is NOT Public-Domain-Software!
# The author (Stephan Löscher) does NOT give up his copyright, but he
# reserves his copyright. Usage and copying is free of charge for private
# use, but NOT for commercial use!
#
# You may and should copy this program free of charge, use it,
# give it to your friends, upload it to a BBS or something similar, under
# the following conditions:
# * Don't charge any money for it. If you upload it to a BBS, make sure that
# it can be downloaded free (without paying for downloading it, except
# for usage fees that have to be paid anyway). Small copying fees (up to
# 5 DM or 3 $US) may be charged.
# * Only distribute the whole original package, with all the files included.
# * This program may not be part of any commercial product or service without
# the written permission by the author.
# * If you want to include this program on a CD-ROM and/or book, please send
# me a free copy of the CD/book (this is not a must, but I would appreciate
# it very much).
#
# Distribution of the program is explicitly desired, provided that the above
# conditions are accepted.
#
# YOU ARE USING THIS PROGRAM AT YOUR OWN RISK! THE AUTHOR (STEPHAN LÖSCHER)
# IS NOT LIABLE FOR ANY DAMAGE OR DATA-LOSS CAUSED BY THE USE OF THIS PROGRAM
# OR BY THE INABILITY TO USE THIS PROGRAM. IF YOU ARE NOT SURE ABOUT THIS, OR
# IF YOU DON'T ACCEPT THIS, THEN DO NOT USE THIS PROGRAM!
# BECAUSE OF THE VARIOUS HARDWARE AND SOFTWARE ENVIRONMENTS INTO WHICH THIS
# PROGRAM MAY BE PUT, NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS
# OFFERED.
# GOOD DATA PROCESSING PROCEDURE DICTATES THAT ANY PROGRAM BE THOROUGHLY
# TESTED WITH NON-CRITICAL DATA BEFORE RELYING ON IT.
#
# No part of the documentation may be reproduced, transmitted, transcribed,
# stored in any retrieval system, or translated into any other language in
# whole or in part, in any form or by any means, whether it be electronic,
# mechanical, magnetic, optical, manual or otherwise, without prior written
# consent of the author, Stephan Löscher.
#
# You may not make any changes or modifications to this software or this
# manual. You may not decompile, disassemble, or otherwise reverse-engineer
# the software in any way.
# If you got the source, then you are permitted to modify it if you
# contact me and tell me your enhancements.
# You also may include the source as a whole or parts of it into other
# programs, as long as you don't make profit directly out of selling
# the result. If you re-use code of this program then do not remove my name!
# If you include this source-code in your projects, mark it clearly as such
# "... derived from code XXX by Stephan Löscher".
# But don't distribute modified code!
#
# If you believe your copy of this software has been tampered or altered in
# anyway, shape or form, please contact me immediately! Do not hesitate a
# moment to inform me. Remember, this software should be available to all, in
# the original form, so please do not accept modified or damaged versions of
# my software.
#
# The author reserves his right for taking legal steps if the copyright or the
# license agreement is violated.
#
# All product names mentioned in this software are trademarks or registered
# trademarks of their respective owners.
#
# If you have any questions, ideas, suggestions for improvements or if you find
# bugs (I don't hope so.) then feel free to contact me. (Email is appreciated.)
#
# I'm not a native english speaker. If you are one and discover some strange
# sounding parts in this documentation or in the program, please, feel free
# to point it out to me and give me suggestions for alteration!
#
# If the program works for you, and you want to honour my efforts, you are
# invited to donate as much as you want... :)
#
# In any case, if you don't like the restrictions in this license, contact
# me, and we can work something out.
#
######################################################################