2014-05-09 80 views
0

我正在將Turbo Pascal應用程序遷移到Windows 7操作系統的Free Pascal 32位。每當我的Free Pascal編譯單元文件,編譯器會顯示錯誤消息:FreePascal:找不到標識符「MEMW」

Identifier not found `MEMW`. 

任何人可以幫助我在這?我的代碼如下所示,是否有任何選項來實現相同的事情?

PROCEDURE window_object.appear; 

VAR 
    width_offset, 
    height_offset : BYTE; 
    current_location : location_pointer; 

BEGIN 
    current_location:=first_location; 
    FOR height_offset:=y TO (y+y_offset-1) DO 
    BEGIN 
      FOR width_offset:=x TO (x+x_offset-1) DO 
      BEGIN 
       **MEMW[$B800:(width_offset-1)*2 
         +(height_offset-1)*160]:=current_location^.code;** 
       current_location:=current_location^.next; 
      END; 
    END; 
    current_location^.next:=NIL; 
END; 

回答

1

只能在DOS版本中訪問$ B800的DOS屏幕

DOS版本只支持Win98中的dosboxes,所以不支持在Windows NT像NT4/W2K/XP/W2003,遠景,w2008,W7,W8(0.1)

一般來說,代碼變種依靠DOS直接屏幕訪問應該重寫爲使用視頻單元

視頻單元獨立於平臺,並維護虛擬屏幕緩衝區。 VideoBuf變量允許直接訪問它。程序變量可用於最小化所需的修改:

最近,我爲TP dialedit程序(這是一個Turbo Vision應用程序)做了一個簡單的單元。

對於這項工作,主程序需要

  1. 調用video.initvideo在啓動時就關閉
  2. video.donevideo。
  3. 非渦輪增壓遠景計劃還需要調用updatescreen(false)來更新屏幕(例如,在你的函數的最後一行)

單位:

unit videord; 
// emulates three param screen[] array for dialedit. 
// can't be in dialedit since procedural properties aren't allowed in $mode tp 
interface 

uses Video; 


function videoreadchar(x,y,z:integer):char; 

// Coordinates are 1 based, z=0 gets the character, z=1 gets the attribute.  
property screen[x,y,z:integer]:char read videoreadchar; 


implementation 
function videoreadchar(x,y,z:integer):char; 

Var 
    P: Integer; 

begin 
    P:=((X-1)+(Y-1)*ScreenWidth); 
    videoreadchar:=pchar(@VideoBuf^[P])[z]; 
end; 

end. 
+0

謝謝,我用相同(視頻單元),但引發運行時錯誤「節目接收信號SIGSEGV分段故障」。 –