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:
-- :::::::::::::::::::::::::::::::::::::::: 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
-- :::::::::::::::::::::::::::::::::::::::: 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.
H =:o) L G I |
01.02.2013, 23:15:01 |
|
uwe |
31.01.2013, 19:21:38 |
|
H =:o) L G I |
19.10.2007, 11:36:32 |
|
ICQ
AIM
