home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / hacking / phreak_utils_pc / pdial.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-04-01  |  5.8 KB  |  162 lines

  1. unit pdial;
  2.  
  3. interface
  4.  
  5. uses bitmani,crt,optimer,extras,bbp_vars;
  6.  
  7. var   waitfordt,                  { wait for dial tone for how many ms    }
  8.       pulse_mark,                 { pulse dial mark time in miliseconds   }
  9.       pulse_space,                { pulse dial space time in miliseconds  }
  10.       pulse_interdig,             { pulse dial interdigit delay           }
  11.       portadress,                 { parallel port adress                  }
  12.       hookbit,                    { onhook/offhook bit on device          }
  13.       playrecbit,                 { play/record bit (off=play, on=record) }
  14.       phonebit :word;             { phone bit, off = phone on air         }
  15.  
  16. procedure setportbit(bitnr:byte;visual:boolean);
  17. procedure clrportbit(bitnr:byte;visual:boolean);
  18. procedure dialpulsedigit(dig:char;visual:boolean);
  19. procedure dialpulse(nr:string;visual:boolean);
  20.  
  21. implementation
  22.  
  23. procedure setportbit(bitnr:byte;visual:boolean);
  24. var x:byte;
  25. begin
  26.   x:=port[portadress];
  27.   setbitinbyte(bitnr,x);
  28.   port[portadress]:=x;
  29.   if visual then begin
  30.     if bitnr=hookbit then vmemwrite(18,13,' ON-HOOK ',colors.keypad_pressed);
  31.     if bitnr=playrecbit then begin
  32.       vmemwrite(28,13,' PLAY ',colors.keypad_released);
  33.       vmemwrite(35,13,' REC ',colors.keypad_pressed);
  34.     end;
  35.     if bitnr=phonebit then vmemwrite(41,13,' PHONE ',colors.keypad_released);
  36.   end;
  37. end;
  38.  
  39. procedure clrportbit(bitnr:byte;visual:boolean);
  40. var x:byte;
  41. begin
  42.   x:=port[portadress];
  43.   clrbitinbyte(bitnr,x);
  44.   port[portadress]:=x;
  45.   if visual then begin
  46.     if bitnr=hookbit then vmemwrite(18,13,' ON-HOOK ',colors.keypad_released);
  47.     if bitnr=playrecbit then begin
  48.       vmemwrite(28,13,' PLAY ',colors.keypad_pressed);
  49.       vmemwrite(35,13,' REC ',colors.keypad_released);
  50.     end;
  51.     if bitnr=phonebit then vmemwrite(41,13,' PHONE ',colors.keypad_pressed);
  52.   end;
  53. end;
  54.  
  55. procedure dialpulsedigit(dig:char;visual:boolean);
  56. var tacks,x,outbyte:byte;
  57. begin
  58.   if visual then begin
  59.     if dig='1' then vmemwrite(3,5,' 1 ',colors.keypad_pressed);
  60.     if dig='2' then vmemwrite(9,5,' 2 ',colors.keypad_pressed);
  61.     if dig='3' then vmemwrite(15,5,' 3 ',colors.keypad_pressed);
  62.     if dig='4' then vmemwrite(3,7,' 4 ',colors.keypad_pressed);
  63.     if dig='5' then vmemwrite(9,7,' 5 ',colors.keypad_pressed);
  64.     if dig='6' then vmemwrite(15,7,' 6 ',colors.keypad_pressed);
  65.     if dig='7' then vmemwrite(3,9,' 7 ',colors.keypad_pressed);
  66.     if dig='8' then vmemwrite(9,9,' 8 ',colors.keypad_pressed);
  67.     if dig='9' then vmemwrite(15,9,' 9 ',colors.keypad_pressed);
  68.     if dig='0' then vmemwrite(9,11,' 0 ',colors.keypad_pressed);
  69.     if dig='A' then vmemwrite(20,5,' KP1 ',colors.keypad_pressed);
  70.     if dig='B' then vmemwrite(26,5,' KP2 ',colors.keypad_pressed);
  71.     if dig='C' then vmemwrite(32,5,' ST ',colors.keypad_pressed);
  72.     if dig='D' then vmemwrite(37,5,' KP2E ',colors.keypad_pressed);
  73.     if dig='E' then vmemwrite(44,5,' STE ',colors.keypad_pressed);
  74.     if dig='F' then vmemwrite(50,5,' C11 ',colors.keypad_pressed);
  75.     if dig='G' then vmemwrite(56,5,' C12 ',colors.keypad_pressed);
  76.     if dig='H' then vmemwrite(62,5,' EO ',colors.keypad_pressed);
  77.   end;
  78.   case dig of
  79.     '1' :tacks:=1;
  80.     '2' :tacks:=2;
  81.     '3' :tacks:=3;
  82.     '4' :tacks:=4;
  83.     '5' :tacks:=5;
  84.     '6' :tacks:=6;
  85.     '7' :tacks:=7;
  86.     '8' :tacks:=8;
  87.     '9' :tacks:=9;
  88.     '0' :tacks:=10;
  89.     'A' :tacks:=11;
  90.     'B' :tacks:=12;
  91.     'C' :tacks:=13;
  92.     'D' :tacks:=14;
  93.     'E' :tacks:=15;
  94.     'F' :tacks:=16;
  95.     'G' :tacks:=17;
  96.     'H' :tacks:=18;
  97.   end;
  98.   for x:=1 to tacks do begin
  99.     clrportbit(hookbit,visual);
  100.     delayms(pulse_mark);
  101.     setportbit(hookbit,visual);
  102.     delayms(pulse_space);
  103.   end;
  104.   if visual then begin
  105.     if dig='1' then vmemwrite(3,5,' 1 ',colors.keypad_released);
  106.     if dig='2' then vmemwrite(9,5,' 2 ',colors.keypad_released);
  107.     if dig='3' then vmemwrite(15,5,' 3 ',colors.keypad_released);
  108.     if dig='4' then vmemwrite(3,7,' 4 ',colors.keypad_released);
  109.     if dig='5' then vmemwrite(9,7,' 5 ',colors.keypad_released);
  110.     if dig='6' then vmemwrite(15,7,' 6 ',colors.keypad_released);
  111.     if dig='7' then vmemwrite(3,9,' 7 ',colors.keypad_released);
  112.     if dig='8' then vmemwrite(9,9,' 8 ',colors.keypad_released);
  113.     if dig='9' then vmemwrite(15,9,' 9 ',colors.keypad_released);
  114.     if dig='0' then vmemwrite(9,11,' 0 ',colors.keypad_released);
  115.     if dig='A' then vmemwrite(20,5,' KP1 ',colors.keypad_released);
  116.     if dig='B' then vmemwrite(26,5,' KP2 ',colors.keypad_released);
  117.     if dig='C' then vmemwrite(32,5,' ST ',colors.keypad_released);
  118.     if dig='D' then vmemwrite(37,5,' KP2E ',colors.keypad_released);
  119.     if dig='E' then vmemwrite(44,5,' STE ',colors.keypad_released);
  120.     if dig='F' then vmemwrite(50,5,' C11 ',colors.keypad_released);
  121.     if dig='G' then vmemwrite(56,5,' C12 ',colors.keypad_released);
  122.     if dig='H' then vmemwrite(62,5,' EO ',colors.keypad_released);
  123.   end;
  124.   if keypressed then exit;
  125.   delayms(pulse_interdig);
  126. end;
  127.  
  128. procedure dialpulse(nr:string;visual:boolean);
  129. var x,save:byte;
  130.     ch:char;
  131. begin
  132.   save:=textattr;
  133.   setportbit(hookbit,visual);
  134.   for x:=1 to length(nr) do begin
  135.     if nr[x] in ['0'..'9','A'..'H']
  136.     then begin
  137.       textattr:=colors.high;
  138.       write(nr[x]);
  139.       dialpulsedigit(nr[x],visual);
  140.       if keypressed then begin
  141.         repeat ch:=readkey until ch<>#0;
  142.         clrportbit(playrecbit,visual);
  143.         clrportbit(hookbit,visual);
  144.         exit;
  145.       end;
  146.     end else begin
  147.       textattr:=colors.normal;
  148.       write(nr[x]);
  149.     end;
  150.   end;
  151.   textattr:=save;
  152. end;
  153.  
  154. begin
  155.   if paramstr(1)='/(C)' then begin
  156.     writeln('PDIAL.PAS  v1.00   Pulse Dialing & Phone Relay I/O Routines');
  157.     writeln('                   Copyright (C) 1993 Onkel Dittmeyer/SLAM');
  158.     writeln;
  159.     readln;
  160.   end;
  161. end. 
  162.