home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 August / IMM0895.BIN / magazin / optix / disk1 / optxppac.set / LISTBOX.INC < prev    next >
Text File  |  1995-05-08  |  19KB  |  579 lines

  1. procedure listbox(xl,yo,zeich,zeil,fnt,txsta,pos,lines,rcol,tcol,bcol)
  2. rem
  3. rem PROCEDURE zur Verwaltung einer Text-Listbox mit ScrollBalken und Select
  4. rem
  5. rem           'Down'          - Taste scrollt abwärts
  6. rem           'Up'            - Taste scrollt aufwärts
  7. rem           'Right'         - Taste scrollt nach rechts
  8. rem           'Left'          - Taste scrollt nach rechts
  9. rem           'Home'          - setzt Liststart und Balken auf Listenanfang
  10. rem           'End'           - setzt Liststart und Balken auf Listenende
  11. rem           'Tab'           - fährt Textausschnitt 8 Zeichen nach rechts
  12. rem           'Ctrl-Tab'      - fährt Textausschnitt 8 Zeichen nach links
  13. rem           'Pageup'        - blättert seitenweise aufwärts
  14. rem           'Pagedn'        - blättert seitenweise abwärts
  15. rem           'Ctrl-PgUp'     - setzt Balken auf Boxanfang
  16. rem           'Ctrl-PgDn'     - setzt Balken auf Boxende
  17. rem           'Esc'           - Bricht Box ab und liefert in gp[19] eine 3
  18. rem           'MausClick re'  - Bricht Box ab und liefert in gp[19] eine 4
  19. rem           'MausClick li'  - positioniert Balken
  20. rem                             -> Wird mit gedrücktem linken Mausbutton
  21. rem                                (=Zeilenauswahl) die Box verlassen, scrollt
  22. rem                                d.Boxinhalt ggfls.in d. entsprechende
  23. rem                                Richtung
  24. rem           'Return'        - bestätigt Auswahl, schließt die Box und
  25. rem                             liefert in der glob. Var 'Back' den
  26. rem                             gewählten - absoluten - Textfeldindex sowie
  27. rem                             in gp[19] den Wert 1
  28. rem
  29. rem Erwartet die globale Stringvariable 'DUM$' als Arbeitsvariable
  30. rem Erwartet das globale Parameterfeld  'GP[1..32]' als Arbeitspuffer
  31. rem
  32. rem Belegt die globale numerische Variable 'Back' als Rückgabevariable.
  33. rem 'Back' kann auch mit einem gewünschten Startindex vorbelegt sein und
  34. rem wird beim Boxaufbau berücksichtigt. Siehe auch bei Parameter 'fnt'.
  35. rem
  36. rem Bis auf den inneren Bereich der Listbox, die Scrollpfeile und die Slide-
  37. rem bereiche nimmt die Routine keine grafische Ausgabe vor, sodaß die Ge-
  38. rem staltung der Box weitgehend frei bleibt. Man kann sich also durch einen
  39. rem Aufruf mit einer negativen 'Zeil'-Angabe (s.dort) erst die rechte und
  40. rem untere Randkoordinate liefern lassen und die Gestaltung selbst vornehmen.
  41. rem Zur Hintergrundrestaurierung der Sliderbereiche bei Sliderbedienung wird
  42. rem per GETPIXEL die aktuelle Hintergrundfarbe der jeweiligen Sliderbox
  43. rem automatisch ermittelt.
  44. rem
  45. rem
  46. rem Parameter:
  47. rem
  48. rem           xl,yo : linke, obere Eckkoordinate
  49. rem
  50. rem           zeich : Zeichenbreite, auf die die Box formatiert werden soll
  51. rem                   Wird in 'zeich' ein Negativwert übergeben, wird d.horiz.
  52. rem                   Boxausdehnung automatisch entsprechend des längsten
  53. rem                   im gewünschten Feldbereich enthaltenen Strings forma-
  54. rem                   tiert
  55. rem
  56. rem           zeil  : Zeilenanzahl der Listboxhöhe. Wird 'zeil' als nega-
  57. rem                   tivwert übergeben, wird nur die Boxausdehnung mit den
  58. rem                   entsprechenden Einstellungen berechnet, die Routine
  59. rem                   wieder verlassen und anschließend die rechte X-Rand-
  60. rem                   koord. in gp[17], sowie die untere Y-Randkoord. in
  61. rem                   gp[18] zurückgeliefert.
  62. rem
  63. rem           fnt   : sysfont-Index: 1, 2 oder 3. Wird 'fnt' als Negativwert
  64. rem                   übergeben, wird ein Exitflag aktiviert, wodurch dann
  65. rem                   ein linksClick(!) außerhalb der listbox als Exit inter-
  66. rem                   pretiert wird. Das Global-Feld GP[] enthält dann im
  67. rem                   Element gp[19] den Wert 2. Dadurch kann eine beliebige
  68. rem                   Clickbox-Verwaltung um die Listbox herum realisiert
  69. rem                   werden, indem anschließend per INBOX die Mausposition
  70. rem                   ermittelt wird. Nötigenfalls kann dann durch Vorbele-
  71. rem                   gung von 'Back' und eine ggfls. geänderte Angabe von
  72. rem                   'pos' erneut in die Listbox zurückgesprungen werden.
  73. rem                   In GP[20] wird generell bei Rückkehr der Index der
  74. rem                   zuletzt obersten Zeile (->'pos') zurückgeliefert.
  75. rem
  76. rem           txsta : Auf den absoluten Feldanfang bezogener Index des ersten
  77. rem                   gewünschten darstellbaren Textfeld-Elementes.
  78. rem                   Wird 'txsta' als Negativwert übergeben, wird ein
  79. rem                   exitflag aktiviert, wodurch dann das Bewegen der Maus
  80. rem                   außerhalb der listbox als Exit interpretiert wird. Das
  81. rem                   Global-Feld GP[] enthält dann im Element gp[19] den
  82. rem                   Wert 5. Dadurch kann ggfls. zur Bedienung mehrerer
  83. rem                   Listboxen zwischen ihnen hin- und hergewechselt werden.
  84. rem                   In GP[20] wird generell bei Rückkehr der Index der
  85. rem                   zuletzt obersten Zeile (->'pos') zurückgeliefert.
  86. rem
  87. rem           pos   : Zu 'Txsta' relativer Index der beim Boxaufbau als erstes
  88. rem                   gezeichneten - obersten - ListenZeile.
  89. rem                   Wird 'pos' als Negativwert übergeben, wird die Listbox
  90. rem                   nur gezeichnet und wieder verlassen. gp[17] und gp[18]
  91. rem                   enthalten die berechneten X-rechts- und Y-unten-Rand-
  92. rem                   koordinaten (wie bei Negativ-'Zeil'!). 'Back' wird
  93. rem                   bei außerhalb liegendem Index in d.aktuell dargstellten
  94. rem                   Boxbereich eingepaßt ('geclippt'). GP[19] enthält bei
  95. rem                   Rückkehr den Wert -1.
  96. rem
  97. rem           lines : maximal gewünschte Anzahl der zu zeichnenden Zeilen.
  98. rem                   Wird 'lines' als Negativwert übergeben, wird das Zeich-
  99. rem                   nen und die Bedienung der Scrollbuttons und -slider,
  100. rem                   sowie des Rollbalkens generell unterdrückt (für reine
  101. rem                   Textfenster-Betrachtung). 'Back' ist anschließend 0.
  102. rem
  103. rem           rcol  : ggfls. Linienfarbe der Scrollboxen rechts und unten
  104. rem           tcol  : zu verwendende Schriftfarbe
  105. rem           bcol  : zu verwendende Schrifthintergrundfarbe
  106. rem                   Der ScrollBalken wird tcol/bcol vertauscht gezeichnet
  107. rem
  108.  
  109. locals(sign,taste,i,x,y)
  110.  
  111.   rem *** ggfls. Tastaturbuffer löschen ***
  112.   if keypressed<>0
  113.     repeat
  114.       wait(50)
  115.     until readkey<>0
  116.   endif
  117.  
  118.   for i := 1 to 32 do
  119.     gp[i] := 0
  120.   next(i)
  121.   gp[1] := 1
  122.   gp[6] := vcolor
  123.   gp[7] := bcolor
  124.   gp[14]:= mcurs
  125.  
  126.   rem gp[1] := max.Stringlänge
  127.   rem gp[2] := wrap-flag
  128.   rem gp[3] := scroll-flag
  129.   rem gp[4] := exitflag
  130.   rem gp[5] := xr/yu-Flag / Draw&Exit-Flag
  131.   rem gp[6] := aktuelle SETCOLOR
  132.   rem gp[7] := aktuelle SETBCOLOR
  133.   rem gp[8] := MOUSEK-Buffer
  134.   rem gp[9] := hor. slidepos
  135.   rem gp[10]:= vert.slidepos
  136.   rem gp[11]:= hor. slidebackgroundcolor
  137.   rem gp[12]:= vert.slidebackgroundcolor
  138.   rem gp[13]:= textflag
  139.   rem gp[14]:= Mauscursor-On/Off-Flag
  140.  
  141.   rem ******** Rückgabe-Parameter ************
  142.   rem gp[17]:= Xrechts-Rückgabe
  143.   rem gp[18]:= Yunten-Rückgabe
  144.   rem gp[19]:= liefert Exit-EreignisCode
  145.   rem         -1 = Box wurde nur gezeichnet u.ohne Bedienung wieder verlassen
  146.   rem          1 = <Return> gedrückt
  147.   rem          2 = Mausklick außerhalb der Box (falls 'fnt' negativ war)
  148.   rem          3 = <Esc> gedrückt
  149.   rem          4 = MausClick rechts
  150.   rem          5 = Maus ohne Klick außerh.der Box (falls 'txsta' negativ war)
  151.   rem gp[20]:= liefert letzten 'pos'-Index
  152.  
  153.   if fnt<0
  154.     fnt:=fnt*(-1)
  155.     gp[4]:=1
  156.   endif
  157.   bound(fnt,1,3)
  158.   font(0)
  159.   sysfont(fnt,1)
  160.   if fnt=2
  161.     fnt:=16
  162.   else
  163.     fnt:=8*(fnt/2+1)+2
  164.   endif
  165.  
  166.   if txsta<0
  167.     txsta:=txsta*(-1)
  168.     gp[4]:=2
  169.   endif
  170.   if zeil<0
  171.     zeil:=zeil*(-1)
  172.     gp[5]:=1
  173.   endif
  174.   if lines<0
  175.     lines:=lines*(-1)
  176.     gp[13]:=1
  177.   endif
  178.   if pos<0
  179.     pos:=pos*(-1)
  180.     gp[5]:=2
  181.   endif
  182.   bound(pos,1,lines)
  183.  
  184.   for i := 0 to lines-1 do
  185.     len(text$[txsta+i],x)
  186.     if x>=gp[1]
  187.        gp[1]:=x
  188.     endif
  189.   next(i)
  190.   if zeich<0
  191.     zeich:=gp[1]
  192.   endif
  193.  
  194.   gp[17]:=xl+zeich*8+4
  195.   if lines>zeil
  196.     gp[3] := 1
  197.     gp[17]:= gp[17]+12
  198.   else
  199.     zeil:=lines
  200.   endif
  201.   gp[18]:=yo+zeil*fnt+1
  202.   if gp[1]>zeich
  203.     gp[2] := 1
  204.     gp[18]:= gp[18]+(fnt+2)
  205.   endif
  206.  
  207.   if gp[13] =1
  208.     if gp[2]=1
  209.       gp[18]:= gp[18]-(fnt+2)
  210.       gp[2] := 0
  211.     endif
  212.     if gp[3]=1
  213.       gp[17]:= gp[17]-12
  214.       gp[3] := 0
  215.     endif
  216.   endif
  217.  
  218.   sign:=1
  219.   bound(pos,1,lines-zeil+1)
  220.  
  221.   if gp[5]<>1
  222.  
  223.     if gp[13] =1
  224.       back:=0
  225.     else
  226.       dec(back,txsta-1)
  227.       bound(back,1,lines)
  228.     endif
  229.  
  230.     if gp[2]=1
  231.       setcolor(rcol)
  232.       line(xl+12,yo+zeil*fnt+2,xl+12,yo+zeil*fnt+2+fnt,0)
  233.       line(xl+zeich*8-10,yo+zeil*fnt+2,xl+zeich*8-10,yo+zeil*fnt+2+fnt,0)
  234.       line(xl+zeich*8+3,yo+zeil*fnt+2,xl+zeich*8+3,yo+zeil*fnt+2+fnt,0)
  235.       line(xl,yo+zeil*fnt+1,xl+zeich*8+2+gp[3]*13,yo+zeil*fnt+1,0)
  236.       setcolor(tcol)
  237.       printat(xl+3,yo+zeil*fnt+4,chr(17))
  238.       printat(xl+zeich*8-6,yo+zeil*fnt+4,chr(16))
  239.     endif
  240.     if gp[3]=1
  241.       setcolor(rcol)
  242.       line(xl+zeich*8+4,yo+fnt,xl+zeich*8+15,yo+fnt,0)
  243.       line(xl+zeich*8+4,yo+zeil*fnt-fnt+1,xl+zeich*8+15,yo+zeil*fnt-fnt+1,0)
  244.       line(xl+zeich*8+3,yo+1,xl+zeich*8+3,yo+zeil*fnt,0)
  245.       setcolor(tcol)
  246.       printat(xl+zeich*8+6,yo+2,chr(30))
  247.       printat(xl+zeich*8+6,yo+zeil*fnt-fnt+3,chr(31))
  248.       setbcolor(bcol)
  249.     endif
  250.  
  251.     if gp[2]=1
  252.       gp[9] :=(zeich-4)*8*(sign-1)/(gp[1]-zeich)
  253.       getpixel(xl+13+gp[9]+5,yo+zeil*fnt+fnt/2+1,gp[11])
  254.     endif
  255.     if gp[3]=1
  256.       gp[10] :=(zeil*fnt-3*fnt-1)*(pos-1)/(lines-zeil)
  257.       getpixel(xl+zeich*8+5,yo+fnt+gp[10]+1+fnt/2,gp[12])
  258.     endif
  259.  
  260.     repeat
  261.       cursoff
  262.  
  263.       for i:=pos to pos+zeil-1 do
  264.         viewport(xl+1,yo+(i-pos)*fnt+1,xl+zeich*8+2,yo+(i-pos)*fnt+fnt)
  265.         dum$:=text$[txsta+i-1]
  266.         mid(dum$,sign,zeich)
  267.         if i<>back
  268.           cbox(0,bcol,0)
  269.           setcolor(tcol)
  270.         else
  271.           cbox(0,tcol,0)
  272.           setcolor(bcol)
  273.         endif
  274.         printat(xl+2,yo+(i-pos)*fnt+2,dum$)
  275.       next(i)
  276.  
  277.       if gp[2]=1
  278.         gp[9] :=((zeich-4)*8-2)*(sign-1)/(gp[1]-zeich)
  279.         viewport(xl+13,yo+zeil*fnt+2,xl+zeich*8-11,gp[18]-1)
  280.         cbox(0,gp[11],0)
  281.         viewport(xl+13+gp[9],yo+zeil*fnt+3,xl+13+gp[9]+10,yo+zeil*fnt+fnt+1)
  282.         cbox(0,tcol,0)
  283.         plateau(rcol,rcol)
  284.       endif
  285.       if gp[3]=1
  286.         gp[10] :=(zeil*fnt-3*fnt-1)*(pos-1)/(lines-zeil)
  287.         viewport(xl+zeich*8+4,yo+fnt+1,gp[17]-1,yo+zeil*fnt-fnt)
  288.         cbox(0,gp[12],0)
  289.         viewport(xl+zeich*8+5,yo+fnt+gp[10]+1,xl+zeich*8+14,yo+fnt+gp[10]+1+fnt)
  290.         cbox(0,tcol,0)
  291.         plateau(rcol,rcol)
  292.       endif
  293.  
  294.       if gp[5]=0
  295.         curson(mousex,mousey)
  296.  
  297.         repeat
  298.  
  299.           i:=1
  300.           repeat
  301.             inbox(xl+1,yo+1,xl+zeich*8+2,yo+zeil*fnt+2,i)
  302.             if mousek<>gp[8]
  303.               i:=0
  304.             endif
  305.             if mousex<>x
  306.               i:=0
  307.             endif
  308.             if mousey<>y
  309.               i:=0
  310.             endif
  311.             if mousek=0
  312.               taste:=readkey
  313.               if taste<>0
  314.                 i:=0
  315.               endif
  316.             endif
  317.           until i=0
  318.  
  319.           gp[8]:=mousek
  320.           x    :=mousex
  321.           y    :=mousey
  322.  
  323.           inbox(xl,yo+1,xl+zeich*8+3+gp[3]*12,yo+zeil*fnt+1+gp[2]*(fnt+1),i)
  324.           if i:=true
  325.             if mousek=1
  326.               taste:=-1
  327.               back:=(y-yo-1)/fnt+pos
  328.               bound(back,pos,pos+lines-1)
  329.             endif
  330.           else
  331.             if taste=-1
  332.               if mousek=1
  333.                 if mousex>xl+zeich*8+1
  334.                   taste:=right
  335.                 endif
  336.                 if mousex<xl
  337.                   taste:=left
  338.                 endif
  339.                 if mousey>yo+zeil*fnt+1
  340.                   taste:=down
  341.                 endif
  342.                 if mousey<yo
  343.                   taste:=up
  344.                 endif
  345.               endif
  346.             else
  347.               if mousek=1
  348.                 if taste=0
  349.                   if gp[4]=1
  350.                     gp[19]:=2
  351.                   endif
  352.                 endif
  353.               else
  354.                 if gp[4]=2
  355.                   gp[19]:=5
  356.                 endif
  357.               endif
  358.             endif
  359.           endif
  360.           if taste=ret
  361.             gp[19]:=1
  362.           endif
  363.           if taste=esc
  364.             gp[19]:=3
  365.           endif
  366.           if mousek=2
  367.             gp[19]:=4
  368.           endif
  369.           if gp[19]>0
  370.             taste:=-1
  371.           endif
  372.  
  373.           if back>0
  374.             if gp[2]=1
  375.               selbox(xl+13,yo+zeil*fnt+2,xl+zeich*8-11,gp[18]-1,i)
  376.               if i:=true
  377.                 inbox(xl+13+gp[9],yo+zeil*fnt+3,xl+13+gp[9]+10,yo+zeil*fnt+fnt+1,i)
  378.                 if i:=true
  379.                   gp[19]:=0
  380.                   x:=mousex
  381.                   y:=mousey
  382.                   cursbound(xl+13,y,xl+zeich*8-21,y)
  383.                   bound(x,xl+13,xl+zeich*8-20)
  384.                   cursmove(x,y)
  385.                   cursoff
  386.                   repeat
  387.                     x:=mousex
  388.                     gp[9] :=x-(xl+13)
  389.                     viewport(xl+13,yo+zeil*fnt+2,xl+zeich*8-11,gp[18]-1)
  390.                     cbox(0,gp[11],0)
  391.                     viewport(xl+13+gp[9],yo+zeil*fnt+3,xl+13+gp[9]+10,yo+zeil*fnt+fnt+1)
  392.                     decviewport
  393.                     cbox(0,tcol,0)
  394.                     plateau(rcol,rcol)
  395.                     repeat
  396.                       if mousek=0
  397.                         x:=-1
  398.                       endif
  399.                     until mousex<>x
  400.                   until mousek=0
  401.                   curson(mousex,mousey)
  402.                   cursbound(0,0,xmax,ymax)
  403.                   sign :=(gp[1]-zeich)*gp[9]/((zeich-4)*8-8)
  404.                 else
  405.                   if mousex<xl+13+gp[9]+1
  406.                     rem    Ctrl-tab
  407.                     taste:=37888
  408.                   else
  409.                     taste:=tab
  410.                   endif
  411.                 endif
  412.               endif
  413.             endif
  414.             if gp[3]=1
  415.               selbox(xl+zeich*8+4,yo+fnt+1,gp[17]-1,yo+zeil*fnt-fnt,i)
  416.               if i:=true
  417.                 inbox(xl+zeich*8+5,yo+fnt+gp[10]+1,xl+zeich*8+14,yo+fnt+gp[10]+1+fnt,i)
  418.                 if i:=true
  419.                   gp[19]:=0
  420.                   x:=mousex
  421.                   y:=mousey
  422.                   cursbound(x,yo+fnt+2,x,yo+zeil*fnt-2*fnt+2)
  423.                   bound(y,yo+fnt+2,yo+zeil*fnt-2*fnt+1)
  424.                   cursmove(x,y)
  425.                   cursoff
  426.                   repeat
  427.                     y:=mousey
  428.                     gp[10] :=y-(yo+fnt)
  429.                     viewport(xl+zeich*8+4,yo+fnt+1,gp[17]-1,yo+zeil*fnt-fnt)
  430.                     cbox(0,gp[12],0)
  431.                     viewport(xl+zeich*8+5,yo+fnt+gp[10]-1,xl+zeich*8+14,yo+fnt+gp[10]-1+fnt)
  432.                     decviewport
  433.                     cbox(0,tcol,0)
  434.                     plateau(rcol,rcol)
  435.                     repeat
  436.                       if mousek=0
  437.                         y:=-1
  438.                       endif
  439.                     until mousey<>y
  440.                   until mousek=0
  441.                   curson(mousex,mousey)
  442.                   cursbound(0,0,xmax,ymax)
  443.                   pos  :=(lines-zeil)*(gp[10]-2)/((zeil-3)*fnt-1)
  444.                 else
  445.                   if mousey<yo+fnt+gp[10]+1
  446.                     taste:=pgup
  447.                   else
  448.                     taste:=pgdn
  449.                   endif
  450.                 endif
  451.               endif
  452.             endif
  453.  
  454.             if gp[2]=1
  455.               selbox(xl+1,yo+zeil*fnt+1,xl+10,gp[18]-1,i)
  456.               if i:=true
  457.                 taste:=left
  458.               endif
  459.               selbox(xl+zeich*8-10,yo+zeil*fnt+1,xl+zeich*8+3,gp[18]-1,i)
  460.               if i:=true
  461.                 taste:=right
  462.               endif
  463.               wait(10)
  464.             endif
  465.  
  466.             if gp[3]=1
  467.               selbox(xl+zeich*8+3,yo+zeil*fnt-fnt-1,gp[17],yo+zeil*fnt,i)
  468.               if i:=true
  469.                 taste:=down
  470.               endif
  471.               selbox(xl+zeich*8+3,yo+1,gp[17]-1,yo+fnt-1,i)
  472.               if i:=true
  473.                 taste:=up
  474.               endif
  475.               wait(10)
  476.             endif
  477.           endif
  478.  
  479.           if taste=tab
  480.             inc(sign,8)
  481.           endif
  482.           if taste=37888
  483.             rem                         Ctrl-Tab
  484.             dec(sign,8)
  485.           endif
  486.           if taste=right
  487.             inc(sign,1)
  488.             if sign>(gp[1]-zeich+1)
  489.               taste:=down
  490.             endif
  491.           endif
  492.           if taste=left
  493.             dec(sign,1)
  494.             if sign<1
  495.               taste:=up
  496.               sign:=1
  497.             endif
  498.           endif
  499.           bound(sign,1,gp[1]-zeich+1)
  500.  
  501.           if taste=29440
  502.             rem                           Ctrl-left
  503.             sign :=1
  504.           endif
  505.           if taste=29696
  506.             rem                           Ctrl-right
  507.             sign :=gp[1]-zeich+1
  508.           endif
  509.           if taste=home
  510.             sign :=1
  511.             pos  :=1
  512.             back :=pos
  513.           endif
  514.           if taste=33792
  515.             rem                           Ctrl-pgup
  516.             sign :=1
  517.             back :=pos
  518.           endif
  519.           if taste=end
  520.             pos  :=lines-zeil+1
  521.             sign :=1
  522.             back :=pos+zeil-1
  523.           endif
  524.           if taste=30208
  525.             rem                           Ctrl-pgdn
  526.             sign :=1
  527.             back :=pos+zeil-1
  528.           endif
  529.           if taste=up
  530.             if (back-pos)>0
  531.               dec(back,1)
  532.             else
  533.               dec(back,1)
  534.               dec(pos,1)
  535.             endif
  536.           endif
  537.           if taste=down
  538.             if (pos+zeil-back)>1
  539.               if back=0
  540.                 inc(pos,1)
  541.               else
  542.                inc(back,1)
  543.               endif
  544.             else
  545.               inc(back,1)
  546.               inc(pos,1)
  547.             endif
  548.           endif
  549.           if taste=pgup
  550.             dec(back,zeil-1)
  551.             dec(pos,zeil-1)
  552.           endif
  553.           if taste=pgdn
  554.             inc(back,zeil)
  555.             inc(pos,zeil)
  556.           endif
  557.           bound(pos,1,lines-zeil+1)
  558.           bound(back,pos,pos+zeil-1)
  559.           if gp[13] =1
  560.             back:=0
  561.           endif
  562.         until taste<>0
  563.         gp[20]:=pos
  564.       else
  565.          gp[19]:=-1
  566.       endif
  567.     until gp[19]<>0
  568.     if back>0
  569.       back:=back+txsta-1
  570.     endif
  571.   endif
  572.   cursoff
  573.   if gp[14]<>0
  574.     curson(mousex,mousey)
  575.   endif
  576.   setcolor(gp[6])
  577.   setbcolor(gp[7])
  578. return
  579.