
      - Dokumentation av LPTCID - Mountain Village Software 1994 -

 -----------------------------------------------------------------------------
 Frgor, synpunkter, eller kompletterande uppgifter fr denna textfil
 skickas via ntbrev eller fax till:

                 Fidonet:  Jorgen Olsson, 2:205/201
                 Internet: jorgen@hofors.kuai.se
                 Fax/BBS:  026-161476

 Denna textfil beskriver installation och funktion hos LPTCID, samt hur
 andra program kan anvnda LPTCIDs funktioner fr att enkelt lsa nummer-
 presentation.

 Programmet och texten fr kopieras och anvndas fritt, under frut-
 sttning att denna alla filer i arkivet som detta distribueras i frblir
 i sitt originalskick i hela distributionskedjan. Konvertering till andra
 packningsformat r givetvis tillten, under ovanstende frutsttningar.
 -----------------------------------------------------------------------------

 LPTCID r ett minnesresident program som lser CALLER ID (telias nummer-
 presentation) i form av 4-bitars data frn printerportens statuslinjer.

 Programmet krver att en speciell krets (DTMF-dekoder) r installerad
 p printerporten. Fr att programmets tabell fr versttning av dekoderns
 4-bitars data till motsvarande DTMF-tecken skall fungera korrekt, br
 denna krets vara baserad p den integrerade DTMF-dekodern MT8870. Dess 
 utsignaler skall vara kopplade till printerportens statuslinjer enligt 
 nedanstende:

 Q1:  pin 13
 Q2:  pin 12
 Q3:  pin 11
 Q4:  pin 10
 StD: pin 15

 LPTCID fungerar endast mellanlagringsbuffer av data som kommer in frn
 dekodern. Yttre program som skall lsa callerid-strngen mste kra
 LPTCIDs speciella service-interrupt (se nedan) fr att f en pekare
 till denna buffer. Buffern kan sedan lsas som en vanlig asciiz-strng.
 Som serviceinterrupt rekommenderas ngon av vektorerna 60h-66h. Default
 r 65h.



 Installation av LPTCID
 ----------------------

 LPTCID laddas exempelvis frn autoexec.bat, och accepterar 3 kommando-
 parametrar:

 /P<portadress>  Printerportens (p vilken hrdvaran r installerad) port-
                 adress, som hexadecimalt tal. Default r 378 (hex), som
                 r Lpt1.

 /I<interrupt>   Anger p vilket interruptnummer (60h-66h rekommenderas)
                 som LPTCIDs servicerutin skall installeras. Default r
                 65h.

 /?              Kortfattad hjlp.


 OBS:
 Ladda inte LPTCID utan att ha caller id dekodern installerad p
 printerporten, annars kan LPTCID aktiveras i ondan om vissa status-
 bitar av ngon anledning r 1-satta.

 TIPS:
 Om du kr med ngot annat interruptnummer n 65 som service-interrupt,
 s kan du, fr att frenkla handhavandet av applikationer som anvnder
 LPTCID fr att lsa caller id, lgga till en ny environmentvariabel i
 din AUTOEXEC.BAT:

 SET CIDINT=<service_interrupt>

 <service_interrupt> r det nya interruptnumret som hexadecimalt vrde.
 Om man t.ex vill anvnda int 66h som serviceinterrupt:

 SET CIDINT=66




 Serviceinterruptet
 ------------------

 Fr att p ett enkelt stt anvnda LPTCID frn andra program kan man
 anvnda funktionerna i detta interrupt. Ett program som anvnder LPTCIDs
 servicefunktioner br alltid inledas p fljande stt:

 1. Kr interruptet med register AH=$00.

 2. Kolla s att interruptet returnerar vrdet 1213 i AX. Har AX ett annat
    vrde s finns inte servicerutinen installerad p interruptet, och
    programmet br avslutas med ett felmeddelande om detta.

 3. Om punkt 2 r avklarad utan fel, kan pekare till minnesbuffern i form
    av segment:offset hmtas direkt frn BX resp. CX. I t.ex TP gr man p
    fljande vis:

 PekareTillStrng:=Ptr(regs.BX,regs.CX);

    Kom dock ihg att strngen r en asciiz-strng (C-strng).

    Programmet br ocks kolla efter environment-variabeln CIDINT, och
    som default kra service-interruptnumret som finns i denna, om
    variabeln r definerad. Strngvrdet i CIDINT skall lsas som
    som hexadecimalt, och konverteras till ett 8-bitars heltalsvrde
    (byte).

    I Pascal kan man gra detta p fljande stt:

 VAR i                   : integer;
     w                   : word;
     ServiceInterruptNum : byte;
 .
 .
 ServiceInterruptNum:=$65; { Default interrupt nummer }

 If GetEnv('CIDINT') <> '' then
 BEGIN
      val('$'+GetEnv('CIDINT'),w,i);
      if (i <> 0) and (w <= $FF) then ServiceInterruptNum:=byte(w);
 END;






 Lista p funktioner i serviceinterruptet
 ----------------------------------------

 AH = 00h:   Returnera pekare till buffer.
 Returnerar:
 AX: 1213
 BX: Pekare till buffer, segment
 CX: Pekare till buffer, offset


 AH = 01h:   Returnera lngd p nuvarande strng i buffer.
 Returnerar:
 AX: 1213
 BX: Strnglngd


 AH = 02h:   Nollstll buffer och alla statusvrden.

 Returnerar:
 AX: 1213


 AH = 03h:   Stoppa/aktivera datainlsning frn DTMF-dekodern.
             (kan anvndas fr att deaktivera/aktivera LPTCID)
 Returnerar:
 AX: 1213


 AH = $FE    Markera nuvarande strng som lst. Denna flagga nollstlls
             alltid automatiskt d en ny strng lses in.
 Returnerar:
 AX: 1213


 AH = $FF    Returnera status p ls-flaggan (se funktion $FE). Om man
             tidigare satt denna flagga med funktion $FE, och den sedan
             blir satt till 0 av LPTCID, s ligger en ny strng i buffern.
 Returnerar:
 AX: 1213
 BX: 0 eller 1. 1 = ls-flaggan r satt.




 Buffern
 -------
 Strngen som lagras i LPTCIDs minnesbuffer r den avkodade caller-id
 sekvensen, allts i form av siffrorna 0..9 (ascii 48..57) samt bokstverna
 A..D (ascii 65..68). Strngen r en sk. nullterminerad strng, ven kallad
 asciiz-strng eller C-strng. Maxlngd r satt till 255 tecken.

 Observera att det alltid r endast den senaste callerid-verfringen som
 lagras i buffern. Detta ligger kvar i buffern tills nsta caller-id
 skriver ver det.

 Bokstverna A..D anvnds som styrkoder fr verfringen av caller id,
 och har fljande betydelser:

 A: omstyrt nummer fljer (?)
 B: tvsiffrig informationskod fljer.
 C: stopptecken (EOT)
 D: abbonnentnummer fljer.

 Exempel p verfrda caller id (som de lagras i minnesbuffern):
       n = siffra i telefonnummer
       r = siffra i riktnummer
       x = siffra i informationskod

 DrrrnnnnnnC:  Uppringandes telefonnummer finns mellan D och C.

 BxxC:         Tvsiffrig informationskod finns mellan B och C.

 Uppringandes telefonnummer har alltid riktnumret som prefix, utan ngot
 skiljetecken mellan rikt- och telefonnummer.

 Fljande tvsiffriga informationskoder finns f.n. definerade:

 00: Numret kan ej verfras, uppringande ringer frn det analoga
     telefonntet (aka icke-AXE), eller frn mobiltelefon.

 10: Nummer verfrs ej. Abbonnenten har hemligt nummer, eller har
     tillflligt sprrat nummerpresentation.


