Просмотр исходного кода

64 bit release compiles up to Oberon
Limitations:
-- The Windowmanager WinAPI callbacks seem to have some flaws,
-- the GC does not yet work
-- the Oberon subsystem makes 32-bit assumptions. It compiles now but will not work without substantial work


git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7449 8c9fc860-2736-0410-a75d-ab315db34111

felixf 7 лет назад
Родитель
Сommit
69d89f32fe

BIN
WinAos/vy.ants/source/Oberon.vyBase.Mod


BIN
WinAos/vy.ants/source/Oberon.vyHost.Mod


+ 23 - 0
source/AMD64.Raster.Mod

@@ -619,6 +619,29 @@ MODULE Raster; (** non-portable *)	(* eos, TF  **)
 	END Create;
 
 
+	PROCEDURE CreateWithBuffer*(img: Image; width, height: LONGINT; fmt: Format; mem: POINTER TO ARRAY OF CHAR; VAR adr: ADDRESS);
+	VAR size: LONGINT; a0, a1: ADDRESS;
+	BEGIN
+		ASSERT((width > 0) & (height > 0), 100);
+		img.width := width; img.height := height;
+		img.fmt := fmt;
+		img.bpr := (width * fmt.bpp + 7) DIV 8;
+		IF fmt.align > 1 THEN
+			img.bpr := (img.bpr + fmt.align - 1) DIV fmt.align * fmt.align
+		END;
+		size := height * img.bpr; INC(size, (-size) MOD 4);
+		a0 := adr; a1 := adr + size;
+		ASSERT(ADDRESSOF(mem[0]) <= a0);
+		ASSERT(a1 <= ADDRESSOF(mem[LEN(mem)-1]));
+		WHILE a0 # a1 DO
+			SYSTEM.PUT32(a0,0); INC(a0, SIZEOF(LONGINT))
+		END;
+		img.adr := adr;
+		img.mem := mem;
+		adr := LONGINT(a1);
+	END CreateWithBuffer;
+
+
 	(**--- Transfer Modes ---**)
 
 	(** initialize transfer mode **)

+ 2 - 2
source/AMD64.WMTransitions.Mod

@@ -371,7 +371,7 @@ CODE {SYSTEM.AMD64, SYSTEM.MMX}
 	PUSH		ECX
 	MOV		ECX, [RBP + i]
 	CMP		ECX, 0
-	JZ			WORD skip565
+	JZ			skip565
 
 	;
 	; Load the frame buffer pointers into the registers
@@ -477,7 +477,7 @@ doblend565:
 	; Loop again or break
 	;
 	DEC		ECX
-	JNZ			WORD doblend565
+	JNZ			doblend565
 
 	;
 	; Clean up

+ 1 - 1
source/ARMDecoder.Mod

@@ -396,7 +396,7 @@ TYPE
 				absImm := immArg.imm;
 				IF immArg.rep = RepRelJmp THEN
 					(* add opcode position and length of full opcode to immediate argument value *)
-					INC(absImm, offset + 4)
+					INC(absImm, LONGINT(offset + 4))
 				END;
 				Hex(absImm, w)
 			END WriteHex;

+ 9 - 9
source/DataErrors.Mod

@@ -71,12 +71,12 @@ CONST
 			IF pc = 0 THEN W.String( "NIL" ) ELSE W.String( "Unknown PC=" );  W.Hex( pc, 8 );  W.Char( "H" ) END;
 			IF fp # -1 THEN W.String( " FP=" );  W.Hex( fp, 8 );  W.Char( "H" ) END
 		ELSE
