home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 1 / Mecomp-CD.iso / amiga / tools / misc / videotext5.41 / src / info.p < prev    next >
Encoding:
Text File  |  1997-05-04  |  16.2 KB  |  467 lines

  1. UNIT info; {$project vt }
  2. { Generierung von Sonderseiten zum Programm VideoText }
  3.  
  4. INTERFACE; FROM vt USES jobs;
  5.  
  6. PROCEDURE topinfo(top0,top1: p_onepage);
  7. PROCEDURE kill_topmenu;
  8. PROCEDURE create_topmenu(pg0,pg2,pg3,pg4: p_onepage);
  9. PROCEDURE say_hello(version: Str80);
  10. PROCEDURE helpme;
  11. PROCEDURE rexxhelp;
  12. PROCEDURE testpage;
  13. PROCEDURE guru(nr: Byte);
  14. FUNCTION hunt(key: str80; target: p_onepage; blink: Boolean): Boolean;
  15.                                                                      
  16. TYPE rxkeyid=(scn,top,tos,aut,tok,fif,lif,can,rty,clf,l2c,p2c,s2f,s2b,
  17.               scl,snp,qit,
  18.               pre,enq,dsp,hnt,kil,sav,fnm,fmd,ics,ifd,loa,
  19.               laq,gpn,gpi,gst,nul);
  20.      rxwords=ARRAY[rxkeyid] OF Str;
  21. VAR rxkeys: rxwords;
  22.  
  23. { ---------------------------------------------------------------------- }
  24.  
  25. IMPLEMENTATION;
  26.  
  27. {$opt q,s+,i+ } { keine Laufzeitprüfungen außer Stack und Feldindizes }
  28.  
  29. { eine VT-Seite, die nicht in der Liste verwaltet werden muß: }
  30. VAR infopage: onepage; STATIC; 
  31.  
  32. PROCEDURE topinfo{(top0,top1: p_onepage)};
  33. { wertet die TOPtext-Seiten 1F0 und 1F1 aus, erzeugt zwei Seiten Information }
  34. { bzw., sofern schon vorhanden, aktualisiert diese nur. }
  35. VAR i,j,k,n: Integer;
  36.     npg,nsp,nlrg: Integer;
  37.     pg1,pg2: p_onepage;
  38.     s: Str80;
  39. BEGIN
  40.   pg1 := hunt_in_list($999,1,True);
  41.   pg2 := hunt_in_list($999,2,True);
  42.   IF pg1=Nil THEN BEGIN
  43.     New(pg1); pg1^.pg := $999; pg1^.sp := 1; init_page(pg1);
  44.     ins_to_list(pg1); update_list(pg1,1);
  45.   END ELSE
  46.     init_page(pg1);
  47.   IF pg2=Nil THEN BEGIN
  48.     New(pg2); pg2^.pg := $999; pg2^.sp := 2; init_page(pg2);
  49.     ins_to_list(pg2); update_list(pg2,1);
  50.   END ELSE
  51.     init_page(pg2);
  52.   npg := 0; nsp := 0; nlrg := 0;
  53.   write_to_page(0,1,'Seitenbelegung (laut TOP-Text)  1/2',3,4,pg1);
  54.   write_to_page(0,1,'Seitenbelegung (laut TOP-Text)  2/2',3,4,pg2);
  55.   pg1^.cbits := pg1^.cbits OR PF_ISMAP;
  56.   pg2^.cbits := pg2^.cbits OR PF_ISMAP;
  57.   FOR i := 10 TO 89 DO BEGIN
  58.     s := IntStr(10*i)+': ----------';
  59.     j := 10*i-60;
  60.     FOR k := 0 TO 9 DO
  61.       IF NOT (topcode[top0^.chars[j+k]] IN [0,16]) THEN BEGIN
  62.         Inc(npg); n := topcode[top1^.chars[j+k]]
  63.         CASE n OF
  64.           0: BEGIN s[k+6] := #127; Inc(nsp); END;
  65.           1..9: BEGIN s[k+6] := Chr(48+n); nsp := nsp + n; END;
  66.           10: BEGIN s[k+6] := '+'; Inc(nlrg); nsp := nsp + n; END;
  67.           OTHERWISE s[k+6] := '?'; Dec(npg); { :-( }
  68.         END;
  69.       END ELSE IF topcode[top0^.chars[j+k]]=16 THEN
  70.         s[k+6] := '?';
  71.     IF Odd(i DIV 10) THEN j := 2 ELSE j := 21;
  72.     IF Odd((i+10) DIV 20) THEN k := i MOD 10+2 ELSE k := i MOD 10+13;
  73.     IF i<50 THEN BEGIN
  74.       write_to_page(j,k,s,7,-1,pg1); char_to_page(j+5,k,#6,pg1);
  75.     END ELSE BEGIN
  76.       write_to_page(j,k,s,7,-1,pg2); char_to_page(j+5,k,#6,pg2);
  77.     END;
  78.   END;
  79.   s := IntStr(npg)+' Seitennummern';
  80.   write_to_page(0,12,s,7,5,pg1);
  81.   s := ''; IF nlrg>0 THEN
  82.     s := IntStr(nlrg)+' mit "mehr als 9" Unterseiten';
  83.   write_to_page(0,23,s,3,1,pg1);
  84.   s := IntStr(nsp)+' kByte Text';
  85.   IF nlrg>0 THEN s := 'mind. ' + s;
  86.   write_to_page(0,12,s,7,5,pg2);
  87.   j := 0;
  88.   FOR i := 100 TO 899 DO
  89.     IF topcode[top0^.chars[i-60]]=1 THEN j := i;
  90.   s := 'zur Zeit keine Untertitel';
  91.   IF j>0 THEN s := 'VT-Untertitel auf Seite '+IntStr(j);
  92.   write_to_page(0,23,s,3,1,pg2);
  93. END;
  94.  
  95. PROCEDURE kill_topmenu;
  96. { den ganzen Müll von create_topmenu aus der Seitenliste entfernen }
  97. VAR seite,hilf: p_onepage;
  98. BEGIN
  99.   seite := root;
  100.   WHILE seite<>Nil DO BEGIN
  101.     hilf := seite; seite := seite^.next;
  102.     IF hilf^.pg>=$900 THEN del_from_list(hilf);
  103.   END;
  104. END;
  105.  
  106. PROCEDURE create_topmenu{(pg0,pg2,pg3,pg4: p_onepage)};
  107. { benutzt die TOPtext-Seiten 1F0, 1F2 [1F3 [1F4]], um ein Menü aus Seiten }
  108. { mit Schlagwörtern und anklickbaren Seitennummern zu erzeugen }
  109. VAR i,j,k,l,n,gap,npg,nttl,nblk: Integer;
  110.     boff,goff: Integer;
  111.     titel: ARRAY[0..3*2*23] OF RECORD
  112.       name: String[13];
  113.       nr: Integer;
  114.       typ: Byte;
  115.     END; STATIC;
  116.     block: ARRAY[1..23] OF RECORD
  117.       adr,abh,menue: Integer;
  118.     END; STATIC;
  119.     pg: ARRAY[2..4] OF p_onepage;
  120.     newpg: p_onepage;
  121.     s: str80;
  122.     ch: Char;
  123. BEGIN
  124.   kill_topmenu; { die alten 900er Seiten entfernen }
  125.   pg[2] := pg2; pg[3] := pg3; pg[4] := pg4;
  126.   npg := 0; FOR i := 2 TO 4 DO IF pg[i]<>Nil THEN Inc(npg);
  127.   FOR i := 1 TO 23 DO
  128.     FOR j := 1 TO 2*npg DO WITH titel[23*(j-1)+i] DO BEGIN
  129.       gettopnum(pg[1+(j+1) DIV 2],20*(1-j MOD 2),i,nr,k);
  130.       IF (nr<0) OR (k<0) OR (nr>$899) THEN
  131.         nr := $900; { ungültige Codierung! }
  132.       IF nr<$100 THEN nr := nr + $800;
  133.       nr := get_bcd(nr);
  134.       IF nr<900 THEN
  135.         typ := topcode[pg0^.chars[nr-60]]
  136.       ELSE
  137.         typ := 0;
  138.       name[13] := #0;
  139.       FOR k := 1 TO 12 DO BEGIN
  140.         name[k] := Chr(pg[1+(j+1) DIV 2]^.chars[40*i+20*(1-j MOD 2)+7+k]);
  141.         IF name[k]<' ' THEN name[k] := ' ';
  142.       END;
  143.     END;
  144.   nttl := 2*23*npg;
  145.   { nach Nummern sortieren (Shell-Sort): }
  146.   gap := nttl DIV 2;
  147.   WHILE gap>0 DO BEGIN
  148.     FOR i := gap+1 TO nttl DO BEGIN
  149.       j := i-gap;
  150.       WHILE j>0 DO BEGIN
  151.         IF titel[j].nr>titel[j+gap].nr THEN BEGIN
  152.           titel[0] := titel[j];
  153.           titel[j] := titel[j+gap];
  154.           titel[j+gap] := titel[0];
  155.           j := j - gap;
  156.         END ELSE
  157.           j := 0;
  158.       END;
  159.     END;
  160.     gap := gap DIV 2;
  161.   END;
  162.   WHILE (titel[nttl].typ=0) AND (nttl>0) DO Dec(nttl);
  163.   { Feststellen, wieviele Blöcke es gibt, wieviele Gruppen- und normale }
  164.   { Seiten von ihnen abhängig sind, und ob sie eine eigene Menüseite }
  165.   { verdienen: }
  166.   nblk := 0; n := 900;
  167.   FOR i := 1 TO nttl DO
  168.     IF (titel[i].typ IN [1..5]) AND (nblk<23) THEN BEGIN
  169.       Inc(nblk);
  170.       block[nblk].adr := i; block[nblk].abh := 0; block[nblk].menue := n;
  171.       IF (titel[i].typ<>1) AND (i<nttl) THEN BEGIN
  172.         j := i;
  173.         REPEAT
  174.           Inc(j); IF titel[j].typ>5 THEN Inc(block[nblk].abh);
  175.         UNTIL (j=nttl) OR (titel[j].typ IN [2..5]);
  176.       END;
  177.       IF block[nblk].abh=0 THEN block[nblk].menue := 0 ELSE Inc(n);
  178.       IF block[nblk].abh>23 THEN block[nblk].abh := 23;
  179.     END;
  180.   IF n=900 THEN block[1].menue := n; { häh? kein Block hat Gruppenseiten? }
  181.   { Offset des Blockmenues in jeder Seite: }
  182.   boff := 1 + (23-nblk) DIV 2;
  183.   { Menüseiten aufbauen: }
  184.   FOR i := 1 TO nblk DO
  185.     IF block[i].menue>0 THEN BEGIN
  186.       New(newpg); newpg^.pg := make_bcd(block[i].menue); newpg^.sp := 0;
  187.       ins_to_list(newpg); init_page(newpg); 
  188.       { Offset des Gruppenmenues in dieser Seite: }
  189.       goff := boff+i-(1+block[i].abh) DIV 2;
  190.       IF goff+block[i].abh>24 THEN goff := 24-block[i].abh;
  191.       IF goff<1 THEN goff := 1;
  192.       { alle Blockseiten eintragen: }
  193.       j := boff;
  194.       FOR k := 1 TO nblk DO BEGIN
  195.         l := block[k].adr;
  196.         s := titel[l].name+' ';
  197.         IF k=i THEN BEGIN { dieser Block }
  198.           s := s+IntStr(titel[l].nr);
  199.           IF titel[l].typ IN [3,5] THEN s := s+'+';
  200.           write_to_page(0,j,s,0,6,newpg); { Schwarz auf Türkis }
  201.         END ELSE BEGIN { fremder Block }
  202.           s := s+IntStr(block[k].menue);
  203.           write_to_page(0,j,s,6,4,newpg) { Türkis auf Blau }
  204.           IF block[k].menue=0 THEN BEGIN { Block ohne eigene Seite }
  205.             write_to_page(15,j,IntStr(titel[l].nr),3,-1,newpg); { Gelb }
  206.             IF titel[l].typ IN [3,5] THEN char_to_page(19,j,'+',newpg);
  207.           END;
  208.           write_to_page(21,j,' ',-1,0,newpg); { schwarzer Hintergrund }
  209.         END;
  210.         Inc(j);
  211.       END;
  212.       { Gruppen- und normale Seiten dieses Blocks eintragen: }
  213.       j := goff; k := 0; l := block[i].adr;
  214.       WHILE (k<block[i].abh) AND (l<nttl) DO BEGIN
  215.         Inc(l);
  216.         IF titel[l].typ>5 THEN BEGIN
  217.           s := titel[l].name+' '+IntStr(titel[l].nr);
  218.           IF titel[l].typ IN [7,10,11] THEN s := s+'+';
  219.           IF titel[l].typ<8 THEN
  220.             write_to_page(20,j,s,0,3,newpg) { Schwarz auf Gelb }
  221.           ELSE
  222.             write_to_page(20,j,s,0,2,newpg) { Schwarz auf Grün }
  223.           Inc(k); Inc(j);
  224.         END;
  225.       END;
  226.     END;
  227. END;
  228.  
  229. PROCEDURE say_hello{(version: Str80)};
  230. VAR seite: p_onepage;
  231.     i: Integer;
  232. BEGIN
  233.   seite := ^infopage;
  234.   seite^.pg := $1; seite^.sp := $0;
  235.   init_page(seite);
  236.   i := 1;
  237.   write_to_page(0,i,#13,3,4,seite);
  238.   write_to_page(13,i,Copy(version,7,14),-1,-1,seite); Inc(i);
  239.   Inc(i);
  240.   write_to_page(0,i,'Teletext-Browser.  PubScreen: '+pubsname,4,6,seite); Inc(i);
  241.   Inc(i);
  242.   write_to_page(0,i,  '        benötigte Hardware:',7,5,seite); Inc(i);
  243.   write_to_page(0,i,'   I2C-Bus Interface und VT-Decoder',6,-1,seite); Inc(i);
  244.   write_to_page(0,i,'  z. B. das Projekt aus der c''t 7/92',6,-1,seite); Inc(i);
  245.   Inc(i);
  246.   write_to_page(0,i,  '           "i2c.library":',7,5,seite); Inc(i);
  247.   write_to_page(0,i,'       Copyright (c) Brian Ipsen',6,-1,seite); Inc(i);
  248.   Inc(i);
  249.   write_to_page(0,i,  '             Compiler:',7,5,seite); Inc(i);
  250.   write_to_page(0,i,'  KICK-Pascal 2.12 von MAXON Computer',6,-1,seite); Inc(i);
  251.   Inc(i);
  252.   write_to_page(0,i,  '     Programmautor (1992-97):',7,5,seite); Inc(i);
  253.   write_to_page(0,i,' Wilhelm Nöker <wnoeker(a)t-online.de>',6,-1,seite); Inc(i);
  254.   write_to_page(0,i,'     Hertastr. 8, D-44388 Dortmund',6,-1,seite); Inc(i);
  255.   Inc(i);
  256.   write_to_page(0,i,#13'          POSTCARD-WARE',3,4,seite); Inc(i);
  257.   Inc(i);
  258.   write_to_page(0,i,'  "Keep developers developing" ;-)',4,6,seite); Inc(i);
  259.   Inc(i);
  260.   writepage(seite,True);
  261. END;
  262.  
  263. PROCEDURE helpme;
  264. { Hilfstext ausgeben }
  265. VAR i,j: Integer;
  266.     seite: p_onepage;
  267. BEGIN
  268.   seite := ^infopage;
  269.   seite^.pg := $2; seite^.sp := $0;
  270.   init_page(seite);
  271.   i := 1;
  272.   write_to_page(0,i,#13'    VideoText - Kurzanleitung',3,1,seite); Inc(i);
  273.   Inc(i);
  274.   write_to_page(0,i,'          Seitenanforderung:',4,6,seite); Inc(i);
  275.   write_to_page(0,i,' Einfach dreistellige Seitennummern',7,-1,seite); Inc(i);
  276.   write_to_page(0,i,' eintippen, mit (Return) abschließen.',7,-1,seite); Inc(i);
  277.   write_to_page(0,i,' Korrektur möglich mit (<-).',7,-1,seite); Inc(i);
  278.   Inc(i);
  279.   write_to_page(0,i,'             Beispiele:',4,6,seite); Inc(i);
  280.   write_to_page(0,i,' Grundform (reicht meistens):   100',7,-1,seite); Inc(i);
  281.   write_to_page(0,i,' eine bestimmte Unterseite:     100/1',7,-1,seite); Inc(i);
  282.   write_to_page(0,i,' eine beliebige Unterseite:     100/*',7,-1,seite); Inc(i);
  283.   write_to_page(0,i,' selbstnumerierende Seiten:     100*7',7,-1,seite); Inc(i);
  284.   write_to_page(0,i,' Bildschirmüberwachung:         150/.',7,-1,seite); Inc(i);
  285.   write_to_page(0,i,' Dateiprotokoll:                150/!',7,-1,seite); Inc(i);
  286.   FOR j := i-6 TO i-1 DO char_to_page(30,j,#3,seite);
  287.   Inc(i);
  288.   write_to_page(0,i,'          Mausunterstützung:',4,6,seite); Inc(i);
  289.   write_to_page(0,i,' Fast alles auf dem Bildschirm',7,-1,seite); Inc(i);
  290.   write_to_page(0,i,' reagiert irgendwie auf Mausklick und',7,-1,seite); Inc(i);
  291.   write_to_page(0,i,' -doppelklick, insbesondere Zahlen in',7,-1,seite); Inc(i);
  292.   write_to_page(0,i,' den Seitentexten. Einfach ausprobieren',7,-1,seite); Inc(i);
  293.   write_to_page(0,i,' oder für Details in der Anleitung',7,-1,seite); Inc(i);
  294.   write_to_page(0,i,' nachschauen.',7,-1,seite); Inc(i);
  295.   writepage(seite,True);
  296. END;
  297.  
  298. PROCEDURE rexxhelp;
  299. { ARexx-Kommandos auflisten }
  300. VAR i,j,m: Integer;
  301.     k: rxkeyid;
  302.     typ: ARRAY[rxkeyid] OF Integer;
  303.     cnt1,cnt2,cnt3: Integer;
  304.     seite: p_onepage;
  305. BEGIN
  306.   seite := ^infopage;
  307.   seite^.pg := $3; seite^.sp := $0;
  308.   init_page(seite);
  309.   cnt1 := 0; cnt2 := 0; cnt3 := 0;
  310.   FOR k := scn TO nul DO
  311.     CASE k OF
  312.       nul: ;
  313.       top,tos,aut,tok,fif,lif,can,rty,clf,
  314.       l2c,p2c,s2f,s2b,scl,snp,qit: BEGIN
  315.         typ[k] := 1; Inc(cnt1); END;
  316.       laq,gpn,gpi,gst: BEGIN
  317.         typ[k] := 2; Inc(cnt2); END;
  318.       OTHERWISE BEGIN
  319.         typ[k] := 3; Inc(cnt3); END;
  320.     END;
  321.   i := 1;
  322.   write_to_page(0,i,#13'   VideoText - ARexx-Kommandos',7,1,seite); Inc(i);
  323.   Inc(i);
  324.   write_to_page(0,i,'         ARexx-Port: '+portname,4,7,seite); Inc(i);
  325.   Inc(i);
  326.   write_to_page(0,i,'        einfache Kommandos:',7,6,seite); Inc(i);
  327.   j := 0; m := (cnt1 + 2) DIV 3;
  328.   FOR k := scn TO nul DO
  329.     IF typ[k]=1 THEN BEGIN
  330.       write_to_page(1+13*(j DIV m),i+j MOD m,Copy(rxkeys[k],1,20),6,-1,seite);
  331.       Inc(j);
  332.     END;
  333.   i := i + m + 1;
  334.   write_to_page(0,i,'     Kommandos mit Parametern:',7,6,seite); Inc(i);
  335.   j := 0; m := (cnt3 + 2) DIV 3;
  336.   FOR k := scn TO nul DO
  337.     IF typ[k]=3 THEN BEGIN
  338.       write_to_page(1+13*(j DIV m),i+j MOD m,Copy(rxkeys[k],1,20),6,-1,seite);
  339.       Inc(j);
  340.     END;
  341.   i := i + m + 1;
  342.   write_to_page(0,i,'             Anfragen:',7,6,seite); Inc(i);
  343.   j := 0; m := (cnt2 + 1) DIV 2;
  344.   FOR k := scn TO nul DO
  345.     IF typ[k]=2 THEN BEGIN
  346.       write_to_page(1+20*(j DIV m),i+j MOD m,Copy(rxkeys[k],1,20),6,-1,seite);
  347.       Inc(j);
  348.     END;
  349.   i := i + m + 1;
  350.   writepage(seite,True);
  351. END;
  352.  
  353. PROCEDURE testpage;
  354. { alle Farbkombinationen testen }
  355. VAR i,j,k: Integer;
  356.     seite: p_onepage;
  357. BEGIN
  358.   seite := ^infopage;
  359.   seite^.pg := $4; seite^.sp := $0;
  360.   init_page(seite);
  361.   FOR i := 0 TO 7 DO BEGIN
  362.     write_to_page(0,4+2*i,'',-1,i,seite);
  363.     write_to_page(0,5+2*i,'',-1,i,seite);
  364.     FOR j := 0 TO 6 DO BEGIN
  365.       k := (i+j+1) MOD 8;
  366.       write_to_page(2+5*j,4+2*i,'Test',k,-1,seite);
  367.       write_to_page(2+5*j,5+2*i,IntStr(k)+'/'+IntStr(i),k,-1,seite);
  368.     END;
  369.   END;
  370.   writepage(seite,True);
  371. END;
  372.   
  373. PROCEDURE guru{(nr: Byte)};
  374. { Seite, die wie ein "Software Failure" aussieht :-) }
  375. VAR seite: p_onepage;
  376.     i,j,k: Integer;
  377.     s: Str80;
  378. BEGIN
  379.   WITH infopage DO BEGIN  { benutzt nicht init_page()! }
  380.     pg := 0; sp := 24;
  381.     dejavu := False;
  382.     cbits := $4A00;
  383.   END;
  384.   seite := ^infopage;
  385.   { Ist das schon eine Seite mit Guru? }
  386.   IF (seite^.chars[0]<>17) OR (seite^.chars[40]<>17) THEN
  387.     FOR i := 959 DOWNTO 160 DO  { ziemlich sicher nicht }
  388.       IF visblpage=Nil THEN
  389.         seite^.chars[i] := 32
  390.       ELSE
  391.         seite^.chars[i] := visblpage^.chars[i-160];
  392.   i := 0;
  393.   write_to_page(0,i,'<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,l',1,-1,seite); Inc(i);
  394.   write_to_page(0,i,'5 I2C failure. Hit space to continue. j',1,-1,seite); Inc(i);
  395.   write_to_page(0,i,'5                                     j',1,-1,seite);
  396.   s := 'Err: '+intstr(nr)+'  Msg: '+i2c_error[nr];
  397.   write_to_page((41-Length(s)) DIV 2,i,s,-1,-1,seite); Inc(i);
  398.   write_to_page(0,i,'-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.',1,-1,seite); Inc(i);
  399.   { Steuerzeichen für die Grafik stimmen noch nicht ganz: }
  400.   FOR j := 0 TO 3 DO char_to_page(0,j,#17,seite);
  401.   FOR j := 1 TO 2 DO BEGIN
  402.     char_to_page(2,j,#1,seite); char_to_page(38,j,#17,seite); END;
  403.   writepage(seite,True);
  404.   { den Rahmen einmal blinken lassen: }
  405.   seite^.sp := 4; { nur noch 4 Zeilen ausgeben }
  406.   FOR k := 0 TO 1 DO BEGIN
  407.     FOR j := 0 TO 3 DO char_to_page(0,j,Chr(16+k),seite);
  408.     FOR j := 1 TO 2 DO char_to_page(38,j,Chr(16+k),seite);
  409.     Delay(25);
  410.     writepage(seite,True);
  411.   END;
  412. END;
  413.  
  414. FUNCTION hunt{(key: str80; target: p_onepage; blink: Boolean): Boolean};
  415. VAR i, j, k, l, i0: Integer;
  416.     s: str80;
  417.     found: Boolean;
  418. BEGIN
  419.   l := Length(key);
  420.   FOR j := 1 TO l DO key[j] := UpCase(key[j]);
  421.   { keine Sorge: UpCase() konvertiert auch Umlaute }
  422.   found := False;
  423.   WHILE NOT found AND (target<>Nil) DO BEGIN
  424.     FOR i := 0 TO 23 DO BEGIN
  425.       makeascii(target, i, True, s);
  426.       FOR j := 1 TO 40 DO s[j] := UpCase(s[j]);  
  427.       k := Pos(key, s);
  428.       IF k>0 THEN BEGIN 
  429.         found := True; i0 := 40*i+k-1;
  430.       END;
  431.     END;
  432.     IF NOT found THEN
  433.       target := target^.next;
  434.   END;
  435.   IF found THEN BEGIN
  436.     mark_list(False); thispage := target; mark_list(True);
  437.     writepage(thispage,True);
  438.     IF blink THEN BEGIN
  439.       FOR i := 1 TO l DO BEGIN
  440.         s[i] := Chr(thispage^.chars[i0+i-1]); 
  441.         thispage^.chars[i0+i-1] := 32;
  442.       END;
  443.       j := thispage^.pg; k := thispage^.sp;
  444.       thispage^.pg := 0; thispage^.sp := 101*(i0 DIV 40);
  445.       Delay(25);                           
  446.       writepage(thispage,True);
  447.       FOR i := 1 TO l DO
  448.         thispage^.chars[i0+i-1] := Ord(s[i]);
  449.       Delay(25);
  450.       writepage(thispage,True);
  451.       thispage^.pg := j; thispage^.sp := k;
  452.     END;                                                     
  453.   END;
  454.   hunt := found;
  455. END;
  456.  
  457. BEGIN { Initialisierungsteil }
  458.   rxkeys := rxwords("SCAN","TOP","TOPSTAT","AUTOTOP","TOPKILL",
  459.           "FIFO","LIFO","CANCEL","RETRY","CLEARFILE","LIST2CLIP",
  460.           "PAGE2CLIP","SCRN2FRONT","SCRN2BACK","SETCLOCK",
  461.           "SNAPSHOT","QUIT",
  462.           "PRESETS","ENQUEUE","DISPLAY","HUNT","KILL","SAVE",
  463.           "FILENAME","FILEMODE","ICONS","IFFDUMP","LOAD",
  464.           "LOOK_AT_QUEUE","GET_PAGENO","GET_PAGEID","GET_STATION","");
  465.   infopage.next := Nil; infopage.prev := Nil;
  466. END.
  467.