START > APPLESCRIPT > Gebrauchsfertige Scripts > Adressbuch - Nummer wählen

Adressbuch - Nummer wählen

DialANumber v0.1 (© by skeeve)

Dieses Script besteht aus zwei Bestandteilen:

Der erste Teil (ein Script-Plugin für das Adressbuch) fügt dem Adressbuch bei Telefonnummern eine Wählfunktion («mit Modem wählen») hinzu.

Der zweite Teil des Scripts (eine Script-Application) wählt dann die ausgewählte Nummer über das interne Modem.

Hier der erste Part des Scripts. Dieser muss (im Dateiformat «Skript») im Scripteditor gesichert werden und kommt in das Verzeichnis /Users/username/Library/Address Book Plug-Ins/ und am besten unter dem Namen DialANumber-Plugin.scpt:

  
-- DialANumber v0.1  © Oct 2007 by skeeve (dial.number.skeeve et xoxy dot net)

-- ::::::::::::::::::::::::::::::::::::::::  hohabadu.de  ::::::::::::::::::::::::::::::::::::::::

using terms from application "Address Book"
   
   on action property
      return "phone"
   end action property
   
   on should enable action for aPerson with phoneNumber
      return true
   end should enable action
   
   on action title for aPerson with phoneNumber
      return "mit Modem wählen"
   end action title
   
   on perform action for aPerson with phoneNumber
      set phone_chars to the value of phoneNumber
      launch application "DialANumber"
      call(phone_chars) of application "DialANumber"
   end perform action
   
end using terms from
 Im Scripteditor öffnen
 

Der zweite Part muss im Scripteditor als Dateiformat «Programm» und zwingend unter dem Namen DialANumber gesichert werden, kann aber an beliebiger Stelle (sinnvoll wäre der Ordner «Applications») abgelegt werden.

Wichtig: Die Vorwahlnummer muss im Script noch an die eigene Vorwahl angepasst werden! Hierzu bitte die Vorwahl 030 im letzten search in der property replacement (die Stelle ist im Script farblich hervorgehoben) durch die eigene Orts-Vorwahl ersetzen.

    
-- DialANumber v0.1     © Oct 2007 by skeeve (dial.number.skeeve et xoxy dot net)

-- ::::::::::::::::::::::::::::::::::::::::  hohabadu.de  ::::::::::::::::::::::::::::::::::::::::

property version : "Dial a Number V0.1"

property replacements : {¬
   {search:"(0)", replace:"", at_start:false}, ¬
   {search:"+", replace:"00", at_start:true}, ¬
   {search:"0049", replace:"0", at_start:true}, ¬
   {search:"030", replace:"", at_start:true} ¬
      } --
property allowed_chars : characters of "(+0123456789)"

on run
   set possible_number to strip_number(the clipboard as text, true)
   set possible_number to the text returned of (display dialog "Welche Nummer anrufen?" with title version default answer possible_number)
   if possible_number is not "" then call(possible_number)
end run

on call(phone_number)
   activate me
   set phone_num to strip_number(phone_number, false)
   
   repeat with repl in replacements
      if at_start of repl is false then
         if phone_num contains search of repl then
            set {oastid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, search of repl}
            set phone_num to text items of phone_num
            set AppleScript's text item delimiters to replace of repl
            set phone_num to phone_num as string
            set AppleScript's text item delimiters to oastid
         end if
      else if phone_num starts with search of repl then
         set phone_num to (replace of repl) & text (1 + (length of search of repl)) thru -1 of phone_num
      end if
   end repeat
   repeat
      set pid to dial(phone_num)
      set taste to the button returned of (display dialog "Wählt " & phone_num & return & return & "Bitte den Hörer abheben und (Verbunden) anklicken, wenn die Verbindung hergestellt ist." with title version buttons {"Auflegen", "Neu wählen", "Verbunden"} default button "Verbunden")
      if taste is "Auflegen" then
         do shell script "kill -9 " & pid
         exit repeat
      end if
      if taste is "Verbunden" then
         do shell script "kill -9 " & pid
         exit repeat
      end if
      do shell script "kill -9 " & pid
   end repeat
end call

to strip_number(some_text, keep_space)
   set phone_num to ""
   set gap to ""
   repeat with c in every character of some_text
      if c is in allowed_chars then
         set phone_num to phone_num & gap & c
         set gap to ""
      else if keep_space and (ASCII number of c) is in {9, 32} and phone_num is not "" then
         set gap to " "
      end if
   end repeat
   return phone_num
