[Back to SOUND SWAG index] [Back to Main SWAG index] [Original]
Hello Gayle!
I don't know if you got my previous letter, so I write again. I'd like
to contribute to the SWAG with this "PC-Speaker-dial-unit". It dials
your phone using the PC-Speaker. Here it is:
Unit PCSDial;
(*
This unit shows how You can use the PC-Speaker to dial a phonenumber.
Just hold the telephone's microphone near the PC-Speaker. Preferably
realy close to the PC-Speaker. If the signals don't get trough, move
the mic closer to PC-Speaker.
BTW, it ain't 100% sure that this works with all the numbers.
This unit was written by G�ran Weinholt. It is very welcome in
the SWAG. If you use this in a creation of your own, please give
me credit.
- G�ran Weinholt <weinholt@usa.net>
*)
Interface
Uses SoundU, Crt;
{SoundU can be found in SOUND.SWG under the title "Multiple Sound
Channels"}
Const Tones1:Array [1..4] of Word=(697,770,852,941);
Tones2:Array [1..4] of Word=(1209,1336,1477,1633);
Combos:Array [1..16,1..2] of Byte=
{ 1209 1336 1477 1633Hz }
{ 697 }((1,1),{1}(1,2),{2}(1,3),{3}(1,4),{A} (* What's the A, B, C and
*)
{ 770 } (2,1),{4}(2,2),{5}(2,3),{6}(2,4),{B} (* D for? E-Mail me if
*)
{ 852 } (3,1),{7}(3,2),{8}(3,3),{9}(3,4),{C} (* you now :-)
*)
{ 941Hz } (4,1),{*}(4,2),{0}(4,3),{#}(4,4) {D});
{ Source: Aceex Faxmodem User's manual, Appendix B }
{ The length of }
Var ToneLength, { a tone, }
ToneDelay, { the delay between tones and }
LongDelay:Word; { a long delay }
{ in milliseconds. }
Procedure DialNumber(s:string);
Function DetectWindows:Boolean;
{ This is necessary because the SoundU unit doesn't work under windows.
}
Implementation
Procedure DialNumber(s:string);
Var A:Byte;
I:Byte;
begin
If not DetectWindows then
For A := 1 to Length(S) do Begin
If S[A] in ['0'..'9','*','#','A'..'D'] Then begin
Case S[A] of
'1':I := 1; '2':I := 2; '3':I := 3; 'A':I := 4;
'4':I := 5; '5':I := 6; '6':I := 7; 'B':I := 8;
'7':I := 9; '8':I := 10;'9':I := 11;'C':I := 12;
'*':I := 13;'0':I := 14;'#':I := 15;'D':I := 16;
End; (* Yes, spupid method! *)
DoubleSound(Tones1[Combos[I,1]],Tones2[Combos[I,2]],ToneLength/1000,22050);
Delay(ToneDelay);
End Else
If S[A] = '-' then Delay(LongDelay);
End;
end;
Function DetectWindows:Boolean;assembler;
asm
mov ax, 1600h
int 2Fh
xor dl, dl
cmp al, 01h
je @Label1
cmp al, 0FFh
je @Label1
cmp al, 00h
je @Label2
cmp al, 80h
je @Label2
mov dl, True
@Label1:
mov dl, True
jmp @Label3
@Label2:
mov ax, 4680h
int 2Fh
cmp ax, 02h
je @Label1
mov dl, False
@Label3:
xchg al, dl
end;
Begin
ToneLength := 150;
ToneDelay := 70;
LongDelay := 1000;
End.
{---------8<--- CUT HERE
----------------------------------------------------}
Program Test; (* A test of the PCSDial unit. *)
Uses PCSDial;
Begin
If DetectWindows then begin
WriteLn('Sorry! This doesn''t work with Windows.');
End;
WriteLn('Dialing 1-800-733-1340...');
DialNumber('1-800-733-1340');
End.
[Back to SOUND SWAG index] [Back to Main SWAG index] [Original]