Uses CRT, Graph; Type mnuOptions = (optOne, optTwo, optThree, optFour, optExit); Const EnterPressed = #13; EscPressed = #27; HomePressed = #71; EndPressed = #79; UpPressed = #72; DownPressed = #80; StartMenuX = 200; StartMenuY = 150; MenuWidthY = 18; MainMenu : Array[mnuOptions] Of String[23] = ( ' first ', ' second ', ' third ', ' fourth ', ' fifth ' ); Procedure InitGraphix; Var grDriver : Integer; grMode : Integer; ErrCode : Integer; Begin grDriver := Detect; InitGraph(grDriver, grMode, ''); ErrCode := GraphResult; If ErrCode <> grOk Then Begin WriteLn('Graphics error: ', GraphErrorMsg(ErrCode)); WriteLn('Press key to halt:'); ReadLn; Halt(1) End; SetBkColor(Black); ClearDevice End; Procedure RefreshWindow; Var Index : mnuOptions; Begin SetColor(LightCyan); For Index := low(mnuOptions) To high(mnuOptions) Do OutTextXY(StartMenuX, StartMenuY + ord(Index) * MenuWidthY, MainMenu[Index]); End; Procedure SetChoiseColor(Ind : mnuOptions); Begin SetColor(RED); OutTextXY(StartMenuX, StartMenuY + ord(Ind) * MenuWidthY, MainMenu[Ind]); End; Procedure ResetChoiseColor(Ind : mnuOptions); Begin SetColor(LightCyan); OutTextXY(StartMenuX, StartMenuY + ord(Ind) * MenuWidthY, MainMenu[Ind]); End; Function Menu: mnuOptions; Var MenuResult : mnuOptions; Function MarkerUp : Boolean; Begin MarkerUp := False; If MenuResult > low(mnuOptions) Then Begin ResetChoiseColor(MenuResult); SetChoiseColor(pred(MenuResult)); MarkerUp := True; End End; Function MarkerDown : Boolean; Begin MarkerDown := False; If MenuResult < high(mnuOptions) Then Begin ResetChoiseColor(MenuResult); SetChoiseColor(succ(MenuResult)); MarkerDown := True; End; End; Begin RefreshWindow; MenuResult := low(mnuOptions); SetChoiseColor(menuResult); Repeat Case readkey Of #0 : Begin Case ReadKey Of UpPressed : If MarkerUp Then Dec(MenuResult); DownPressed : If MarkerDown Then Inc(MenuResult); HomePressed : While MarkerUp Do Dec(MenuResult); EndPressed : While MarkerDown Do Inc(MenuResult); End; End; EnterPressed : Begin Menu := MenuResult; Exit; End; End; Until False; End; Function MenuScreen : mnuOptions; Begin ClearDevice; setcolor(lightcyan); MoveTo( 185, 45 ); LineTo( 185, 400 ); LineTo( 400, 400 ); LineTo( 400, 45 ); LineTo( 185, 45 ); MenuScreen := Menu; End; {$L EGAVGA.OBJ} Procedure EGAVGADriverProc; External; Var f: boolean; BEGIN If RegisterBGIDriver(@EGAVGADriverProc) < 0 Then Halt(101); InitGraphix; f := false; Repeat Case menuScreen Of optOne :; optTwo :; optThree :; optFour :; optExit : f := true; End; Until F; CloseGraph; END.