end strip_number

on dial(phone_number)
   return do shell script "perl <<-''
#!/usr/bin/perl
use strict;
use warnings;
my $pid=fork();
print 'ERROR' and exit unless defined $pid;
$SIG{CHLD}= 'IGNORE';
print $pid and exit if $pid;
close STDOUT;
close STDERR;
#
my $number= <DATA>;
$number=~ tr/\\015\\012//d;
#
# DEVICE
my $dev  = qq(/dev/cu.modem);
my $baud = 19200;
my $timeout = 3.0;
#
my $CRLF= qq(\\015\\012);
my $OK= 'OK';
my $END= qr/^(OK|NO DIALTONE|NO CARRIER|BUSY|ERROR)$CRLF$/m;
$|=1;
#
open my $tty, '+<', $dev or die qq(Can't access $dev: $!\\n);
system(qq(stty $baud raw clocal mdmbuf -hupcl -echo < $dev));
#
my $ret= modem_send($tty, 'ATZ' . $CRLF);
die $ret if defined $ret;
#
$ret= modem_send($tty, 'ATS11=120' . $CRLF);
die $ret if defined $ret;
#
foreach (split /(?<=;)/, $number) {
   $ret= modem_send($tty, 'ATDTW'. $_ . $CRLF);
}
die $ret if defined $ret;
#
close $tty;
#
sub modem_send {
   my ($tty, $text)= @_;
   my $buf='';
   my $c;
   my $rout;
   my $rin= 0;
   my $rtty= 0;
   vec($rin, fileno($tty),   1) = 1;
   $rtty= unpack('%32C*', $rin);
   #
   while (1) {
      if ($text) {
         syswrite($tty, $text, 1);
         substr($text,0,1)= '';
      }
      select($rout=$rin, undef, undef, $timeout);
      if ( unpack('%32C*', $rout) & $rtty ) {
         sysread($tty, $c, 1);
         $buf.= $c;
      }
      if ($buf=~ $END and not $text) {
         return undef if $1 eq $OK;
         return $buf;
      }
   }
}
__DATA__" & (ASCII character 10) & phone_number
end dial

 Im Scripteditor öffnen
      

Die technischen Voraussetzungen, daß dieses Script funktioniert: Das Modem muss mit dem Telefon zusammen an einem NFN-Anschluss der Telefondose/anlage hängen. Das Modem auf N (Nebenstelle), das Telefon auf F (Fon).

Noch ein Hinweis: Manche Modem-Stecker schleifen das Telefonsignal nicht durch. Hier muß dann der Stecker getauscht oder anderweitig dafür gesorgt werden, daß das Modem und das Telefon parallel angeschlossen sind.

Während das Modem wählt (es wird ein Dialog angezeigt), kann bereits der Telefonhörer abgenommen werden. Sobald die angerufene Gegenstelle das Gespräch entgegennimmt, kann man telefonieren!

Vielen Dank an skeeve für dieses Skript.
© 2007 by dial.number.skeeve@xoxy.net
Benutzung wie immer auf eigene Gefahr.


Kommentar schreiben

H =:o) L G I |  01.02.2013, 23:15:01 |  91.6.22.151 = p5B061697.dip0.t-ipconnect.de
Hi, Uwe. Na, dann gibt 2 Möglichkeiten: Entweder, Du wendest dich an Skeeve, damit er Dir weiterhilft, oder (was noch besser wäre) Du nimmst es als Anregung, das Skript entsprechend anzupassen. Besorg dir die Standard-Töne, und lasse sie vom Skript der Reihe nach abspielen... das sollte hinzubekommen sein. Happy Scripting! LG vom H =:o) L G I 

uwe |  31.01.2013, 19:21:38 |  88.130.16.10 = mue-88-130-16-010.dsl.tropolys.de
Genau das würde ich suchen - wenn es denn kein Modem benötigte, sondern (wahlweise??) einfach die üblichen Wähltöne aus dem Lautsprecher ausgeben könnte.Telefonhörer davor halten und alles ist gut :-) 

H =:o) L G I |  19.10.2007, 11:36:32 |  89.53.26.14 = 89.53.26.14
Über Feedback an dieser Stelle würden sich skeeve (der Autor des Scripts) und ich sehr freuen. Obwohl das Script seinen Dienst bereits bei uns verrichtet, ist es noch im Beta-Status (Version 0.1) und für Anregungen ist immer Luft. 



Powered By CMSimple Design By NMuD Top