[Back to MENU SWAG index]  [Back to Main SWAG index]  [Original]

(*
  Some people asked me about a new version of light_bar Here it is, enjoy it!

  This is a simple LIGHTBAR example.
  You can change and distribute it freely.
  Any doubt, bug or suggestion
  please, E-Mail me at:

  arlindo@solar.com.br

  Or write me:

  SQS 113 Bl "G" Apto 102
  Brazil - Bras¡lia - DF
  Cep: 70.376-070

  Written By ZîU$ - Rodrigo M. Silveira - Brazil -  Brasilia
*)

Program Light_bar;

uses crt;

const { Constants }
  colort = 1; { Bacground color of tagged entries }
  sc = 'CoDeD By G0D ZEU$'; { The Little Scrooler }

var { Variables }
  Local    : Array[1..4] of String; { The Option variable }
  Desc     : Array[1..4] of String; { The Descriptions }
  by       : Byte; { Needed to to a for loop }

Function LightBar(n:Byte;var lo,De:Array of String):Byte;
{ n = Number of options, Lo = Option string, De = Description String }
{ It will return the Number of option selected                       }
var
  k      : char;
  b,c,i  : byte;
  ii     : Boolean;

  Procedure scr; { The little scrooler procedure }
  begin
    inc(i);
    TextAttr:=$0F; { Set Background to 0 and TextColor to 15 = $F }
    if i = 80-length(sc) then ii := true;
    if ii Then i := i-2;
    if i = 1 then ii := false;
    gotoxy(i,1);
    write(sc);
    while (port[$3da] and 8)<>0 do; { retrace, better than a delay ! }
    while (port[$3da] and 8)=0 do;  { We can Read the Scrool easily  }
    Fillchar(MEM[$B800:0],160,0);
  end;

  Procedure start; { Writes all the options with 1 tagged }
  begin
    TextAttr:=$0F;
    for by := 1 to n-1 do
    begin
      gotoxy((80-Length(lo[by])) div 2,((25-n) div 2)+by+1);
      {      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Centralize}
      write(lo[by]);
    end;
    TextAttr:=$1F;
    gotoxy((80-Length(lo[0])) div 2,((25-n) div 2)+1);
    write(lo[0]);
    gotoxy(1,25); clreol;
    gotoxy((80-length(De[0])) div 2,25);
    write(de[0]);
  end;

  Procedure St; { tag new option and untag the old }
  begin
    if b<254 Then Begin
      { var c = Old Tagged; b = New tagged }
      gotoxy((80-Length(lo[c-1])) div 2,((25-n) div 2)+c);
      textbackground(0);
      write(lo[c-1]);
      gotoxy((80-Length(lo[b-1])) div 2,((25-n) div 2)+b);
      textbackground(colort);
      write(lo[b-1]);
      gotoxy(1,25); clreol;
      gotoxy((80-length(De[b-1])) div 2,25);
      write(de[b-1]);
    end;
  end;

  procedure re; { Procedure to get the key and explore it... }
  begin
    b := 1;
    i := 1;
    ii := false;
    repeat
      repeat
        repeat
          scr; { No key pressed? let's Scrool until keypressed }
        until keypressed;
        k := upcase(readkey);
      until k in [#72,#75,#80,#77,#27,#13,'A','Z','Q']; { Bad key? BACK! }
      c := b; { Save old option }
      case k of
        #72,#75,'A' : dec(b); { UP }
        #80,#77,'Z' : inc(b); { DOWN }
        #27,'Q' : b := 255;   { ESC }
        #13 : b := 254;       { ENTER }
      end;
      if b = n+1 then b := 1; { it's beyond the limit, go back to 1 }
      if b = 0 then b := n;   { Got an zero, go to the end }
      if b = 254 Then         { HEI! WE GOT THE OPTION! }
      Begin
        Lightbar:=c;          { Tell the function that we found it }
        b:=255;               { Exit code }
      end;
      st;
    until b = 255;
  end;

{Main par of function lightbar }
begin
  start;
  re;
end;

var ab:byte;

Begin { Start of the program }
  Asm mov ax,$3;int $10;mov ax,$0100;mov cx,$2607;int $10;end;
  { Start text mode 80x40 and Hide cursor }
  TextAttr:=$0F; { set Background=0 Textcolor=15=($F) }
  { The Option Strings definition }
  Local[1]:='CoDeD By Rodrigo Silveira';
  Local[2]:='Sound';
  Local[3]:='About the function';
  Local[4]:='The Description of this option is written Down Here';
  { The Description Strings definition }
  Desc[1]:='arlindo@solar.com.br';
  Desc[2]:='This Text Describes what option sound will do';
  Desc[3]:='This function returns the number of the tagged line';
  Desc[4]:='Done 4U';
  ab := Lightbar(4,local,desc);
  TEXTATTR:=$07;
  Asm mov ax,$3;int $10;end;
  Write('Option ',ab,' Selected');
end.
{ Written By ZîU$ - Rodrigo M. Silveira - Brasil - Brasilia }

[Back to MENU SWAG index]  [Back to Main SWAG index]  [Original]