-			W.String( mod.name );  DEC( pc, ADDRESSOF( mod.code[0] ) );  refs := mod.refs;
+			W.String( mod.name );  DEC( pc, LONGINT(ADDRESSOF( mod.code[0] )) );  refs := mod.refs;
 			IF (refs # NIL ) & (LEN( refs ) # 0) THEN
 				refpos := FindProc( refs, pc );
 				IF refpos # -1 THEN
 					W.Char( "." );  ch := refs[refpos];  INC( refpos );
-					IF ch = "$" THEN base := mod.sb ELSE base := fp END;   (* for variables *)
+					IF ch = "$" THEN base := LONGINT(mod.sb) ELSE base := fp END;   (* for variables *)
 					WHILE ch # 0X DO W.Char( ch );  ch := refs[refpos];  INC( refpos ) END
 				END
 			END;
@@ -256,7 +256,7 @@ CONST
 	BEGIN
 		refpos := -1;
 		IF mod # NIL THEN
-			refs := mod.refs;  base := mod.sb;
+			refs := mod.refs;  base := LONGINT(mod.sb);
 			IF (refs # NIL ) & (LEN( refs ) # 0) THEN
 				refpos := FindProc( refs, 0 );
 				IF refpos # -1 THEN
@@ -303,11 +303,11 @@ CONST
 	PROCEDURE ErrorCaller( VAR m: Modules.Module;  VAR pc, ebp, eip: NbrInt.Integer );
 	VAR i, reg: NbrInt.Integer;  timer: Kernel.Timer;
 	BEGIN
-		reg := Machine.CurrentBP ();
+		reg := LONGINT(Machine.CurrentBP ());
 		SYSTEM.GET( reg, ebp );   (* stack frame of caller *)
 		SYSTEM.GET( ebp + 4, eip );   (* return address from caller *)
 		m := Modules.ThisModuleByAdr( eip );
-		IF m # NIL THEN pc := eip - ADDRESSOF( m.code[0] ) ELSE pc := MAX( LONGINT ) END;
+		IF m # NIL THEN pc := LONGINT(eip - ADDRESSOF( m.code[0] )) ELSE pc := MAX( LONGINT ) END;
 		IF ~beepedError THEN
 			beepedError := TRUE;  NEW( timer );
 			FOR i := 1 TO 3 DO Beep.Beep( 125 );  timer.Sleep( 100 );  Beep.Beep( 0 );  timer.Sleep( 100 ) END;
@@ -319,11 +319,11 @@ CONST
 	PROCEDURE WarningCaller( VAR m: Modules.Module;  VAR pc, ebp, eip: NbrInt.Integer );
 	VAR reg: NbrInt.Integer;  timer: Kernel.Timer;
 	BEGIN
-		reg := Machine.CurrentBP ();
+		reg := LONGINT(Machine.CurrentBP ());
 		SYSTEM.GET( reg, ebp );   (* stack frame of caller *)
 		SYSTEM.GET( ebp + 4, eip );   (* return address from caller *)
 		m := Modules.ThisModuleByAdr( eip );
-		IF m # NIL THEN pc := eip - ADDRESSOF( m.code[0] ) ELSE pc := MAX( LONGINT ) END;
+		IF m # NIL THEN pc := LONGINT(eip - ADDRESSOF( m.code[0] )) ELSE pc := MAX( LONGINT ) END;
 		IF ~beepedWarning THEN
 			beepedWarning := TRUE;  NEW( timer );  Beep.Beep( 125 );  timer.Sleep( 100 );  Beep.Beep( 0 );
 			timer.Sleep( 100 );  Beep.Beep( 100 );  timer.Sleep( 100 );  Beep.Beep( 0 );  timer.Sleep( 100 );
@@ -363,12 +363,12 @@ CONST
 	END Location;
 
 	PROCEDURE DetailedErrorReport( VAR m: Modules.Module;  pc: LONGINT;  eip, ebp: LONGINT );
-VAR refs: Modules.Bytes; refpos,adr: LONGINT;
+VAR refs: Modules.Bytes; refpos: LONGINT; adr: LONGINT;
 		BEGIN
 		IF m # NIL THEN
 	 refs := m.refs;  refpos := FindProc( refs, pc );
 					GetNum( refs, refpos, adr );
-				INC( adr, m.sb);   (* convert to absolute address *)
+				INC( adr, LONGINT(m.sb));   (* convert to absolute address *)
 	W.Hex(adr,8);W.Ln;
 		W.String( "Detailed Error Report" );  W.Ln;
 		IF m# NIL THEN W.String( "Module State:" );  W.Ln;  ModuleState( m );  END;

+ 11 - 9
source/Decoder.Mod

@@ -30,7 +30,7 @@ TYPE
 	Opcode* = OBJECT
 		VAR
 			instr* : LONGINT; (* instruction code *)
-			offset* : LONGINT;
+			offset* : ADDRESS;
 			code* : Modules.Bytes;
 			length- : LONGINT;
 			decoder* : Decoder;
@@ -331,14 +331,15 @@ TYPE
 
 	ProcedureInfo* = OBJECT (Info)
 		VAR
-			codeOffset, codeSize, retType, index : LONGINT;
+			codeOffset: ADDRESS; codeSize: LONGINT;
+			retType, index : LONGINT;
 			fields : FieldArray;
 			fieldCount : LONGINT;
 			method : BOOLEAN;
 
 			gcInfo: GCInfo;
 
-		PROCEDURE &New (CONST n : ARRAY OF CHAR; ofs, idx : LONGINT);
+		PROCEDURE &New (CONST n : ARRAY OF CHAR; ofs: ADDRESS; idx : LONGINT);
 		BEGIN
 			COPY (n, name);
 			codeOffset := ofs;
@@ -521,7 +522,7 @@ TYPE
 		END AddImport;
 
 
-		PROCEDURE IsExceptionHandled(pc: LONGINT): BOOLEAN;
+		PROCEDURE IsExceptionHandled(pc: ADDRESS): BOOLEAN;
 		VAR
 			i: LONGINT;
 			entry: Modules.ExceptionTableEntry;
@@ -540,7 +541,7 @@ TYPE
 		PROCEDURE GetOpcodes (proc : ProcedureInfo) : Opcode;
 		VAR
 			reader : MemoryReader.Reader;
-			ofs : LONGINT;
+			ofs : ADDRESS;
 			decoder : Decoder;
 		BEGIN
 			ofs := ADDRESSOF(module.code[proc.codeOffset]);
@@ -564,7 +565,7 @@ TYPE
 			INC(procedureCount)
 		END AddProcedure;
 
-		PROCEDURE FindEntryByOffset (ofs : LONGINT) : LONGINT;
+		PROCEDURE FindEntryByOffset (ofs : ADDRESS) : LONGINT;
 		VAR
 			i : LONGINT;
 		BEGIN
@@ -826,7 +827,8 @@ TYPE
 				s : Strings.String;
 				opcodes : Opcode;
 				w : Streams.Writer;
-				i, opStart, opEnd, pcPos : LONGINT;
+				i: LONGINT;
+				opStart, opEnd: ADDRESS; pcPos : LONGINT;
 				pcMarker : WMTextView.PositionMarker;
 (* ug *)			s2: Strings.String;
 		BEGIN
@@ -860,7 +862,7 @@ TYPE
 					opStart := opcodes.offset;
 					opEnd := opStart + opcodes.length - 1;
 					IF (markPC >= opStart) &	(markPC <= opEnd) THEN
-						pcPos := w.Pos() + (markPC-opStart)*3; (* text position within opcode bytes *)
+						pcPos := w.Pos() + LONGINT((markPC-opStart)*3); (* text position within opcode bytes *)
 					END
 				END;
 				opcodes.PrintOpcodeBytes(w); 	w.Char(9X);
@@ -1940,7 +1942,7 @@ VAR
 		RETURN result
 	END HexBytes2Code;
 
-	PROCEDURE IntToHex(h, width: LONGINT; VAR s: ARRAY OF CHAR);
+	PROCEDURE IntToHex(h: SIZE; width: LONGINT; VAR s: ARRAY OF CHAR);
 	VAR c: CHAR;
 	BEGIN
 		IF (width <= 0) THEN width := 8 END;

BIN
source/I386.Oberon.Bitmaps.Mod


+ 1 - 1
source/I386.VMWareTools.Mod

@@ -181,7 +181,7 @@ BEGIN
 END SetTextToClipBoard;
 
 PROCEDURE GetTextFromClipBoard(VAR s : Strings.String);
-VAR l, t, i, f : LONGINT;
+VAR l, t, i: LONGINT; f : ADDRESS;
 BEGIN
 	l := ReceiveLength();
 	IF (l > 0) & (l < 10000H) THEN

+ 2 - 2
source/I386Decoder.Mod

@@ -1245,14 +1245,14 @@ TYPE
 		VAR
 
 			PROCEDURE WriteHex;
-			VAR absImm : LONGINT;
+			VAR absImm : SIZE;
 			BEGIN
 				absImm := immArg.imm;
 				IF immArg.rep = RepRelJmp THEN
 					(* add opcode position and length of full opcode to immediate argument value *)
 					INC(absImm, offset + length)
 				END;
-				WriteHex32(absImm, w)
+				WriteHex32(LONGINT(absImm), w)
 			END WriteHex;
 
 		BEGIN

+ 3 - 3
source/Linker0.Mod

@@ -311,7 +311,7 @@ END Int;
 
 (** Hex - Write "x" as a hexadecimal number. *)
 
-PROCEDURE Hex*(x, w: LONGINT);
+PROCEDURE Hex*(x: SIZE; w: LONGINT);
 BEGIN
 	logWriter.Hex(x,w);
 END Hex;
@@ -325,8 +325,8 @@ END Address;
 
 (** Memory - Write a block of memory. *)
 
-PROCEDURE Memory*(adr, size: LONGINT);  (* ug: not yet rewritten using ADDRESS and SIZE *)
-VAR i, j, t: LONGINT;  buf: ARRAY 4 OF CHAR;  reset, missed: BOOLEAN;
+PROCEDURE Memory*(adr: ADDRESS; size: SIZE);  (* ug: not yet rewritten using ADDRESS and SIZE *)
+VAR i,j: SIZE; t: LONGINT;  buf: ARRAY 4 OF CHAR;  reset, missed: BOOLEAN;
 BEGIN
 	(*
 	Texts.SetFont(writer, Fonts.This("Courier10.Scn.Fnt"));

+ 3 - 1
source/Linker1.Mod

@@ -519,6 +519,7 @@ VAR
 	name: Modules.Name;  flags: SET;
 	startAddr, tdAdr: ADDRESS;
 	staticTypeBlock {UNTRACED}: Heaps.StaticTypeBlock;
+	o: LONGINT;
 BEGIN
 	r.Char( tag);
 	IF tag = 8BX THEN	(* type tag *)
@@ -559,7 +560,8 @@ BEGIN
 			staticTypeBlock := SYSTEM.VAL(Heaps.StaticTypeBlock, tdAdr);
 			ASSERT(LEN(staticTypeBlock.pointerOffsets) = pointers);
 			FOR j := 0 TO pointers - 1 DO
-				r.RawNum(ofs);
+				r.RawNum(o);
+				ofs := o;
 				ASSERT(ofs MOD AddressSize  =  0);	(* no deep copy flag *)
 				staticTypeBlock.pointerOffsets[j] := ofs;
 				ASSERT(ADDRESSOF(staticTypeBlock.pointerOffsets[j]) < startAddr + tdSize)

BIN
source/Oberon.Decoder.Mod


BIN
source/Oberon.Pictures.Mod


BIN
source/Oberon.System.Mod


+ 6 - 6
source/Release.Tool

@@ -959,7 +959,7 @@ PACKAGE Applications ARCHIVE "Applications.zip" SOURCE "ApplicationsSrc.zip" DES
 	MP3Decoder.Mod MP3Huffman.Bin  # MP3 Decoder
 
 	# Video codecs
-	I386, WIN, UNIX32,UNIXG32 {
+	I386, WINORIG,WINGEN32, UNIX32,UNIXG32 {
 		I386.IDCT.Mod
 		AVI.Mod DivXTypes.Mod I386.DivXHelper.Mod I386.DivXDecoder.Mod # DivX Support
 		MPEGTables.Mod I386.MPEGUtilities.Mod MPEGVideoDecoder.Mod 	# MPEG1/2 Support
@@ -1429,8 +1429,8 @@ END
 
 PACKAGE EFI ARCHIVE "EFI.zip" SOURCE "EFISrc.zip" DESCRIPTION "EFI Boot Loader and API"
 	EFI.Tool EFI.Mod
-	I386, WIN, UNIX32,UNIXG32 {I386.EFIMachine.Mod}
-	AMD64, UNIX64 { AMD64.EFIMachine.Mod }
+	I386, WINORIG, WINGEN32, UNIX32,UNIXG32 {I386.EFIMachine.Mod}
+	AMD64, UNIX64, WINGEN64 { AMD64.EFIMachine.Mod }
 
 
 	EFIBlockIO.Mod EFIDiskIO.Mod
@@ -1482,7 +1482,7 @@ PACKAGE Contributions ARCHIVE "Contributions.zip" SOURCE "ContributionsSrc.zip"
 	NbrInt8.Mod NbrInt16.Mod NbrInt32.Mod I386.NbrInt64.Mod NbrInt.Mod NbrRat.Mod
 	I386.NbrRe32.Mod I386.NbrRe64.Mod NbrRe.Mod NbrCplx.Mod NbrStrings.Mod
 
-	NATIVE,WIN {
+	NATIVE,WINORIG,WIN32G {
 		DataErrors.Mod DataIO.Mod Data.Mod DataStacks.Mod DataQueues.Mod
 		DataLists.Mod DataTrees.Mod
 
@@ -1645,7 +1645,7 @@ PACKAGE Oberon ARCHIVE "Oberon.zip" SOURCE "OberonSrc.zip"  DESCRIPTION "Oberon
 
 	# Configuration
 	Configuration.Tool
-	WIN { Win32.Oberon.Registry.Mod }
+	WINORIG, WINGEN32 { Win32.Oberon.Registry.Mod }
 	eWIN { Win32.Oberon.Configuration.Mod }
 	NATIVE,iWIN { Oberon.Configuration.Mod  }
 
@@ -1778,7 +1778,7 @@ PACKAGE OberonGadgets ARCHIVE "OberonGadgets.zip" SOURCE "OberonGadgetsSrc.zip"
 
 	PC.Tool Oberon.ErrorGadgets.Mod Oberon.PC.Mod 	# Oberon Interface for PACO
 
-	WIN { Win32.PELinker.Mod PELinker.Tool }
+	WINORIG,WINGEN32 { Win32.PELinker.Mod PELinker.Tool }
 
 	iWIN { Win32.Oberon.Clipboard.Mod }
 	eWIN { Win32.External.Oberon.Clipboard.Mod Win32.Oberon.RegistryTools.Mod }

+ 2 - 2
source/TestVideo.Mod

@@ -774,7 +774,7 @@ VAR x, y, w, h, p, t : LONGINT;
 	mode : Raster.Mode;
 	pix : Raster.Pixel;
 	ch : CHAR;
-	adr : LONGINT;
+	adr : ADDRESS;
 	total : LONGINT;
 BEGIN
 	Raster.InitMode(mode, Raster.srcCopy);
@@ -821,7 +821,7 @@ VAR x, y, w, h, p, t : LONGINT;
 	mode : Raster.Mode;
 	pix : Raster.Pixel;
 	ch : CHAR;
-	adr : LONGINT;
+	adr : ADDRESS;
 	total : LONGINT;
 
 BEGIN

+ 1 - 1
source/WMOberonFonts.Mod

@@ -126,7 +126,7 @@ VAR
 	mem: POINTER TO ARRAY OF CHAR;
 	img: WMGraphics.Image;
 	w,h: LONGINT;
-	adr: LONGINT;
+	adr: ADDRESS;
 CONST
 	MemoryOptimization = TRUE;
 BEGIN

+ 11 - 11
source/Win32.Display.Mod

@@ -412,7 +412,7 @@ VAR
 			lParam := SYSTEM.VAL( User32.LParam, create.win );
 			ret := User32.PostMessage( hwnd, WMSetup, wParam, lParam )
 		ELSIF uMsg = WMSetup THEN
-			win := SYSTEM.VAL( Window, lParam );  ret := User32.SetWindowLong( hwnd, GWLWindow, lParam );
+			win := SYSTEM.VAL( Window, lParam );  ret := User32.SetWindowLong( hwnd, GWLWindow, LONGINT(lParam) );
 			create := SYSTEM.VAL( CreateStruct, wParam );
 			IF ~(dummy IN win.state) THEN SetupWin( win ) ELSE Add( win, TRUE ) END;
 			IF ~(external IN win.state) THEN INC( nWindows ) END;
@@ -451,8 +451,8 @@ VAR
 	BEGIN
 		(* User32.SetCursor(hCurrentCursor);*)
 		oldx := win.track.X;  oldy := win.track.Y;  
-		win.track.X := SHORT( lParam MOD ASH( 1, 16 ) ) - win.dx;
-		win.track.Y := SHORT( (* win.height-*) ASH( lParam, -16 ) - 1 ) - win.dy;
+		win.track.X := LONGINT( lParam MOD ASH( 1, 16 ) ) - win.dx;
+		win.track.Y := LONGINT( (* win.height-*) ASH( lParam, -16 ) - 1 ) - win.dy;
 		m.x := win.track.X;  m.y := win.track.Y;  m.z := win.track.Z;
 
 		m.dx := 0;  m.dy := 0;  m.dz := 0;
@@ -490,7 +490,7 @@ VAR
 		| User32.WMXButtonUp:
 				EXCL( keys, MX )
 		| User32.WMMouseWheel:
-				IF SHORT( ASH( wParam, -16 ) ) > 0 THEN m.dz := -1 ELSE m.dz := 1 END;
+				IF LONGINT( ASH( wParam, -16 ) ) > 0 THEN m.dz := -1 ELSE m.dz := 1 END;
 				m.x := oldx;  m.y := oldy;  win.track.X := oldx;  win.track.Y := oldy;
 				(* strange: if wheel used, then coordinates are not realtive to windows -> use coordinates of last event, fof *)
 		ELSE
@@ -522,7 +522,7 @@ VAR
 	PROCEDURE HandleChar( win: Window;  wParam: User32.WParam;  lParam: User32.LParam );
 	VAR ch: CHAR;  msg: AosInputs.KeyboardMsg;  key: LONGINT;
 	BEGIN
-		GetChar( wParam, lParam, ch, key );
+		GetChar( LONGINT(wParam), LONGINT(lParam), ch, key );
 		GetKeyFlags(msg.flags);
 		msg.ch := ch;  msg.keysym := key;
 		(*
@@ -542,7 +542,7 @@ VAR
 	PROCEDURE HandleKey( win: Window;  wParam: User32.WParam;  lParam: User32.LParam );
 	VAR ch: CHAR;  msg: AosInputs.KeyboardMsg;  key : LONGINT; rect: User32.Rect;  ret: Kernel32.BOOL;
 	BEGIN
-		DecomposeKeyEvent( wParam, lParam, ch, key, FALSE );
+		DecomposeKeyEvent( LONGINT(wParam), LONGINT(lParam), ch, key, FALSE );
 
 		IF  (key = AosInputs.KsF8) & (maximized IN win.state) & ~fullscreen (*ALEX 2005.11.30*) THEN
 			IF win.frame THEN
@@ -573,7 +573,7 @@ VAR
 		GetKeyFlags(msg.flags);
 		IF (msg.flags * AosInputs.Ctrl # {}) & (msg.flags * AosInputs.Alt = {}) & (VK0 <= wParam) & (wParam <= VK9) THEN
 			(* Same behaviour as AOS *)
-			ch := CHR(wParam); key := wParam;
+			ch := CHR(wParam); key := LONGINT(wParam);
 		END;
 
 		IF (AosInputs.LeftAlt IN msg.flags) & (AosInputs.LeftShift IN msg.flags) THEN
@@ -612,7 +612,7 @@ VAR
 	PROCEDURE HandleKeyUp( win: Window;  wParam: User32.WParam;  lParam: User32.LParam );
 	VAR ch: CHAR;  msg: AosInputs.KeyboardMsg; key : LONGINT;
 	BEGIN
-		DecomposeKeyEvent( wParam, lParam, ch, key, TRUE );
+		DecomposeKeyEvent( LONGINT(wParam), LONGINT(lParam), ch, key, TRUE );
 		GetKeyFlags(msg.flags);
 
 		IF ~((AosInputs.LeftAlt IN msg.flags) & (AosInputs.LeftShift IN msg.flags)) THEN
@@ -654,7 +654,7 @@ VAR
 	VAR x, y, w, h, dx, dy, bw, bh: LONGINT;  hOldBr: GDI32.HBrush;  ret: Kernel32.BOOL;
 	BEGIN
 		IF ~(minimized IN win.state) THEN
-			IF id = resize THEN win.width := lParam MOD ASH( 1, 16 );  win.height := lParam DIV ASH( 1, 16 );  SetDocRect( win, TRUE ) END;
+			IF id = resize THEN win.width := LONGINT(lParam) MOD ASH( 1, 16 );  win.height := LONGINT(lParam) DIV ASH( 1, 16 );  SetDocRect( win, TRUE ) END;
 			ret := User32.ValidateRect( win.hWnd, NIL );
 			IF win.hDC = 0 THEN GetDC( win );  END;
 
@@ -832,13 +832,13 @@ VAR
 				dbh := SYSTEM.VAL(DEV_BROADCAST_HDRP,lParam);
 				IF dbh.dbch_devicetype = DBT_DEVTYP_VOLUME THEN
 					dbv := SYSTEM.VAL(DEV_BROADCAST_VOLUMEP,lParam);
-					WinFS.DeviceNotification(wParam,dbv.dbcv_unitmask);
+					WinFS.DeviceNotification(LONGINT(wParam),dbv.dbcv_unitmask);
 				END;
 			ELSIF wParam = DBT_DEVICEREMOVECOMPLETE THEN
 				dbh := SYSTEM.VAL(DEV_BROADCAST_HDRP,lParam);
 				IF dbh.dbch_devicetype = DBT_DEVTYP_VOLUME THEN
 					dbv := SYSTEM.VAL(DEV_BROADCAST_VOLUMEP,lParam);
-					WinFS.DeviceNotification(wParam,dbv.dbcv_unitmask);
+					WinFS.DeviceNotification(LONGINT(wParam),dbv.dbcv_unitmask);
 				END;
 			END;
 		END;

BIN
source/Win32.Oberon.Files.Mod


BIN
source/Win32.Oberon.Kernel.Mod


+ 2 - 2
source/Win32.User32.Mod

@@ -194,7 +194,7 @@ MODULE User32; (** non-portable / source: Win32.User32.Mod *)	(* ejz  *)
 		END;
 
 		(** A 32-bit value passed as a parameter to a window procedure or callback function. *)
-		WParam* = LONGINT; LParam* = LONGINT;
+		WParam* = SIZE; LParam* = SIZE;
 
 		(** A 32-bit value returned from a window procedure or callback function. *)
 		LResult* = LONGINT;
@@ -277,7 +277,7 @@ MODULE User32; (** non-portable / source: Win32.User32.Mod *)	(* ejz  *)
 		(** The CreateMenu function creates a menu. *)
 		CreateMenu-: PROCEDURE {WINAPI} (): HMenu;
 		(** The CreateWindow function creates an overlapped, pop-up, or child window. *)
-		CreateWindowEx-: PROCEDURE {WINAPI} (dwExStyle: LONGINT; VAR lpClassName, lpWindowName: ARRAY   OF CHAR; dwStyle: DWORD; x, y, nWidth, nHeight: LONGINT; hWndParent: HWND; hMenu: HMenu; hInstance: Kernel32.HINSTANCE; lpParam: LONGINT): HWND;
+		CreateWindowEx-: PROCEDURE {WINAPI} (dwExStyle: LONGINT; VAR lpClassName, lpWindowName: ARRAY   OF CHAR; dwStyle: DWORD; x, y, nWidth, nHeight: LONGINT; hWndParent: HWND; hMenu: HMenu; hInstance: Kernel32.HINSTANCE; lpParam: LParam): HWND;
 		(** The DefWindowProc function calls the default window procedure to provide default processing for any window
 			messages that an application does not process. *)
 		DefWindowProc-: WndProc;

+ 1 - 1
source/Win32.WMPerfMonPluginMemory.Mod

@@ -11,7 +11,7 @@ TYPE
 	(* Heaps.GetHeapInfo is a slow operation. HeapHelper provides its results to multiple plugins *)
 	HeapHelper = OBJECT(WMPerfMonPlugins.Helper)
 	VAR
-		free, total, largest : LONGINT;
+		free, total, largest : SIZE;
 
 		PROCEDURE Update;
 		BEGIN