Unit PortAESx; Interface Procedure SaveScreen ( xtl, ytl, xbr, ybr : Byte; Var buffer : Pointer ); Procedure RestoreScreen ( xtl, ytl, xbr, ybr : Byte; buffer : Pointer ); Procedure DrawBox ( xtl, ytl, xbr, ybr, lineType : Byte ); Function Menu ( xtl, ytl : Byte; MenuTitle, MenuText, DefaultsText : String; Var selectedItem : Byte ) : Boolean; Procedure BoxAreaCalculation ( xtl, ytl : Byte; TitleText, MenuText, DefaultsText : String; Var xbr, ybr : Byte ); Procedure MessageWindow ( xtl, ytl : Byte; WindowTitle, MessageText : String ); Procedure ErrorWindow ( xtl, ytl : Byte; ErrorText : String ); Implementation Uses Dos; Procedure SaveScreen ( xtl, ytl, xbr, ybr : Byte; Var buffer : Pointer ); Var reg : Registers; Begin GetMem(buffer, (((xbr+2)-(xtl+1))*((ybr+2)-(ytl+1)))); reg.ah := $08; reg.al := 0; reg.bh := 0; reg.dl := xtl; reg.dh := ytl; reg.cl := xbr; reg.ch := ybr; reg.ds := Seg ( buffer ); reg.si := Ofs ( buffer ); Intr ( $60, reg ); End; Procedure RestoreScreen ( xtl, ytl, xbr, ybr : Byte; buffer : Pointer ); Var reg : Registers; Begin reg.ah := $08; reg.al := 2; reg.bh := 0; reg.dl := xtl; reg.dh := ytl; reg.cl := xbr; reg.ch := ybr; reg.ds := Seg ( buffer ); reg.si := Ofs ( buffer ); Intr ( $60, reg ); FreeMem(buffer, (((xbr+2)-(xtl+1))*((ybr+2)-(ytl+1)))); End; Procedure DrawBox ( xtl, ytl, xbr, ybr, lineType : Byte ); Var reg : Registers; Begin reg.ah := $09; reg.al := lineType; reg.bh := 0; reg.dl := xtl; reg.dh := ytl; reg.cl := xbr; reg.ch := ybr; Intr ( $60, reg ); End; Function Menu ( xtl, ytl : Byte; MenuTitle, MenuText, DefaultsText : String; Var selectedItem : Byte ) : Boolean; Var reg : Registers; Begin Menu := False; selectedItem := 0; MenuTitle := MenuTitle + Chr ( 0 ); MenuText := MenuTitle + MenuText + Chr ( 0 ) + Chr ( 0 ); DefaultsText := DefaultsText + Chr ( 0 ) + Chr ( 0 ); reg.ah := $0F; reg.al := 1; reg.bh := 0; reg.ch := 0; reg.cl := 0; reg.dl := xtl; reg.dh := ytl; reg.ds := Seg ( MenuText ); reg.si := Ofs ( MenuText ) + 1; reg.es := Seg ( DefaultsText ); reg.di := Ofs ( DefaultsText ) + 1; Intr ( $60, reg ); If reg.al <> 255 Then Begin selectedItem := reg.al; Menu := True; End; End; Procedure BoxAreaCalculation ( xtl, ytl : Byte; TitleText, MenuText, DefaultsText : String; Var xbr, ybr : Byte ); Var reg : Registers; Begin TitleText := TitleText + Chr ( 0 ); MenuText := TitleText + MenuText + Chr ( 0 ) + Chr ( 0 ); DefaultsText := DefaultsText + Chr ( 0 ) + Chr ( 0 ); reg.ah := $10; reg.dl := xtl; reg.dh := ytl; reg.ds := Seg ( MenuText ); reg.si := Ofs ( MenuText ) + 1; reg.es := Seg ( DefaultsText ); reg.di := Ofs ( DefaultsText ) + 1; Intr ( $60, reg ); xbr := reg.cl; ybr := reg.ch; End; Procedure MessageWindow ( xtl, ytl : Byte; WindowTitle, MessageText : String ); Var reg : Registers; Begin WindowTitle := WindowTitle + Chr ( 0 ); MessageText := MessageText + Chr ( 0 ) + Chr ( 0 ); MessageText := WindowTitle + MessageText; reg.ah := $12; reg.dl := xtl; reg.dh := ytl; reg.ds := Seg ( MessageText ); reg.si := Ofs ( MessageText ) + 1; Intr ( $60, reg ); End; Procedure ErrorWindow ( xtl, ytl : Byte; ErrorText : String ); Var reg : Registers; Begin ErrorText := ErrorText + Chr ( 0 ) + Chr ( 0 ); reg.ah := $14; reg.bh := 0; reg.dl := xtl; reg.dh := ytl; reg.cx := 1; reg.ds := Seg ( ErrorText ); reg.si := Ofs ( ErrorText ) + 1; Intr ( $60, reg ); End; Begin End.