home *** CD-ROM | disk | FTP | other *** search
-
- ----------------------------------------------------------------------------
-
-
- It is VITAL to provide the correct version number of the compiler
- you are using, else PIBMENUS will take off for hyperspace and very
- likely take your machine with it, requiring a re-boot.
-
- You must also replace the following routines with the revised
- versions of those routines provided here:
-
- -- Upper_Left_Column
- -- Upper_Left_Row
- -- Draw_Menu_Frame
-
- The revised versions follow. These routines will work correctly
- with either version 2 or version 3, as long as the variable
- 'Menu_Turbo_Version' has been set correctly as described above.
- Also see the final comment after the following code.
-
-
- ----------------------------------------------------------------------------
-
- (*----------------------------------------------------------------------*)
- (* TURBO Pascal Window Location Routines *)
- (*----------------------------------------------------------------------*)
- (* *)
- (* These routines and constants give the four corners of the current *)
- (* Turbo window: *)
- (* *)
- (* Lower right-hand corner: (Lower_Right_Column, Lower_Right_Row) *)
- (* Upper left_hand corner: (Upper_Left_Column, Upper_Right_Column) *)
- (* *)
- (*----------------------------------------------------------------------*)
-
- (* Lower right corner of *)
- (* current TURBO window *)
- Var
- Lower_Right_Column : Byte ABSOLUTE Cseg:$016A;
- Lower_Right_Row : Byte ABSOLUTE Cseg:$016B;
-
- (*----------------------------------------------------------------------*)
- (* Upper_Left_Column --- Upper Left Col. Position of current window *)
- (*----------------------------------------------------------------------*)
-
- Function Upper_Left_Column : Integer;
-
- (* *)
- (* Function: Upper_Left_Column *)
- (* *)
- (* Purpose: Returns upper left col. pos. of current TURBO window *)
- (* *)
- (* Calling Sequence: *)
- (* *)
- (* Pos := Upper_Left_Column : Integer; *)
- (* *)
- (* Calls: Mem *)
- (* *)
-
- Begin (* Upper_Left_Column *)
-
- IF Menu_Turbo_Version = 2 THEN
- Upper_Left_Column := MEM[ Dseg:$0156 ] + 1
- ELSE
- Upper_Left_Column := MEM[ Dseg:$0004 ] + 1;
-
- End (* Upper_Left_Column *);
-
- (*----------------------------------------------------------------------*)
- (* Upper_Left_Row --- Upper Left Row Position of current window *)
- (*----------------------------------------------------------------------*)
-
- Function Upper_Left_Row : Integer;
-
- (* *)
- (* Function: Upper_Left_Row *)
- (* *)
- (* Purpose: Returns upper left row pos. of current TURBO window *)
- (* *)
- (* Calling Sequence: *)
- (* *)
- (* Pos := Upper_Left_Row : Integer; *)
- (* *)
- (* Calls: Mem *)
- (* *)
-
- Begin (* Upper_Left_Row *)
-
- IF Menu_Turbo_Version = 2 THEN
- Upper_Left_Row := Mem[ Dseg:$0157 ] + 1
- ELSE
- Upper_Left_Row := Mem[ Dseg:$0005 ] + 1;
-
- End (* Upper_Left_Row *);
-
- (*----------------------------------------------------------------------*)
- (* Draw_Menu_Frame --- Draw a Frame *)
- (*----------------------------------------------------------------------*)
-
- Procedure Draw_Menu_Frame( UpperLeftX, UpperLeftY,
- LowerRightX, LowerRightY : Integer;
- Frame_Color, Title_Color : Integer;
- Menu_Title: AnyStr );
-
- (* *)
- (* Procedure: Draw_Menu_Frame *)
- (* *)
- (* Purpose: Draws a titled frame using PC graphics characters *)
- (* *)
- (* Calling Sequence: *)
- (* *)
- (* Draw_Menu_Frame( UpperLeftX, UpperLeftY, *)
- (* LowerRightX, LowerRightY, *)
- (* Frame_Color, Title_Color : Integer; *)
- (* Menu_Title: AnyStr ); *)
- (* *)
- (* UpperLeftX, UpperLeftY --- Upper left coordinates *)
- (* LowerRightX, LowerRightY --- Lower right coordinates *)
- (* Frame_Color --- Color for frame *)
- (* Title_Color --- Color for title text *)
- (* Menu_Title --- Menu Title *)
- (* *)
- (* Calls: GoToXY *)
- (* Window *)
- (* ClrScr *)
- (* *)
- (* Remarks: *)
- (* *)
- (* The area inside the frame is cleared after the frame is *)
- (* drawn. If a box without a title is desired, enter a null *)
- (* string for a title. *)
-
- Var
- I : Integer;
- L : Integer;
- LT : Integer;
-
- Begin (* Draw_Menu_Frame *)
-
- (* Move to top left-hand corner of menu *)
- GoToXY( UpperLeftX, UpperLeftY );
-
- L := LowerRightX - UpperLeftX;
- LT := LENGTH( Menu_Title );
- (* Adjust title length if necessary *)
- If LT > ( L - 5 ) Then Menu_Title[0] := CHR( L - 5 );
-
- (* Color for frame *)
- TextColor( Frame_Color );
- (* Write upper left hand corner and title *)
- If LT > 0 Then
- Begin
- Write('╒[ ');
- TextColor( Title_Color );
- Write( Menu_Title );
- TextColor( Frame_Color );
- Write(' ]');
- End
- Else
- Write('╒════');
- (* Draw remainder of top of frame *)
-
- For I := ( UpperLeftX + LT + 5 ) To ( LowerRightX - 1 ) Do Write('═');
-
- Write('╕');
- (* Draw sides of frame *)
-
- For I := UpperLeftY+1 To LowerRightY-1 Do
- Begin
- GoToXY( UpperLeftX , I ); Write( '│' );
- GoToXY( LowerRightX , I ); Write( '│' );
- End;
-
- (* Draw bottom of frame *)
-
- GoToXY( UpperLeftX, LowerRightY );
- Write( '╘' );
-
- For I := UpperLeftX+1 To LowerRightX-1 Do Write( '═' );
- Write( '╛' );
-
- (* Establish scrolling window area *)
-
- Window( UpperLeftX+1, UpperLeftY+1, LowerRightX-2, LowerRightY-1 );
-
- (* Clear out the window area *)
- ClrScr;
- (* Ensure proper color for text *)
- TextColor( Title_Color );
-
- End (* Draw_Menu_Frame *);
-
-
- ----------------------------------------------------------------------------
-
- Please advise me of any other problems you encounter with PIBMENUS.
- And, if you make any improvements, please leave me a note as well,
- so that I can incorporate them in future versions of PIBMENUS.
- You can reach me on either of the following two Chicago BBSs:
-
- Gene Plantz's BBS (312) 882 4227
- Ron Fox's BBS (312) 940 6496
-
- Thanks,
- Phil Burns