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

    {
    >Here's some neat lightbars that I made.  REALLY easy to use, pretty
    >simple.
    >Feel free to use it, like I care.. Just don't yell at me fer what it
    >does. }

    Program lite;

    Uses crt;

    Type

     literec = Record   {Litebar config rec}
                  choices: Integer;
                  menu: Array [1..25] Of String;
                  othercolor, barcolor: Integer;
                End;

    Function litebar (lite: literec): Integer;
    Procedure HideCursor; Assembler;
    Asm
      MOV   AX, $0100         {Hides cursor}
      MOV   CX, $2607
      Int   $10
    End;
    Procedure ShowCursor; Assembler;
    Asm
      MOV   AX, $0100
      MOV   CX, $0506         {Unhides cursor}
      Int   $10
    End;
    Label ack, stop;
    Var
      on: Integer;
      X, Y: Integer;
      key: Char;          {Various vars}
      okey: Byte;
      lastone: Integer;
      litesize: Integer;

    Begin
      hidecursor;
      X := WhereX;   {Record starting positions}
      Y := WhereY;
      TextColor (lite. othercolor);  {Change color}
      TextBackground (0);            {Change background}
      litesize := 0;
      For on := 1 To lite. choices Do Begin  {This for loop writes the options.}
        GotoXY (X, Y + on - 1);
        WriteLn (lite. menu [on] );
        If Length (lite. menu [on] ) > litesize Then litesize := Length
    (lite. menu [on] );
      End;

      For on := 1 To lite. choices Do Begin  {This for loop makes the >lightbar}
        If Length (lite. menu [on] ) < litesize Then Begin {the same >length}
          Repeat
            lite. menu [on] := lite. menu [on] + ' ';
          Until Length (lite. menu [on] ) >= litesize;
        End;
      End;
      on := 1;
      lastone := 999;
      Repeat   {Main loop}
        If lastone <> 999 Then Begin  {redraw last option (reset background}
        GotoXY (X, Y + lastone - 1);
          TextBackground (0);
          WriteLn (lite. menu [lastone] );
        End;
        GotoXY (X, Y + on - 1);         {go to option}
        TextBackground (lite. barcolor); {change color}
        WriteLn (lite. menu [on] );  {rewrite current option (background)}
        ack: Repeat key := ReadKey Until key In [#13, #0];  {get a key}
        If key = #0 Then Begin  {was it extended? process it.}
          okey := Ord (ReadKey);
          If (okey = 72) Then Begin  {up}
            If on = 1 Then Begin lastone := on; on := lite. choices End
    Else If on <> 1 Then Begin lastone := on; Dec (on); End;
          End
          Else If (okey = 80) Then Begin {down}
            If on = lite. choices Then Begin lastone := on; on := 1 End
    Else If (on < lite. choices) Then Begin lastone := on;
              Inc (on);
            End;
          End Else Goto ack;
          Continue;
        End Else
          If key = #13 Then Goto stop Else  {enter}
            If key = ' ' Then If on = lite. choices Then on := 1 Else If
    on < lite. choices Then Dec (on) Else
              Goto ack;
      Until 5 < 4; {loop.}
      stop:  {end it}
      litebar := on;  {tell us what they picked}
      ShowCursor;  {turn cursor back on}
    End;

    Var picked: Integer;
        litecfg: literec;
    Begin
      TextBackground (0); {Reset backround}
      ClrScr;
      GotoXY (4, 4); {where is menu going to be?}
      litecfg. choices := 4;  {set choices}
      litecfg. menu [1] := 'Player Editor';     {--\               }
      litecfg. menu [2] := 'Software Editor';   {  |____set choices}
      litecfg. menu [3] := 'CPU Editor';        {  |               }
      litecfg. menu [4] := 'Quit';              {--/               }
      litecfg. othercolor := 3;  {Set foreground color}
      litecfg. barcolor := 1;    {Set background color}
      picked := litebar (litecfg);  {Run the lightbars!}
      TextBackground (0);   {change background back (req'd)}
      ClrScr; {clear it}
      WriteLn ('You picked number ', picked, ', which is ', litecfg. menu
    [picked], '.');
      {/\   Tell them what they did   /\}
    End.

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