{ >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.