2014-11-06 29 views
1

我正在尋找一種方法來獲取FPC下控制檯視頻行和列的數量。我正在尋找最便攜的方式,但至少有一個可以在Windows(最好也是在Linux下)下工作。FreePascal控制檯視頻行和列

從舊的Turbo Pascal日子裏,我寫下了函數,但它們不會在FPC下編譯,而且在彙編中它們不是很便攜。

//Return the number of video rows 
function GetVideoY: Byte; assembler; 
asm 
    mov  ax,$40 
    mov  es,ax 
    mov  al,es:$84 
    inc  al 
end; { GetVideoY } 

//Return the number of video columns 
function GetVideoX: Byte; assembler; 
asm 
    mov  ax,$40 
    mov  es,ax 
    mov  al,es:$4A 
end; { GetVideoX } 

UPDATE: 基於正確答案的建議上述程序成爲:

//Return the number of video rows 
function GetVideoY: Byte; 
begin 
    GetVideoY := WindMaxY - WindMinY + 1; 
end; 

//Return the number of video columns 
function GetVideoX: Byte; 
begin 
    GetVideoX := WindMaxX - WindMinX + 1; 
end; 

我想他們都在Windows和Linux,他們似乎工作確定。謝謝。

+1

你的asm函數做由於未指定彙編程序模式,因此無法編譯:** {$ ASMMODE intel} **。他們看起來像是在16位時代寫的。嘗試轉換寄存器:** ax ** - > ** eax **,** es ** - > ** esp **。 ** al **仍然可以,因爲它與結果大小(8位)相匹配。否則,你可以看看** crt **單元。 – 2014-11-06 12:58:07

+0

@ user3661500轉換es-> esp錯誤,因爲es是段寄存器,段寄存器名稱沒有更改。 OP正嘗試讀取ROM-BIOS數據區中的絕對內存地址40:004A和40:0084的字節(http://webpages.charter.net/danrollins/techhelp/0093.HTM) – xmojmr 2014-11-06 16:44:06

+0

原始代碼使用BIOS地址來獲取這些信息。但這是無關緊要的,因爲重要的是具有相同的功能,而不是如何實現。例如,可能有Windows和/或Linux API調用爲控制檯提供了列和行。 – tonypdmtr 2014-11-06 18:36:43

回答

3

從舊的Turbo Pascal日子裏,改變了很多東西,從ROM-BIOS數據區域讀取文本屏幕分辨率幾乎只有在裸露操作系統中才有意義,其中Dan Rollins's TECH Help!絕對地址仍然保留,並且Free Pascal轉換你的代碼看起來像

function GetVideoY: Byte; 
begin 
    GetVideoY := mem[$40:$84] + 1; 
end; 

function GetVideoX: Byte; 
begin 
    GetVideoX := mem[$40:$4a]; 
end; 

控制檯應用程序下使用圖形用戶操作系統的運行界面常常不同意直接與其他應用的屏幕,並且不使用BIOS視頻通話在屏幕上繪製。相反,他們通常運行在虛擬化API背後。

自由帕斯卡具有Crt單元的形式用於控制檯應用程序兼容性API

來源:http://www.freepascal.org/docs-html/rtl/crt/index.html

兩個dos下Linux和Windows ..the CRT單元免帕斯卡。該單位首先由Florian klaempfl爲dos編寫。該單元由Mark May移植到linux,並由Michael Van Canneyt和Peter Vreman增強。它適用於Linux控制檯,以及X-Windows下的xterm和rxvt窗口。兩者的功能是一樣的..

你可以看到什麼是它的表面(便攜式API)在

你可以看到什麼在

當前屏幕的分辨率相當的表述應該是

WindMaxY - WindMinY + 1 

WindMaxX - WindMinX + 1 

和閱讀周圍GotoXY文檔可能會開始和搜索文本ScreenWidthScreenHeight在一個好地方源代碼文件可以告訴你任何你可能想知道的東西