home *** CD-ROM | disk | FTP | other *** search
/ WDR Computer Club Digital 1996 June / CLUB_0696.BIN / ir / sw / irtvtest.pas < prev    next >
Pascal/Delphi Source File  |  1995-08-02  |  6KB  |  163 lines

  1. PROGRAM IR_Empfaenger_Demonstrationsprogramm;
  2. USES CRT,DOS;
  3. VAR i,j,nr,zahl,altnr : BYTE;
  4.     zeichen           : CHAR;
  5.     time              : LONGINT ABSOLUTE $40:$6C;
  6.     zeit              : LONGINT;
  7.     regs              : REGISTERS;
  8.     parameter         : STRING[4];
  9.     druport,fehlers   : WORD;
  10.     oldint            : PROCEDURE;
  11.     a,b,c,d,e,f,g,h   : WORD;
  12.  
  13. {###########################################################################}
  14. {#  umrande : zeichnet einen Rahmen um angegebene Koordinaten              #}
  15. {#  Eingabe : x-linksoben,y-linksoben,x-rechtsunten,y-rechtsunten          #}
  16. {#            Rahmenfarbe,Hintergrund                                      #}
  17. {###########################################################################}
  18. PROCEDURE umrande(xl,yl,xr,yr,rahmen,hinterg:BYTE);
  19. VAR i,j:BYTE;
  20. BEGIN
  21.   TEXTCOLOR(rahmen);TEXTBACKGROUND(hinterg);
  22.   GOTOXY(xl,yl);WRITE('┌');FOR i:=2 TO xr-xl DO WRITE('─');WRITE('┐');
  23.   FOR i:=1 TO yr-yl DO BEGIN
  24.                          GOTOXY(xl,yl+i);WRITE('│');
  25.                          FOR j:=2 TO xr-xl DO WRITE(' ');
  26.                          WRITE('│');
  27.                        END;
  28.   GOTOXY(xl,yr);WRITE('└');FOR i:=2 TO xr-xl DO WRITE('─');WRITE('┘');
  29. END;
  30.  
  31. {###########################################################################}
  32. {#  bildschirm : zeichnet Anfangsbildschirm                                #}
  33. {###########################################################################}
  34. PROCEDURE bildschirm;
  35. BEGIN
  36.   TEXTBACKGROUND(3);
  37.   CLRSCR;
  38.   TEXTCOLOR(0);
  39.   TEXTBACKGROUND(15);
  40.   WRITE(' Infrarot-Empfänger Demonstrationsprogramm Copyright (c) by Klaus Kohlert 1995  ');
  41.  
  42.   TEXTCOLOR(14);
  43.   TEXTBACKGROUND(3);
  44.   GOTOXY(11,3);WRITE('Interrupt-Routine');
  45.   GOTOXY(53,3);WRITE('Programmablauf');
  46.   umrande(5,5,34,24,7,0);
  47.   FOR i:=1 TO 5 DO
  48.     FOR j:=0 TO 3 DO
  49.       BEGIN
  50.         GOTOXY(7+j*7,7+i*3);WRITE('█████');
  51.       END;
  52.   GOTOXY(20,16);WRITE('              ');
  53.   TEXTCOLOR(RED);GOTOXY(7,7);WRITE('█████');
  54.   GOTOXY(30,7);WRITE('*');
  55.   TEXTCOLOR(7);GOTOXY(7,6);WRITE('POWER');
  56.   GOTOXY(7,9);WRITE('  1      2      3      4');
  57.   GOTOXY(7,12);WRITE('  5      6      7      8');
  58.   GOTOXY(7,15);WRITE('  9      0');
  59.   GOTOXY(7,18);WRITE('SLEEP  MUTE   VOL-   VOL+');
  60.   GOTOXY(7,21);WRITE(' DSP    PRE    CH-    CH+');
  61.   TEXTBACKGROUND(WHITE);TEXTCOLOR(8);
  62.   GOTOXY(14,7);WRITE(' Channel :  0 ');
  63.   umrande(45,5,75,24,0,7);
  64. END;
  65.  
  66. {###########################################################################}
  67. {# interrupt_aufgerufen : Steuert die Virtuelle TV-Fernbedienung           #}
  68. {#                        (Wird aktiviert wenn IR-Empfänger-Treiber ein    #}
  69. {#                        IR-Signal "erkannt hat")                         #}
  70. {# Ausgabe              : nr = Ausgewählter TV-Kanal                       #}
  71. {###########################################################################}
  72.  
  73. PROCEDURE interrupt_aufgerufen(reg:registers); INTERRUPT;
  74. VAR  i,j,k,irnr,taste:BYTE;
  75. begin
  76.   irnr:=PORT[druport]; {lese IR-Codenr ein}
  77.   TEXTBACKGROUND(0);
  78.   {zeichne gedrückte Taste und gebe Kanalzahl aus}
  79.   FOR k:=1 TO 2 DO
  80.     BEGIN
  81.       IF k=1 THEN TEXTCOLOR(0)
  82.              ELSE IF irnr<>1 THEN TEXTCOLOR(7)
  83.                              ELSE TEXTCOLOR(7);
  84.       CASE irnr OF
  85.         1     : GOTOXY(7,7);
  86.         2..11 : BEGIN
  87.                   taste:=irnr-1;
  88.                   IF taste=10 THEN taste:=0;
  89.                   IF k=1 THEN BEGIN
  90.                                 IF time<zeit+15
  91.                                 THEN BEGIN
  92.                                        INC(zahl);
  93.                                        IF zahl<2 THEN nr:=altnr*10+taste
  94.                                                  ELSE BEGIN
  95.                                                         zahl:=0;
  96.                                                         nr:=taste;
  97.                                                         altnr:=nr;
  98.                                                       END;
  99.                                      END
  100.                                 ELSE BEGIN
  101.                                        nr:=taste;altnr:=nr;zahl:=0;
  102.                                      END;
  103.                                 zeit:=time;
  104.                               END;
  105.                   i:=(irnr-2) DIV 4;j:=(irnr-1)-i*4;GOTOXY(j*7,10+i*3);
  106.                 END;
  107.         12 : GOTOXY(28,19);
  108.         13 : GOTOXY(21,19);
  109.         14 : BEGIN IF (k=1)AND(nr<99) THEN INC(nr);GOTOXY(28,22);END;
  110.         15 : BEGIN IF (k=1)AND(nr>0) THEN DEC(nr);GOTOXY(21,22);END;
  111.         16 : GOTOXY(14,19);
  112.         17 : GOTOXY(7,19);
  113.         18 : GOTOXY(7,22);
  114.         19 : GOTOXY(14,22);
  115.       END;
  116.       WRITE('█████');
  117.       TEXTBACKGROUND(WHITE);TEXTCOLOR(8);
  118.       GOTOXY(14,7);WRITE(' Channel :',nr:3,' ');
  119.       TEXTBACKGROUND(8);
  120.       IF k=1 THEN BEGIN TEXTCOLOR(0);GOTOXY(30,7);WRITE('*');DELAY(400);END
  121.              ELSE BEGIN TEXTCOLOR(7);GOTOXY(30,7);WRITE('*');END;
  122.     END;
  123.   TEXTCOLOR(0);TEXTBACKGROUND(7);
  124. END;
  125.  
  126. BEGIN
  127.   { parameter:=paramstr(paramcount);}
  128.   druport:=$3bc;
  129. {  VAL(parameter,druport,fehlers);
  130.   IF paramcount=0 THEN WRITE('keine Portadresse übergeben')
  131.   ELSE BEGIN                                               }
  132.   {Cursor aus !}
  133.   regs.ah:=$01;
  134.   regs.ch:=$F1;
  135.   regs.cl:=$0;
  136.   INTR($10,regs);
  137.   bildschirm;
  138.   GETINTVEC($6E,@oldint);
  139.   SETINTVEC($6E,ADDR(interrupt_aufgerufen));
  140.   nr:=0;zahl:=0;altnr:=0;
  141.   REPEAT
  142.     FOR j:=1 TO 18 DO
  143.       FOR i:=0 TO 26 DO
  144.         BEGIN
  145.           IF KEYPRESSED THEN BEGIN j:=18;i:=26;END;
  146.           GOTOXY(47+i,5+j);WRITE(CHR(nr+65));DELAY(100);
  147.         END;
  148.     FOR i:=1 TO 18 DO
  149.       BEGIN
  150.         GOTOXY(47,5+i);WRITE('                           ');
  151.       END;
  152.   UNTIL KEYPRESSED;
  153.   {Cursor an !}
  154.   regs.ah:=$01;
  155.   regs.ch:=$E;
  156.   regs.cl:=$0;
  157.   INTR($10,regs);
  158.   TEXTCOLOR(WHITE);
  159.   TEXTBACKGROUND(0);
  160.   CLRSCR;
  161.  { END;}
  162.   SETINTVEC($6e,NIL);
  163. END.