Amiga: Workbench 1.x compatibilty via the AMIGA_V1_2_ONLY define

This commit is contained in:
Marcus Sackrow 2021-08-06 19:48:27 +01:00
parent 136f042972
commit c1f6a7afdd
14 changed files with 1046 additions and 45 deletions

View File

@ -439,12 +439,16 @@ end;
procedure MH_Set(Obj: PObject_; Tag, Data: PtrUInt); procedure MH_Set(Obj: PObject_; Tag, Data: PtrUInt);
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
SetAttrs(Obj, [Tag, Data, TAG_END]); SetAttrs(Obj, [Tag, Data, TAG_END]);
{$endif}
end; end;
function MH_Get(Obj: PObject_; Tag: PtrUInt): PtrUInt; function MH_Get(Obj: PObject_; Tag: PtrUInt): PtrUInt;
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
GetAttr(Tag, Obj, MH_Get); GetAttr(Tag, Obj, MH_Get);
{$endif}
end; end;
procedure MH_SetMutex(Obj: PObject_; n: Integer); procedure MH_SetMutex(Obj: PObject_; n: Integer);
@ -1635,13 +1639,21 @@ end;
// ************************************************************************ // ************************************************************************
function MH_NewObject(ClassPtr: PIClass; ClassID: PChar; const Tags: array of PtrUInt): APTR; function MH_NewObject(ClassPtr: PIClass; ClassID: PChar; const Tags: array of PtrUInt): APTR;
begin begin
{$if defined(AMIGA_V1_2_ONLY)}
MH_NewObject := nil;
{$else}
MH_NewObject := NewObject(ClassPtr, ClassID, Tags); MH_NewObject := NewObject(ClassPtr, ClassID, Tags);
{$endif}
end; end;
function MH_NewObject(var Obj; ClassPtr: PIClass; ClassID: PChar; const Tags: array of PtrUInt): APTR; function MH_NewObject(var Obj; ClassPtr: PIClass; ClassID: PChar; const Tags: array of PtrUInt): APTR;
begin begin
{$if defined(AMIGA_V1_2_ONLY)}
MH_NewObject := nil;
{$else}
PObject_(Obj) := NewObject(ClassPtr, ClassID, Tags); PObject_(Obj) := NewObject(ClassPtr, ClassID, Tags);
MH_NewObject := PObject_(Obj); MH_NewObject := PObject_(Obj);
{$endif}
end; end;
// deprecated but widely used macros // deprecated but widely used macros

View File

@ -2250,6 +2250,120 @@ const
var var
GfxBase : PGfxBase = nil; GfxBase : PGfxBase = nil;
{$if defined(AMIGA_V1_2_ONLY)}
FUNCTION AllocRaster(width : ULONG location 'd0'; height : ULONG location 'd1') : TPlanePtr; syscall GfxBase 492;
PROCEDURE FreeRaster(p : TPlanePtr location 'a0'; width : ULONG location 'd0'; height : ULONG location 'd1'); syscall GfxBase 498;
PROCEDURE InitBitMap(bitMap : pBitMap location 'a0'; depth : LONGINT location 'd0'; width : LONGINT location 'd1'; height : LONGINT location 'd2'); syscall GfxBase 390;
PROCEDURE InitRastPort(rp : pRastPort location 'a1'); syscall GfxBase 198;
PROCEDURE SetAPen(rp : pRastPort location 'a1'; pen : ULONG location 'd0'); syscall GfxBase 342;
PROCEDURE SetBPen(rp : pRastPort location 'a1'; pen : ULONG location 'd0'); syscall GfxBase 348;
PROCEDURE SetDrMd(rp : pRastPort location 'a1'; drawMode : ULONG location 'd0'); syscall GfxBase 354;
PROCEDURE SetRast(rp : pRastPort location 'a1'; pen : ULONG location 'd0'); syscall GfxBase 234;
PROCEDURE ClearEOL(rp : pRastPort location 'a1'); syscall GfxBase 042;
PROCEDURE ClearScreen(rp : pRastPort location 'a1'); syscall GfxBase 048;
PROCEDURE Draw(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1'); syscall GfxBase 246;
PROCEDURE DrawEllipse(rp : pRastPort location 'a1'; xCenter : LONGINT location 'd0'; yCenter : LONGINT location 'd1'; a : LONGINT location 'd2'; b : LONGINT location 'd3'); syscall GfxBase 180;
PROCEDURE gfxMove(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1'); syscall GfxBase 240;
PROCEDURE PolyDraw(rp : pRastPort location 'a1'; count : LONGINT location 'd0';const polyTable : PSmallInt location 'a0'); syscall GfxBase 336;
FUNCTION ReadPixel(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1') : ULONG; syscall GfxBase 318;
PROCEDURE ScrollRaster(rp : pRastPort location 'a1'; dx : LONGINT location 'd0'; dy : LONGINT location 'd1'; xMin : LONGINT location 'd2'; yMin : LONGINT location 'd3'; xMax : LONGINT location 'd4'; yMax : LONGINT location 'd5'); syscall GfxBase 396;
FUNCTION GfxText(rp : pRastPort location 'a1';const string_ : pCHAR location 'a0'; count : ULONG location 'd0') : LONGINT; syscall GfxBase 060;
FUNCTION TextLength(rp : pRastPort location 'a1';const string_ : pCHAR location 'a0'; count : ULONG location 'd0') : smallint; syscall GfxBase 054;
FUNCTION WritePixel(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1') : LONGINT; syscall GfxBase 324;
FUNCTION AreaDraw(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1') : LONGINT; syscall GfxBase 258;
FUNCTION AreaEllipse(rp : pRastPort location 'a1'; xCenter : LONGINT location 'd0'; yCenter : LONGINT location 'd1'; a : LONGINT location 'd2'; b : LONGINT location 'd3') : LONGINT; syscall GfxBase 186;
FUNCTION AreaEnd(rp : pRastPort location 'a1') : LONGINT; syscall GfxBase 264;
FUNCTION AreaMove(rp : pRastPort location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1') : LONGINT; syscall GfxBase 252;
FUNCTION Flood(rp : pRastPort location 'a1'; mode : ULONG location 'd2'; x : LONGINT location 'd0'; y : LONGINT location 'd1') : LongBool; syscall GfxBase 330;
PROCEDURE InitArea(areaInfo : pAreaInfo location 'a0'; vectorBuffer : POINTER location 'a1'; maxVectors : LONGINT location 'd0'); syscall GfxBase 282;
FUNCTION InitTmpRas(tmpRas : pTmpRas location 'a0'; buffer : Pointer location 'a1'; size : LONGINT location 'd0') : pTmpRas; syscall GfxBase 468;
PROCEDURE RectFill(rp : pRastPort location 'a1'; xMin : LONGINT location 'd0'; yMin : LONGINT location 'd1'; xMax : LONGINT location 'd2'; yMax : LONGINT location 'd3'); syscall GfxBase 306;
PROCEDURE FreeColorMap(colorMap : pColorMap location 'a0'); syscall GfxBase 576;
FUNCTION GetColorMap(entries : LONGINT location 'd0') : pColorMap; syscall GfxBase 570;
FUNCTION GetRGB4(colorMap : pColorMap location 'a0'; entry : LONGINT location 'd0') : ULONG; syscall GfxBase 582;
PROCEDURE LoadRGB4(vp : pViewPort location 'a0';const colors : pWord location 'a1'; count : LONGINT location 'd0'); syscall GfxBase 192;
PROCEDURE SetRGB4(vp : pViewPort location 'a0'; index : LONGINT location 'd0'; red : ULONG location 'd1'; green : ULONG location 'd2'; blue : ULONG location 'd3'); syscall GfxBase 288;
PROCEDURE SetRGB4CM(colorMap : pColorMap location 'a0'; index : LONGINT location 'd0'; red : ULONG location 'd1'; green : ULONG location 'd2'; blue : ULONG location 'd3'); syscall GfxBase 630;
FUNCTION BltBitMap(const srcBitMap : pBitMap location 'a0'; xSrc : LONGINT location 'd0'; ySrc : LONGINT location 'd1'; destBitMap : pBitMap location 'a1'; xDest : LONGINT location 'd2'; yDest : LONGINT location 'd3'; xSize : LONGINT location 'd4'; ySize : LONGINT location 'd5'; minterm : ULONG location 'd6'; mask : ULONG location 'd7'; tempA : pCHAR location 'a2') : LONGINT; syscall GfxBase 030;
PROCEDURE BltBitMapRastPort(const srcBitMap : pBitMap location 'a0'; xSrc : LONGINT location 'd0'; ySrc : LONGINT location 'd1'; destRP : pRastPort location 'a1'; xDest : LONGINT location 'd2'; yDest : LONGINT location 'd3'; xSize : LONGINT location 'd4'; ySize : LONGINT location 'd5'; minterm : ULONG location 'd6'); syscall GfxBase 606;
PROCEDURE BltClear(memBlock : pointer location 'a1'; byteCount : ULONG location 'd0'; flags : ULONG location 'd1'); syscall GfxBase 300;
PROCEDURE BltMaskBitMapRastPort(const srcBitMap : pBitMap location 'a0'; xSrc : LONGINT location 'd0'; ySrc : LONGINT location 'd1'; destRP : pRastPort location 'a1'; xDest : LONGINT location 'd2'; yDest : LONGINT location 'd3'; xSize : LONGINT location 'd4'; ySize : LONGINT location 'd5'; minterm : ULONG location 'd6';const bltMask : pCHAR location 'a2'); syscall GfxBase 636;
PROCEDURE BltPattern(rp : pRastPort location 'a1';const mask : pCHAR location 'a0'; xMin : LONGINT location 'd0'; yMin : LONGINT location 'd1'; xMax : LONGINT location 'd2'; yMax : LONGINT location 'd3'; maskBPR : ULONG location 'd4'); syscall GfxBase 312;
PROCEDURE BltTemplate(const source : pWORD location 'a0'; xSrc : LONGINT location 'd0'; srcMod : LONGINT location 'd1'; destRP : pRastPort location 'a1'; xDest : LONGINT location 'd2'; yDest : LONGINT location 'd3'; xSize : LONGINT location 'd4'; ySize : LONGINT location 'd5'); syscall GfxBase 036;
PROCEDURE ClipBlit(srcRP : pRastPort location 'a0'; xSrc : LONGINT location 'd0'; ySrc : LONGINT location 'd1'; destRP : pRastPort location 'a1'; xDest : LONGINT location 'd2'; yDest : LONGINT location 'd3'; xSize : LONGINT location 'd4'; ySize : LONGINT location 'd5'; minterm : ULONG location 'd6'); syscall GfxBase 552;
PROCEDURE DisownBlitter; syscall GfxBase 462;
PROCEDURE OwnBlitter; syscall GfxBase 456;
PROCEDURE QBlit(blit : pbltnode location 'a1'); syscall GfxBase 276;
PROCEDURE QBSBlit(blit : pbltnode location 'a1'); syscall GfxBase 294;
PROCEDURE WaitBlit; syscall GfxBase 228;
PROCEDURE CBump(copList : pUCopList location 'a1'); syscall GfxBase 366;
PROCEDURE CMove(copList : pUCopList location 'a1'; destination : POINTER location 'a0'; data : LONGINT location 'd1'); syscall GfxBase 372;
PROCEDURE CWait(copList : pUCopList location 'a1'; v : LONGINT location 'd0'; h : LONGINT location 'd1'); syscall GfxBase 378;
PROCEDURE FreeCopList(copList : pCopList location 'a0'); syscall GfxBase 546;
PROCEDURE FreeCprList(cprList : pcprlist location 'a0'); syscall GfxBase 564;
PROCEDURE FreeVPortCopLists(vp : pViewPort location 'a0'); syscall GfxBase 540;
PROCEDURE InitView(view : pView location 'a1'); syscall GfxBase 360;
PROCEDURE InitVPort(vp : pViewPort location 'a0'); syscall GfxBase 204;
PROCEDURE LoadView(view : pView location 'a1'); syscall GfxBase 222;
FUNCTION MakeVPort(view : pView location 'a0'; vp : pViewPort location 'a1') : ULONG; syscall GfxBase 216;
FUNCTION MrgCop(view : pView location 'a1') : ULONG; syscall GfxBase 210;
PROCEDURE ScrollVPort(vp : pViewPort location 'a0'); syscall GfxBase 588;
FUNCTION UCopperListInit(uCopList : pUCopList location 'a0'; n : LONGINT location 'd0') : pCopList; syscall GfxBase 594;
FUNCTION VBeamPos : LONGINT; syscall GfxBase 384;
PROCEDURE WaitBOVP(vp : pViewPort location 'a0'); syscall GfxBase 402;
PROCEDURE WaitTOF; syscall GfxBase 270;
PROCEDURE AndRectRegion(region : pRegion location 'a0';const rectangle : pRectangle location 'a1'); syscall GfxBase 504;
FUNCTION AndRegionRegion(const srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : LongBool; syscall GfxBase 624;
FUNCTION AttemptLockLayerRom(layer : pLayer location 'a5') : LongBool; syscall GfxBase 654;
FUNCTION ClearRectRegion(region : pRegion location 'a0';const rectangle : pRectangle location 'a1') : LongBool; syscall GfxBase 522;
PROCEDURE ClearRegion(region : pRegion location 'a0'); syscall GfxBase 528;
PROCEDURE CopySBitMap(layer : pLayer location 'a0'); syscall GfxBase 450;
PROCEDURE DisposeRegion(region : pRegion location 'a0'); syscall GfxBase 534;
PROCEDURE LockLayerRom(layer : pLayer location 'a5'); syscall GfxBase 432;
FUNCTION NewRegion : pRegion; syscall GfxBase 516;
FUNCTION OrRectRegion(region : pRegion location 'a0';const rectangle : pRectangle location 'a1') : LongBool; syscall GfxBase 510;
FUNCTION OrRegionRegion(const srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : LongBool; syscall GfxBase 612;
PROCEDURE SyncSBitMap(layer : pLayer location 'a0'); syscall GfxBase 444;
PROCEDURE UnlockLayerRom(layer : pLayer location 'a5'); syscall GfxBase 438;
FUNCTION XorRectRegion(region : pRegion location 'a0';const rectangle : pRectangle location 'a1') : LongBool; syscall GfxBase 558;
FUNCTION XorRegionRegion(const srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : LongBool; syscall GfxBase 618;
PROCEDURE AddFont(textFont : pTextFont location 'a1'); syscall GfxBase 480;
PROCEDURE AskFont(rp : pRastPort location 'a1'; textAttr : pTextAttr location 'a0'); syscall GfxBase 474;
FUNCTION AskSoftStyle(rp : pRastPort location 'a1') : ULONG; syscall GfxBase 084;
PROCEDURE CloseFont(textFont : pTextFont location 'a1'); syscall GfxBase 078;
FUNCTION OpenFont(textAttr : pTextAttr location 'a0') : pTextFont; syscall GfxBase 072;
PROCEDURE RemFont(textFont : pTextFont location 'a1'); syscall GfxBase 486;
FUNCTION SetFont(rp : pRastPort location 'a1';const textFont : pTextFont location 'a0') : LONGINT; syscall GfxBase 066;
FUNCTION SetSoftStyle(rp : pRastPort location 'a1'; style : ULONG location 'd0'; enable : ULONG location 'd1') : ULONG; syscall GfxBase 090;
PROCEDURE AddAnimOb(anOb : pAnimOb location 'a0'; anKey : ppAnimOb location 'a1'; rp : pRastPort location 'a2'); syscall GfxBase 156;
PROCEDURE AddBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'); syscall GfxBase 096;
PROCEDURE AddVSprite(vSprite : pVSprite location 'a0'; rp : pRastPort location 'a1'); syscall GfxBase 102;
PROCEDURE Animate(anKey : ppAnimOb location 'a0'; rp : pRastPort location 'a1'); syscall GfxBase 162;
PROCEDURE ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; newData : pWORD location 'a2'); syscall GfxBase 420;
PROCEDURE DoCollision(rp : pRastPort location 'a1'); syscall GfxBase 108;
PROCEDURE DrawGList(rp : pRastPort location 'a1'; vp : pViewPort location 'a0'); syscall GfxBase 114;
PROCEDURE FreeGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LONGINT location 'd0'); syscall GfxBase 600;
PROCEDURE FreeSprite(num : LONGINT location 'd0'); syscall GfxBase 414;
FUNCTION GetGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LONGINT location 'd0') : LongBool; syscall GfxBase 168;
FUNCTION GetSprite(sprite : pSimpleSprite location 'a0'; num : LONGINT location 'd0') : smallint; syscall GfxBase 408;
PROCEDURE InitGels(head : pVSprite location 'a0'; tail : pVSprite location 'a1'; gelsInfo : pGelsInfo location 'a2'); syscall GfxBase 120;
PROCEDURE InitGMasks(anOb : pAnimOb location 'a0'); syscall GfxBase 174;
PROCEDURE InitMasks(vSprite : pVSprite location 'a0'); syscall GfxBase 126;
PROCEDURE MoveSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; x : LONGINT location 'd0'; y : LONGINT location 'd1'); syscall GfxBase 426;
PROCEDURE RemIBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'; vp : pViewPort location 'a2'); syscall GfxBase 132;
PROCEDURE RemVSprite(vSprite : pVSprite location 'a0'); syscall GfxBase 138;
PROCEDURE SetCollision(num : ULONG location 'd0'; routine : tPROCEDURE location 'a0'; gelsInfo : pGelsInfo location 'a1'); syscall GfxBase 144;
PROCEDURE SortGList(rp : pRastPort location 'a1'); syscall GfxBase 150;
{$else}
PROCEDURE AddAnimOb(anOb : pAnimOb location 'a0'; anKey : ppAnimOb location 'a1'; rp : pRastPort location 'a2'); syscall GfxBase 156; PROCEDURE AddAnimOb(anOb : pAnimOb location 'a0'; anKey : ppAnimOb location 'a1'; rp : pRastPort location 'a2'); syscall GfxBase 156;
PROCEDURE AddBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'); syscall GfxBase 096; PROCEDURE AddBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'); syscall GfxBase 096;
PROCEDURE AddFont(textFont : pTextFont location 'a1'); syscall GfxBase 480; PROCEDURE AddFont(textFont : pTextFont location 'a1'); syscall GfxBase 480;
@ -2424,6 +2538,9 @@ function ObtainBestPen(cm : pColorMap; r : ULONG; g : ULONG; b : ULONG; Const ar
procedure SetRPAttrs(rp : pRastPort; Const argv : array of PtrUInt); procedure SetRPAttrs(rp : pRastPort; Const argv : array of PtrUInt);
function VideoControlTags(colorMap : pColorMap; Const argv : array of PtrUInt) : LongWord; function VideoControlTags(colorMap : pColorMap; Const argv : array of PtrUInt) : LongWord;
function WeighTAMatchTags(reqTextAttr : pTextAttr; targetTextAttr : pTextAttr; Const argv : array of PtrUInt) : smallint; function WeighTAMatchTags(reqTextAttr : pTextAttr; targetTextAttr : pTextAttr; Const argv : array of PtrUInt) : smallint;
PROCEDURE SafeSetOutlinePen(w : pRastPort; c : byte);
PROCEDURE SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
{$endif}
{ gfxmacros } { gfxmacros }
@ -2433,9 +2550,7 @@ PROCEDURE SetAfPt(w: pRastPort;p: Pointer; n: Byte);
PROCEDURE SetDrPt(w: pRastPort;p: Word); PROCEDURE SetDrPt(w: pRastPort;p: Word);
PROCEDURE SetOPen(w: pRastPort;c: Byte); PROCEDURE SetOPen(w: pRastPort;c: Byte);
PROCEDURE SetWrMsk(w: pRastPort; m: Byte); PROCEDURE SetWrMsk(w: pRastPort; m: Byte);
procedure RemBob(Bob: PBob); inline;
PROCEDURE SafeSetOutlinePen(w : pRastPort; c : byte);
PROCEDURE SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
PROCEDURE OFF_DISPLAY (cust: pCustom); PROCEDURE OFF_DISPLAY (cust: pCustom);
PROCEDURE ON_DISPLAY (cust: pCustom); PROCEDURE ON_DISPLAY (cust: pCustom);
@ -2449,8 +2564,85 @@ function AreaCircle(Rp: PRastPort; xCenter, yCenter, r: SmallInt): LongWord; inl
function RasSize(w, h: Word): Integer; function RasSize(w, h: Word): Integer;
function CreateBitMap(Width, Height, Depth: Integer): PBitmap;
procedure DestroyBitMap(MyBM: PBitmap; Width, Height, Depth: Integer);
{$if defined(AMIGA_V1_2_ONLY)}
procedure SetABPenDrMd(Rp: PRastPort; APen, BPen, Drawmode: LongWord); inline;
function AllocBitMap(SizeX, SizeY, Depth, Flags: LongWord; friend_bitmap: PBitMap): PBitMap;
procedure FreeBitMap(Bm: PBitMap);
function GetBitMapAttr(Bm: PBitMap; AttrNum: LongWord): LongWord;
{$endif}
IMPLEMENTATION IMPLEMENTATION
procedure RemBob(Bob: PBob);
begin
Bob^.Flags := Bob^.Flags or BOBSAWAY;
end;
function CreateBitMap(Width, Height, Depth: Integer): PBitmap;
var
MyBM: PBitmap;
i: Integer;
begin
MyBM := ExecAllocMem(SizeOf(TBitMap), MEMF_CLEAR or MEMF_PUBLIC);
for i := 0 to Depth - 1 do
MyBM^.Planes[i] := AllocRaster(Width, Height);
for i := Depth to 7 do
MyBM^.Planes[i] := nil;
MyBM^.Flags := MyBM^.Flags or BMF_STANDARD;
CreateBitMap := MyBM;
end;
procedure DestroyBitMap(MyBM: PBitmap; Width, Height, Depth: Integer);
var
i: Integer;
begin
if MyBM <> nil then
begin
for i := 0 to Depth - 1 do
if MyBM^.Planes[i] <> nil then
FreeRaster(MyBM^.Planes[i], Width, Height);
FreeMem(MyBM, SizeOf(TBitMap));
end;
end;
{$if defined(AMIGA_V1_2_ONLY)}
procedure SetABPenDrMd(Rp: PRastPort; APen, BPen, Drawmode: LongWord);
begin
SetAPen(RP, APen);
SetBPen(RP, BPen);
SetDrMd(RP, DrawMode);
end;
function AllocBitMap(SizeX, SizeY, Depth, Flags: LongWord; friend_bitmap: PBitMap): PBitMap;
begin
AllocBitMap := CreateBitmap(SizeX, SizeY, Depth);
end;
procedure FreeBitMap(Bm: PBitMap);
begin
if bm <> nil then
DestroyBitMap(bm, Bm^.BytesPerRow * 8, bm^.Rows, bm^.Depth);
end;
function GetBitMapAttr(Bm: PBitMap; AttrNum: LongWord): LongWord;
begin
case AttrNum of
BMA_HEIGHT: GetBitMapAttr := bm^.Rows;
BMA_WIDTH: GetBitMapAttr := bm^.BytesPerRow * 8;
BMA_DEPTH: GetBitMapAttr := bm^.Depth;
BMA_FLAGS: GetBitMapAttr := bm^.Flags and (BMF_DISPLAYABLE or BMF_INTERLEAVED or BMF_STANDARD);
else
GetBitMapAttr := 0;
end;
end;
{$endif}
{$if not defined(AMIGA_V1_2_ONLY)}
function AllocSpriteData(bm : pBitMap; Const argv : array of PtrUInt) : pExtSprite; function AllocSpriteData(bm : pBitMap; Const argv : array of PtrUInt) : pExtSprite;
begin begin
AllocSpriteData := AllocSpriteDataA(bm,@argv); AllocSpriteData := AllocSpriteDataA(bm,@argv);
@ -2501,6 +2693,26 @@ begin
WeighTAMatchTags := WeighTAMatch(reqTextAttr,targetTextAttr,@argv); WeighTAMatchTags := WeighTAMatch(reqTextAttr,targetTextAttr,@argv);
end; end;
PROCEDURE SafeSetOutlinePen(w : pRastPort; c : byte);
begin
IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN begin
w^.AOlPen := c;
w^.Flags := w^.Flags OR AREAOUTLINE;
END ELSE begin
c := SetOutlinePen(w,c);
END;
END;
PROCEDURE SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
VAR x : smallint ;
BEGIN
IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN w^.Mask := BYTE(m)
ELSE x := SetWriteMask( w, m );
END;
{$endif}
PROCEDURE BNDRYOFF (w: pRastPort); PROCEDURE BNDRYOFF (w: pRastPort);
BEGIN BEGIN
WITH w^ DO BEGIN WITH w^ DO BEGIN
@ -2549,22 +2761,6 @@ BEGIN
w^.Mask := m; w^.Mask := m;
END; END;
PROCEDURE SafeSetOutlinePen(w : pRastPort; c : byte);
begin
IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN begin
w^.AOlPen := c;
w^.Flags := w^.Flags OR AREAOUTLINE;
END ELSE begin
c := SetOutlinePen(w,c);
END;
END;
PROCEDURE SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
VAR x : smallint ;
BEGIN
IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN w^.Mask := BYTE(m)
ELSE x := SetWriteMask( w, m );
END;
PROCEDURE OFF_DISPLAY (cust: pCustom); PROCEDURE OFF_DISPLAY (cust: pCustom);
BEGIN BEGIN

View File

@ -1575,7 +1575,43 @@ CONST
{ tags for NewLoadSeg } { tags for NewLoadSeg }
{ no tags are defined yet for NewLoadSeg } { no tags are defined yet for NewLoadSeg }
{$if defined(AMIGA_V1_2_ONLY)}
PROCEDURE DOSClose(file_ : BPTR location 'd1'); syscall _DOSBase 036;
FUNCTION DOSOpen(const name : pCHAR location 'd1'; accessMode : LONGINT location 'd2') : BPTR; syscall _DOSBase 030;
FUNCTION DOSRead(file_ : BPTR location 'd1'; buffer : POINTER location 'd2'; length : LONGINT location 'd3') : LONGINT; syscall _DOSBase 042;
FUNCTION DOSSeek(file_ : BPTR location 'd1'; position : LONGINT location 'd2'; offset : LONGINT location 'd3') : LONGINT; syscall _DOSBase 066;
FUNCTION DOSWrite(file_ : BPTR location 'd1'; buffer : POINTER location 'd2'; length : LONGINT location 'd3') : LONGINT; syscall _DOSBase 048;
FUNCTION CreateDir(const name : pCHAR location 'd1') : BPTR; syscall _DOSBase 120;
FUNCTION CurrentDir(lock : BPTR location 'd1') : BPTR; syscall _DOSBase 126;
FUNCTION DOSDeleteFile(const name : STRPTR location 'd1') : LongBool; syscall _DOSBase 072;
FUNCTION Examine(lock : BPTR location 'd1'; fileInfoBlock : pFileInfoBlock location 'd2') : LongBool; syscall _DOSBase 102;
FUNCTION ExNext(lock : BPTR location 'd1'; fileInfoBlock : pFileInfoBlock location 'd2') : LongBool; syscall _DOSBase 108;
FUNCTION Info(lock : BPTR location 'd1'; parameterBlock : pInfoData location 'd2') : LongBool; syscall _DOSBase 114;
FUNCTION ParentDir(lock : BPTR location 'd1') : BPTR; syscall _DOSBase 210;
FUNCTION DOSRename(const oldName : STRPTR location 'd1';const newName : STRPTR location 'd2') : LongBool; syscall _DOSBase 078;
FUNCTION SetComment(const name : pCHAR location 'd1';const comment : pCHAR location 'd2') : LongBool; syscall _DOSBase 180;
FUNCTION SetProtection(const name : pCHAR location 'd1'; protect : LONGINT location 'd2') : LongBool; syscall _DOSBase 186;
FUNCTION DupLock(lock : BPTR location 'd1') : BPTR; syscall _DOSBase 096;
FUNCTION DOSInput : BPTR; syscall _DOSBase 054;
FUNCTION IoErr : LONGINT; syscall _DOSBase 132;
FUNCTION IsInteractive(file_ : BPTR location 'd1') : LongBool; syscall _DOSBase 216;
FUNCTION Lock(const name : pCHAR location 'd1'; type_ : LONGINT location 'd2') : LONGINT; syscall _DOSBase 084;
FUNCTION DOSOutput : BPTR; syscall _DOSBase 060;
PROCEDURE UnLock(lock : BPTR location 'd1'); syscall _DOSBase 090;
FUNCTION CreateProc(const name : pCHAR location 'd1'; pri : LONGINT location 'd2'; segList : BPTR location 'd3'; stackSize : LONGINT location 'd4') : pMsgPort; syscall _DOSBase 138;
PROCEDURE DateStamp(date : pDateStamp location 'd1'); syscall _DOSBase 192;
PROCEDURE DOSDelay(timeout : LONGINT location 'd1'); syscall _DOSBase 198;
FUNCTION DeviceProc(const name : pCHAR location 'd1') : pMsgPort; syscall _DOSBase 174;
PROCEDURE DOSExit(returnCode : LONGINT location 'd1'); syscall _DOSBase 144;
FUNCTION WaitForChar(file_ : BPTR location 'd1'; timeout : LONGINT location 'd2') : LongBool; syscall _DOSBase 204;
FUNCTION Execute(const string_ : pCHAR location 'd1'; file_ : BPTR location 'd2'; file2 : BPTR location 'd3') : LongBool; syscall _DOSBase 222;
FUNCTION LoadSeg(const name : pCHAR location 'd1') : LONGINT; syscall _DOSBase 150;
PROCEDURE UnLoadSeg(seglist : BPTR location 'd1'); syscall _DOSBase 156;
{$else}
PROCEDURE AbortPkt(port : pMsgPort location 'd1'; pkt : pDosPacket location 'd2'); syscall _DOSBase 264; PROCEDURE AbortPkt(port : pMsgPort location 'd1'; pkt : pDosPacket location 'd2'); syscall _DOSBase 264;
FUNCTION AddBuffers(const name : pCHAR location 'd1'; number : LONGINT location 'd2') : LongBool; syscall _DOSBase 732; FUNCTION AddBuffers(const name : pCHAR location 'd1'; number : LONGINT location 'd2') : LongBool; syscall _DOSBase 732;
FUNCTION AddDosEntry(dlist : pDosList location 'd1') : LongBool; syscall _DOSBase 678; FUNCTION AddDosEntry(dlist : pDosList location 'd1') : LongBool; syscall _DOSBase 678;
@ -1739,10 +1775,13 @@ FUNCTION VPrintf(const format : pCHAR location 'd1'; const argarray : PLongInt l
FUNCTION WaitForChar(file_ : BPTR location 'd1'; timeout : LONGINT location 'd2') : LongBool; syscall _DOSBase 204; FUNCTION WaitForChar(file_ : BPTR location 'd1'; timeout : LONGINT location 'd2') : LongBool; syscall _DOSBase 204;
FUNCTION WaitPkt : pDosPacket; syscall _DOSBase 252; FUNCTION WaitPkt : pDosPacket; syscall _DOSBase 252;
FUNCTION WriteChars(const buf : pCHAR location 'd1'; buflen : ULONG location 'd2') : LONGINT; syscall _DOSBase 942; FUNCTION WriteChars(const buf : pCHAR location 'd1'; buflen : ULONG location 'd2') : LONGINT; syscall _DOSBase 942;
{$endif}
FUNCTION BADDR(bval :BPTR): POINTER; FUNCTION BADDR(bval :BPTR): POINTER;
FUNCTION MKBADDR(adr: Pointer): BPTR; FUNCTION MKBADDR(adr: Pointer): BPTR;
{$if not defined(AMIGA_V1_2_ONLY)}
// var args version // var args version
FUNCTION AllocDosObjectTags(type_ : ULONG; Const argv : Array of PtrUInt) : POINTER; FUNCTION AllocDosObjectTags(type_ : ULONG; Const argv : Array of PtrUInt) : POINTER;
FUNCTION CreateNewProcTags(Const argv : Array of PtrUInt) : pProcess; FUNCTION CreateNewProcTags(Const argv : Array of PtrUInt) : pProcess;
@ -1819,6 +1858,7 @@ FUNCTION SplitName(const name : string; seperator : ULONG; buf : pCHAR; oldpos :
FUNCTION StrToLong(const string_ : string; VAR value : LONGINT) : LONGINT; FUNCTION StrToLong(const string_ : string; VAR value : LONGINT) : LONGINT;
FUNCTION SystemTagList(const command : string;const tags : pTagItem) : LONGINT; FUNCTION SystemTagList(const command : string;const tags : pTagItem) : LONGINT;
FUNCTION DOSSystem(const command : string;const tags : pTagItem) : LONGINT; FUNCTION DOSSystem(const command : string;const tags : pTagItem) : LONGINT;
{$endif}
IMPLEMENTATION IMPLEMENTATION
@ -1832,7 +1872,7 @@ FUNCTION MKBADDR(adr : POINTER): BPTR; inline;
BEGIN BEGIN
MKBADDR := BPTR( PTRUINT(adr) shr 2); MKBADDR := BPTR( PTRUINT(adr) shr 2);
END; END;
{$if not defined(AMIGA_V1_2_ONLY)}
FUNCTION AllocDosObjectTags(type_ : ULONG; Const argv : Array of PtrUInt) : POINTER; FUNCTION AllocDosObjectTags(type_ : ULONG; Const argv : Array of PtrUInt) : POINTER;
begin begin
AllocDosObjectTags := AllocDosObjectTagList(type_, @argv); AllocDosObjectTags := AllocDosObjectTagList(type_, @argv);
@ -2192,7 +2232,7 @@ FUNCTION DOSSystem(const command : string;const tags : pTagItem) : LONGINT;
begin begin
DOSSystem := DOSSystem(PChar(RawByteString(command)),tags); DOSSystem := DOSSystem(PChar(RawByteString(command)),tags);
end; end;
{$endif}
END. (* UNIT DOS *) END. (* UNIT DOS *)

View File

@ -73,6 +73,7 @@ function CreateTask (name: STRPTR; pri: longint;
procedure DeleteTask (task: pTask); inline; procedure DeleteTask (task: pTask); inline;
procedure NewList (list: pList); inline; procedure NewList (list: pList); inline;
{$if not defined(AMIGA_V1_2_ONLY)}
// moved to commodities, use them from there // moved to commodities, use them from there
{* Commodities support functions from amiga.lib *} {* Commodities support functions from amiga.lib *}
procedure FreeIEvents (events: pInputEvent); inline; procedure FreeIEvents (events: pInputEvent); inline;
@ -99,6 +100,7 @@ function CoerceMethodA(cl : pIClass; obj : pObject_; msg : APTR): ulong; inline;
function SetSuperAttrsA(cl : pIClass; obj: pObject_; msg : APTR): ulong; inline; function SetSuperAttrsA(cl : pIClass; obj: pObject_; msg : APTR): ulong; inline;
function DoMethod(obj: PObject_; Params: array of DWord): LongWord; inline; function DoMethod(obj: PObject_; Params: array of DWord): LongWord; inline;
{$endif}
// moved to utility, use them from there // moved to utility, use them from there
procedure HookEntry; procedure HookEntry;
@ -256,6 +258,7 @@ begin
CxTranslate := Commodities.CxTranslate(ie) CxTranslate := Commodities.CxTranslate(ie)
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
function DoMethodA(obj : pObject_; msg : APTR): ulong; inline; function DoMethodA(obj : pObject_; msg : APTR): ulong; inline;
begin begin
DoMethodA := Intuition.DoMethodA(obj, msg); DoMethodA := Intuition.DoMethodA(obj, msg);
@ -280,7 +283,7 @@ function SetSuperAttrsA(cl : pIClass; obj: pObject_; msg : APTR): ulong; inline;
begin begin
SetSuperAttrsA := Intuition.SetSuperAttrsA(cl, obj, msg); SetSuperAttrsA := Intuition.SetSuperAttrsA(cl, obj, msg);
end; end;
{$endif}
{ Do *NOT* change this to nostackframe! } { Do *NOT* change this to nostackframe! }
{ The compiler will build a stackframe with link/unlk. So that will actually correct { The compiler will build a stackframe with link/unlk. So that will actually correct
the stackpointer for both Pascal/StdCall and Cdecl functions, so the stackpointer the stackpointer for both Pascal/StdCall and Cdecl functions, so the stackpointer
@ -333,7 +336,9 @@ begin
end; end;
end; end;
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
VPrintf(Fmtstr,@argarray[0]); VPrintf(Fmtstr,@argarray[0]);
{$endif}
end; end;
procedure printf(Fmtstr : string; const Args : array of const); procedure printf(Fmtstr : string; const Args : array of const);

View File

@ -1176,6 +1176,111 @@ CONST
var var
ExecBase: PExecBase absolute _ExecBase; ExecBase: PExecBase absolute _ExecBase;
{$if defined(AMIGA_V1_2_ONLY)}
FUNCTION Supervisor(userFunction : tPROCEDURE location 'a5') : ULONG; syscall _ExecBase 030;
PROCEDURE Alert(alertNum : ULONG location 'd7'); syscall _ExecBase 108;
PROCEDURE Debug(flags : ULONG location 'd0'); syscall _ExecBase 114;
FUNCTION FindResident(const name : pCHAR location 'a1') : pResident; syscall _ExecBase 096;
PROCEDURE InitCode(startClass : ULONG location 'd0'; version : ULONG location 'd1'); syscall _ExecBase 072;
FUNCTION InitResident(const resident_ : pResident location 'a1'; segList : ULONG location 'd0') : POINTER; syscall _ExecBase 102;
PROCEDURE InitStruct(const initTable : POINTER location 'a1'; memory : POINTER location 'a2'; size : ULONG location 'd0'); syscall _ExecBase 078;
PROCEDURE AddIntServer(intNumber : LONGINT location 'd0'; interrupt_ : pInterrupt location 'a1'); syscall _ExecBase 168;
PROCEDURE Cause(interrupt_ : pInterrupt location 'a1'); syscall _ExecBase 180;
PROCEDURE Disable; syscall _ExecBase 120;
PROCEDURE Enable; syscall _ExecBase 126;
PROCEDURE Forbid; syscall _ExecBase 132;
PROCEDURE Permit; syscall _ExecBase 138;
PROCEDURE RemIntServer(intNumber : LONGINT location 'd0'; interrupt_ : pInterrupt location 'a1'); syscall _ExecBase 174;
FUNCTION SetIntVector(intNumber : LONGINT location 'd0';const interrupt_ : pInterrupt location 'a1') : pInterrupt; syscall _ExecBase 162;
FUNCTION SetSR(newSR : ULONG location 'd0'; mask : ULONG location 'd1') : ULONG; syscall _ExecBase 144;
FUNCTION SuperState : POINTER; syscall _ExecBase 150;
PROCEDURE UserState(sysStack : POINTER location 'd0'); syscall _ExecBase 156;
FUNCTION AllocAbs(byteSize : ULONG location 'd0'; location : POINTER location 'a1') : POINTER; syscall _ExecBase 204;
FUNCTION Allocate(freeList : pMemHeader location 'a0'; byteSize : ULONG location 'd0') : POINTER; syscall _ExecBase 186;
FUNCTION AllocEntry(entry : pMemList location 'a0') : pMemList; syscall _ExecBase 222;
FUNCTION ExecAllocMem(byteSize : ULONG location 'd0'; requirements : ULONG location 'd1') : POINTER; syscall _ExecBase 198;
FUNCTION AvailMem(requirements : ULONG location 'd1') : ULONG; syscall _ExecBase 216;
PROCEDURE Deallocate(freeList : pMemHeader location 'a0'; memoryBlock : POINTER location 'a1'; byteSize : ULONG location 'd1'); syscall _ExecBase 192;
PROCEDURE FreeEntry(entry : pMemList location 'a0'); syscall _ExecBase 228;
PROCEDURE ExecFreeMem(memoryBlock : POINTER location 'a1'; byteSize : ULONG location 'd0'); syscall _ExecBase 210;
PROCEDURE AddHead(list : pList location 'a0'; node : pNode location 'a1'); syscall _ExecBase 240;
PROCEDURE AddTail(list : pList location 'a0'; node : pNode location 'a1'); syscall _ExecBase 246;
PROCEDURE Enqueue(list : pList location 'a0'; node : pNode location 'a1'); syscall _ExecBase 270;
FUNCTION FindName(list : pList location 'a0'; const name : pCHAR location 'a1') : pNode; syscall _ExecBase 276;
PROCEDURE ExecInsert(list : pList location 'a0'; node : pNode location 'a1'; pred : pNode location 'a2'); syscall _ExecBase 234;
FUNCTION RemHead(list : pList location 'a0') : pNode; syscall _ExecBase 258;
PROCEDURE Remove(node : pNode location 'a1'); syscall _ExecBase 252;
FUNCTION RemTail(list : pList location 'a0') : pNode; syscall _ExecBase 264;
FUNCTION AddTask(task : pTask location 'a1';const initPC : POINTER location 'a2';const finalPC : POINTER location 'a3') : POINTER; syscall _ExecBase 282;
FUNCTION AllocSignal(signalNum : LONGINT location 'd0') : shortint; syscall _ExecBase 330;
FUNCTION AllocTrap(trapNum : LONGINT location 'd0') : LONGINT; syscall _ExecBase 342;
FUNCTION FindTask(const name : pCHAR location 'a1') : pTask; syscall _ExecBase 294;
PROCEDURE FreeSignal(signalNum : LONGINT location 'd0'); syscall _ExecBase 336;
PROCEDURE FreeTrap(trapNum : LONGINT location 'd0'); syscall _ExecBase 348;
PROCEDURE RemTask(task : pTask location 'a1'); syscall _ExecBase 288;
FUNCTION SetExcept(newSignals : ULONG location 'd0'; signalSet : ULONG location 'd1') : ULONG; syscall _ExecBase 312;
FUNCTION SetSignal(newSignals : ULONG location 'd0'; signalSet : ULONG location 'd1') : ULONG; syscall _ExecBase 306;
FUNCTION SetTaskPri(task : pTask location 'a1'; priority : LONGINT location 'd0') : shortint; syscall _ExecBase 300;
FUNCTION Wait(signalSet : ULONG location 'd0') : ULONG; syscall _ExecBase 318;
PROCEDURE AddPort(port : pMsgPort location 'a1'); syscall _ExecBase 354;
FUNCTION FindPort(const name : pCHAR location 'a1') : pMsgPort; syscall _ExecBase 390;
FUNCTION GetMsg(port : pMsgPort location 'a0') : pMessage; syscall _ExecBase 372;
PROCEDURE PutMsg(port : pMsgPort location 'a0'; message : pMessage location 'a1'); syscall _ExecBase 366;
PROCEDURE RemPort(port : pMsgPort location 'a1'); syscall _ExecBase 360;
PROCEDURE ReplyMsg(message : pMessage location 'a1'); syscall _ExecBase 378;
FUNCTION WaitPort(port : pMsgPort location 'a0') : pMessage; syscall _ExecBase 384;
PROCEDURE AddLibrary(lib : pLibrary location 'a1'); syscall _ExecBase 396;
PROCEDURE CloseLibrary(lib : pLibrary location 'a1'); syscall _ExecBase 414;
PROCEDURE MakeFunctions(const target : POINTER location 'a0';const functionArray : POINTER location 'a1';const funcDispBase :pointer location 'a2'); syscall _ExecBase 090;
FUNCTION MakeLibrary(const funcInit : POINTER location 'a0';const structInit : POINTER location 'a1'; libInit : tPROCEDURE location 'a2';dataSize : ULONG location 'd0'; segList : ULONG location 'd0') : pLibrary; syscall _ExecBase 084;
FUNCTION OldOpenLibrary(const libName : pCHAR location 'a1') : pLibrary; syscall _ExecBase 408;
FUNCTION OpenLibrary(const libName : pCHAR location 'a1'; version : ULONG location 'd0') : pLibrary; syscall _ExecBase 552;
PROCEDURE RemLibrary(lib : pLibrary location 'a1'); syscall _ExecBase 402;
FUNCTION SetFunction(lib : pLibrary location 'a1'; funcOffset : LONGINT location 'a0'; newFunction : tPROCEDURE location 'd0') : POINTER; syscall _ExecBase 420;
PROCEDURE SumLibrary(lib : pLibrary location 'a1'); syscall _ExecBase 426;
PROCEDURE AbortIO(ioRequest : pIORequest location 'a1'); syscall _ExecBase 480;
PROCEDURE AddDevice(device : pDevice location 'a1'); syscall _ExecBase 432;
FUNCTION CheckIO(ioRequest : pIORequest location 'a1') : pIORequest; syscall _ExecBase 468;
PROCEDURE CloseDevice(ioRequest : pIORequest location 'a1'); syscall _ExecBase 450;
FUNCTION DoIO(ioRequest : pIORequest location 'a1') : shortint; syscall _ExecBase 456;
FUNCTION OpenDevice(const devName : pCHAR location 'a0'; unite : ULONG location 'd0'; ioRequest : pIORequest location 'a1'; flags : ULONG location 'd1') : shortint; syscall _ExecBase 444;
PROCEDURE RemDevice(device : pDevice location 'a1'); syscall _ExecBase 438;
PROCEDURE SendIO(ioRequest : pIORequest location 'a1'); syscall _ExecBase 462;
FUNCTION WaitIO(ioRequest : pIORequest location 'a1') : shortint; syscall _ExecBase 474;
PROCEDURE AddResource(resource : POINTER location 'a1'); syscall _ExecBase 486;
FUNCTION OpenResource(const resName : pCHAR location 'a1') : POINTER; syscall _ExecBase 498;
PROCEDURE RemResource(resource : POINTER location 'a1'); syscall _ExecBase 492;
PROCEDURE AddSemaphore(sigSem : pSignalSemaphore location 'a1'); syscall _ExecBase 600;
FUNCTION AttemptSemaphore(sigSem : pSignalSemaphore location 'a0') : LongBool; syscall _ExecBase 576;
FUNCTION FindSemaphore(const sigSem : pCHAR location 'a1') : pSignalSemaphore; syscall _ExecBase 594;
PROCEDURE InitSemaphore(sigSem : pSignalSemaphore location 'a0'); syscall _ExecBase 558;
PROCEDURE ObtainSemaphore(sigSem : pSignalSemaphore location 'a0'); syscall _ExecBase 564;
PROCEDURE ObtainSemaphoreList(sigSem : pList location 'a0'); syscall _ExecBase 582;
FUNCTION Procure(sigSem : pSignalSemaphore location 'a0'; bidMsg : pSemaphoreMessage location 'a1') : LongBool; syscall _ExecBase 540;
PROCEDURE ReleaseSemaphore(sigSem : pSignalSemaphore location 'a0'); syscall _ExecBase 570;
PROCEDURE ReleaseSemaphoreList(sigSem : pList location 'a0'); syscall _ExecBase 588;
PROCEDURE RemSemaphore(sigSem : pSignalSemaphore location 'a1'); syscall _ExecBase 606;
PROCEDURE Vacate(sigSem : pSignalSemaphore location 'a0'; bidMsg : pSemaphoreMessage location 'a1'); syscall _ExecBase 546;
PROCEDURE AddMemList(size : ULONG location 'd0'; attributes : ULONG location 'd1'; pri : LONGINT location 'd2'; base : POINTER location 'a0'; const name : pCHAR location 'a1'); syscall _ExecBase 618;
PROCEDURE CopyMem(const source : POINTER location 'a0'; dest : POINTER location 'a1'; size : ULONG location 'd0'); syscall _ExecBase 624;
PROCEDURE CopyMemQuick(const source : POINTER location 'a0'; dest : POINTER location 'a1'; size : ULONG location 'd0'); syscall _ExecBase 630;
PROCEDURE SumKickData; syscall _ExecBase 612;
FUNCTION GetCC : ULONG; syscall _ExecBase 528;
function RawDoFmt(const formatString : pCHAR location 'a0';const dataStream : POINTER location 'a1'; putChProc : tPROCEDURE location 'a2'; putChData : POINTER location 'a3'): pointer; syscall _ExecBase 522;
FUNCTION TypeOfMem(const address : POINTER location 'a1') : ULONG; syscall _ExecBase 534;
{$else}
PROCEDURE AbortIO(ioRequest : pIORequest location 'a1'); syscall _ExecBase 480; PROCEDURE AbortIO(ioRequest : pIORequest location 'a1'); syscall _ExecBase 480;
PROCEDURE AddDevice(device : pDevice location 'a1'); syscall _ExecBase 432; PROCEDURE AddDevice(device : pDevice location 'a1'); syscall _ExecBase 432;
PROCEDURE AddHead(list : pList location 'a0'; node : pNode location 'a1'); syscall _ExecBase 240; PROCEDURE AddHead(list : pList location 'a0'; node : pNode location 'a1'); syscall _ExecBase 240;
@ -1306,6 +1411,7 @@ FUNCTION AVL_FindNextNodeByAddress(CONST node : pAVLNode location 'a0') : pAVLNo
FUNCTION AVL_FindNextNodeByKey(CONST root : pAVLNode location 'a0'; key : POINTER location 'a1'; func : POINTER location 'a2') : pAVLNode; syscall _ExecBase 894; FUNCTION AVL_FindNextNodeByKey(CONST root : pAVLNode location 'a0'; key : POINTER location 'a1'; func : POINTER location 'a2') : pAVLNode; syscall _ExecBase 894;
FUNCTION AVL_FindFirstNode(CONST root : pAVLNode location 'a0') : pAVLNode; syscall _ExecBase 900; FUNCTION AVL_FindFirstNode(CONST root : pAVLNode location 'a0') : pAVLNode; syscall _ExecBase 900;
FUNCTION AVL_FindLastNode(CONST root : pAVLNode location 'a0') : pAVLNode; syscall _ExecBase 906; FUNCTION AVL_FindLastNode(CONST root : pAVLNode location 'a0') : pAVLNode; syscall _ExecBase 906;
{$endif}
FUNCTION FindName(list : pList; const name : String) : pNode; FUNCTION FindName(list : pList; const name : String) : pNode;
FUNCTION FindPort(const name : String) : pMsgPort; FUNCTION FindPort(const name : String) : pMsgPort;
@ -1333,6 +1439,16 @@ function CreateTask(Name: STRPTR; Pri: LongInt; InitPC: Pointer; StackSize: Long
procedure DeleteTask(Task: PTask); procedure DeleteTask(Task: PTask);
procedure NewList(List: PList); procedure NewList(List: PList);
{$if defined(AMIGA_V1_2_ONLY)}
function CreateMsgPort: PMsgPort;
procedure DeleteMsgPort(Port: PMsgPort);
function CreateIORequest(const Port: PMsgPort; Size: LongWord): PIORequest;
procedure DeleteIORequest(IOReq: PIORequest);
{$endif}
IMPLEMENTATION IMPLEMENTATION
function BitMask(no :shortint): longint; inline; function BitMask(no :shortint): longint; inline;
@ -1444,6 +1560,17 @@ begin
end end
end; end;
{$if defined(AMIGA_V1_2_ONLY)}
function CreateIORequest(const Port: PMsgPort; Size: LongWord): PIORequest;
begin
CreateIORequest := CreateExtIO(Port, Size);
end;
procedure DeleteIORequest(IOReq: PIORequest);
begin
DeleteExtIO(IOReq);
end;
{$endif}
function CreateStdIO(Port: PMsgPort): PIOStdReq; function CreateStdIO(Port: PMsgPort): PIOStdReq;
begin begin
@ -1507,6 +1634,18 @@ begin
end; end;
end; end;
{$if defined(AMIGA_V1_2_ONLY)}
function CreateMsgPort: PMsgPort;
begin
CreateMsgPort := CreatePort(nil, 0);
end;
procedure DeleteMsgPort(Port: PMsgPort);
begin
DeletePort(Port);
end;
{$endif}
function CreateTask(Name: STRPTR; Pri: LongInt; InitPC: Pointer; StackSize: LongWord): PTask; function CreateTask(Name: STRPTR; Pri: LongInt; InitPC: Pointer; StackSize: LongWord): PTask;
var var
Memlist: PMemList; Memlist: PMemList;

View File

@ -4067,6 +4067,94 @@ CONST
var var
IntuitionBase: pIntuitionBase; IntuitionBase: pIntuitionBase;
{$if defined(AMIGA_V1_2_ONLY)}
PROCEDURE ActivateWindow(window : pWindow location 'a0'); syscall _IntuitionBase 450;
PROCEDURE CloseWindow(window : pWindow location 'a0'); syscall _IntuitionBase 072;
FUNCTION ModifyIDCMP(window : pWindow location 'a0'; flags : ULONG location 'd0') : LongBool; syscall _IntuitionBase 150;
PROCEDURE MoveWindow(window : pWindow location 'a0'; dx : LONGINT location 'd0'; dy : LONGINT location 'd1'); syscall _IntuitionBase 168;
FUNCTION OpenWindow(const newWindow : pNewWindow location 'a0') : pWindow; syscall _IntuitionBase 204;
PROCEDURE RefreshWindowFrame(window : pWindow location 'a0'); syscall _IntuitionBase 456;
PROCEDURE SetWindowTitles(window : pWindow location 'a0';const windowTitle : pCHAR location 'a1';const screenTitle : pCHAR location 'a2'); syscall _IntuitionBase 276;
PROCEDURE SizeWindow(window : pWindow location 'a0'; dx : LONGINT location 'd0'; dy : LONGINT location 'd1'); syscall _IntuitionBase 288;
FUNCTION WindowLimits(window : pWindow location 'a0'; widthMin : LONGINT location 'd0'; heightMin : LONGINT location 'd1'; widthMax : ULONG location 'd2'; heightMax : ULONG location 'd3') : LongBool; syscall _IntuitionBase 318;
PROCEDURE WindowToBack(window : pWindow location 'a0'); syscall _IntuitionBase 306;
PROCEDURE WindowToFront(window : pWindow location 'a0'); syscall _IntuitionBase 312;
FUNCTION ActivateGadget(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2') : LongBool syscall _IntuitionBase 462;
FUNCTION AddGadget(window : pWindow location 'a0'; gadget : pGadget location 'a1'; position : ULONG location 'd0') : WORD; syscall _IntuitionBase 042;
FUNCTION AddGList(window : pWindow location 'a0'; gadget : pGadget location 'a1'; position : ULONG location 'd0'; numGad : LONGINT location 'd1'; requester : pRequester location 'a2') : WORD; syscall _IntuitionBase 438;
PROCEDURE ModifyProp(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; flags : ULONG location 'd0'; horizPot : ULONG location 'd1'; vertPot : ULONG location 'd2'; horizBody : ULONG location 'd3'; vertBody : ULONG location 'd4'); syscall _IntuitionBase 156;
PROCEDURE NewModifyProp(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; flags : ULONG location 'd0'; horizPot : ULONG location 'd1'; vertPot : ULONG location 'd2'; horizBody : ULONG location 'd3'; vertBody : ULONG location 'd4'; numGad : LONGINT location 'd5'); syscall _IntuitionBase 468;
PROCEDURE OffGadget(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'); syscall _IntuitionBase 174;
PROCEDURE OnGadget(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'); syscall _IntuitionBase 186;
PROCEDURE RefreshGadgets(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'); syscall _IntuitionBase 222;
PROCEDURE RefreshGList(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; numGad : LONGINT location 'd0'); syscall _IntuitionBase 432;
FUNCTION RemoveGadget(window : pWindow; gadget : pGadget) : WORD; syscall _IntuitionBase 228;
FUNCTION RemoveGList(remPtr : pWindow location 'a0'; gadget : pGadget location 'a1'; numGad : LONGINT location 'd0') : WORD; syscall _IntuitionBase 444;
PROCEDURE ClearMenuStrip(window : pWindow location 'a0'); syscall _IntuitionBase 054;
FUNCTION ItemAddress(const menuStrip : pMenu location 'a0'; menuNumber : ULONG location 'd0') : pMenuItem; syscall _IntuitionBase 144;
PROCEDURE OffMenu(window : pWindow location 'a0'; menuNumber : ULONG location 'd0'); syscall _IntuitionBase 180;
PROCEDURE OnMenu(window : pWindow location 'a0'; menuNumber : ULONG location 'd0'); syscall _IntuitionBase 192;
FUNCTION SetMenuStrip(window : pWindow location 'a0'; menu : pMenu location 'a1') : LongBool; syscall _IntuitionBase 264;
FUNCTION AutoRequest(window : pWindow location 'a0';const body : pIntuiText location 'a1';const posText : pIntuiText location 'a2';const negText : pIntuiText location 'a3'; pFlag : ULONG location 'd0'; nFlag : ULONG location 'd1'; width : ULONG location 'd2'; height : ULONG location 'd3') : LongBool; syscall _IntuitionBase 348;
FUNCTION BuildSysRequest(window : pWindow location 'a0';const body : pIntuiText location 'a1';const posText : pIntuiText location 'a2';const negText : pIntuiText location 'a3'; flags : ULONG location 'd0'; width : ULONG location 'd1'; height : ULONG location 'd2') : pWindow; syscall _IntuitionBase 360;
FUNCTION ClearDMRequest(window : pWindow location 'a0') : LongBool; syscall _IntuitionBase 048;
FUNCTION DisplayAlert(alertNumber : ULONG location 'd0';const string_ : pCHAR location 'a0'; height : ULONG location 'd1') : LongBool; syscall _IntuitionBase 090;
PROCEDURE EndRequest(requester : pRequester location 'a0'; window : pWindow location 'a1'); syscall _IntuitionBase 120;
PROCEDURE FreeSysRequest(window : pWindow location 'a0'); syscall _IntuitionBase 372;
PROCEDURE InitRequester(requester : pRequester location 'a0'); syscall _IntuitionBase 138;
FUNCTION Request(requester : pRequester location 'a0'; window : pWindow location 'a1') : LongBool; syscall _IntuitionBase 240;
FUNCTION SetDMRequest(window : pWindow location 'a0'; requester : pRequester location 'a1') : LongBool; syscall _IntuitionBase 258;
function CloseScreen(screen : pScreen location 'a0'): LongBool; syscall _IntuitionBase 066;
FUNCTION CloseWorkBench : LongBool; syscall _IntuitionBase 078;
PROCEDURE DisplayBeep(screen : pScreen location 'a0'); syscall _IntuitionBase 096;
FUNCTION GetScreenData(buffer : POINTER location 'a0'; size : ULONG location 'D0'; type_ : ULONG location 'd1';const screen : pScreen location 'a1') : LongBool; syscall _IntuitionBase 426;
FUNCTION MakeScreen(screen : pScreen location 'a0') : LONGINT; syscall _IntuitionBase 378;
PROCEDURE MoveScreen(screen : pScreen location 'a0'; dx : LONGINT location 'd0'; dy : LONGINT location 'd1'); syscall _IntuitionBase 162;
FUNCTION OpenScreen(const newScreen : pNewScreen location 'a0') : pScreen; syscall _IntuitionBase 198;
FUNCTION OpenWorkBench : ULONG; syscall _IntuitionBase 210;
PROCEDURE ScreenToBack(screen : pScreen location 'a0'); syscall _IntuitionBase 246;
PROCEDURE ScreenToFront(screen : pScreen location 'a0'); syscall _IntuitionBase 252;
PROCEDURE ShowTitle(screen : pScreen location 'a0'; showIt : LONGINT location 'd0'); syscall _IntuitionBase 282;
FUNCTION WBenchToBack : LongBool; syscall _IntuitionBase 336;
FUNCTION WBenchToFront : LongBool; syscall _IntuitionBase 342;
PROCEDURE ClearPointer(window : pWindow location 'a0'); syscall _IntuitionBase 060;
PROCEDURE DrawBorder(rp : pRastPort location 'a0';const border : pBorder location 'a1'; leftOffset : LONGINT location 'd0'; topOffset : LONGINT location 'd1'); syscall _IntuitionBase 108;
PROCEDURE DrawImage(rp : pRastPort location 'a0'; image : pImage location 'a1'; leftOffset : LONGINT location 'd0'; topOffset : LONGINT location 'd1'); syscall _IntuitionBase 114;
FUNCTION IntuiTextLength(const iText : pIntuiText location 'a0') : LONGINT; syscall _IntuitionBase 330;
PROCEDURE PrintIText(rp : pRastPort location 'a0';const iText : pIntuiText location 'a1'; left : LONGINT location 'd0'; top : LONGINT location 'd1'); syscall _IntuitionBase 216;
PROCEDURE SetPointer(window : pWindow location 'a0'; pointer_ : pword location 'a1'; height : LONGINT location 'd0'; width : LONGINT location 'd1'; xOffset : LONGINT location 'd2'; yOffset : LONGINT location 'd3'); syscall _IntuitionBase 270;
FUNCTION AllocRemember(var rememberKey : pRemember location 'a0'; size : ULONG location 'd0'; flags : ULONG location 'd1') : POINTER syscall _IntuitionBase 396;
PROCEDURE FreeRemember(VAR rememberKey : pRemember location 'a0'; reallyForget : LONGINT location 'd0'); syscall _IntuitionBase 408;
PROCEDURE BeginRefresh(window : pWindow location 'a0'); syscall _IntuitionBase 354;
PROCEDURE EndRefresh(window : pWindow location 'a0'; complete : LONGBOOL location 'd0'); syscall _IntuitionBase 366;
FUNCTION RemakeDisplay : LONGINT; syscall _IntuitionBase 384;
FUNCTION RethinkDisplay : LONGINT; syscall _IntuitionBase 390;
FUNCTION LockIBase(dontknow : ULONG location 'd0') : ULONG; syscall _IntuitionBase 414;
PROCEDURE UnlockIBase(ibLock : ULONG location 'a0'); syscall _IntuitionBase 420;
FUNCTION ViewAddress : pView; syscall _IntuitionBase 294;
FUNCTION ViewPortAddress(const window : pWindow location 'a0') : pViewPort; syscall _IntuitionBase 300;
PROCEDURE CurrentTime(VAR seconds : ULONG location 'a0'; VAR micros : ULONG location 'a1'); syscall _IntuitionBase 084;
FUNCTION DoubleClick(sSeconds : ULONG location 'd0'; sMicros : ULONG location 'd1'; cSeconds : ULONG location 'd2'; cMicros : ULONG location 'd3') : LongBool; syscall _IntuitionBase 102;
FUNCTION GetDefPrefs(preferences : pPreferences location 'a0'; size : LONGINT location 'd0') : pPreferences; syscall _IntuitionBase 126;
FUNCTION GetPrefs(preferences : pPreferences location 'a0'; size : LONGINT location 'd0') : pPreferences; syscall _IntuitionBase 132;
PROCEDURE ReportMouse(flag : LONGINT location 'd0'; window : pWindow location 'a0'); syscall _IntuitionBase 234;
FUNCTION SetPrefs(const preferences : pPreferences location 'a0'; size : LONGINT location 'd0'; inform : LONGINT location 'd1') : pPreferences; syscall _IntuitionBase 324;
function OpenWindowTagList(NewWindow: PNewWindow; TagList: PTagItem):PWindow;
function OpenScreenTagList(NewScreen: PNewScreen; TagList: PTagItem): PScreen;
function EasyRequestArgs(Window: PWindow; const EasyStruct: PEasyStruct; IDCMPPtr: PLongWord; const Args: Pointer): LongInt;
{$else}
FUNCTION ActivateGadget(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2') : LongBool syscall _IntuitionBase 462; FUNCTION ActivateGadget(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2') : LongBool syscall _IntuitionBase 462;
PROCEDURE ActivateWindow(window : pWindow location 'a0'); syscall _IntuitionBase 450; PROCEDURE ActivateWindow(window : pWindow location 'a0'); syscall _IntuitionBase 450;
PROCEDURE AddClass(classPtr : pIClass location 'a0'); syscall _IntuitionBase 684; PROCEDURE AddClass(classPtr : pIClass location 'a0'); syscall _IntuitionBase 684;
@ -4189,24 +4277,29 @@ FUNCTION WindowLimits(window : pWindow location 'a0'; widthMin : LONGINT locatio
PROCEDURE WindowToBack(window : pWindow location 'a0'); syscall _IntuitionBase 306; PROCEDURE WindowToBack(window : pWindow location 'a0'); syscall _IntuitionBase 306;
PROCEDURE WindowToFront(window : pWindow location 'a0'); syscall _IntuitionBase 312; PROCEDURE WindowToFront(window : pWindow location 'a0'); syscall _IntuitionBase 312;
PROCEDURE ZipWindow(window : pWindow location 'a0'); syscall _IntuitionBase 504; PROCEDURE ZipWindow(window : pWindow location 'a0'); syscall _IntuitionBase 504;
{$endif}
function OpenScreenTags(newScreen : pNewScreen; tagList : array of PtrUInt) : pScreen; function OpenScreenTags(newScreen : pNewScreen; tagList : array of PtrUInt) : pScreen;
function OpenWindowTags(newWindow : pNewWindow; tagList : array of PtrUInt) : pWindow; function OpenWindowTags(newWindow : pNewWindow; tagList : array of PtrUInt) : pWindow;
{$if not defined(AMIGA_V1_2_ONLY)}
function NewObject(classPtr : pIClass; classID : string; Const argv : array of PtrUInt ) : POINTER;
function NewObject(classPtr : pIClass; classID : pCHAR; Const argv : array of PtrUInt) : POINTER; function NewObject(classPtr : pIClass; classID : pCHAR; Const argv : array of PtrUInt) : POINTER;
function SetAttrs(obj : POINTER; tags: array of DWord) : ULONG; function SetAttrs(obj : POINTER; tags: array of DWord) : ULONG;
function SetGadgetAttrs(gadget : pGadget; window : pWindow; requester : pRequester; Const argv : array of PtrUInt) : ULONG; function SetGadgetAttrs(gadget : pGadget; window : pWindow; requester : pRequester; Const argv : array of PtrUInt) : ULONG;
function NewObject(classPtr : pIClass; classID : string; Const argv : array of PtrUInt ) : POINTER;
function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT;
procedure SetWindowPointer(win : pWindow; tags: array of DWord); procedure SetWindowPointer(win : pWindow; tags: array of DWord);
{$endif}
function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT;
{ Intuition macros } { Intuition macros }
{$if not defined(AMIGA_V1_2_ONLY)}
function INST_DATA (cl: pIClass; o: p_Object): Pointer; function INST_DATA (cl: pIClass; o: p_Object): Pointer;
function SIZEOF_INSTANCE (cl: pIClass): Longint; function SIZEOF_INSTANCE (cl: pIClass): Longint;
function BASEOBJECT (o: p_Object): Pointer; function BASEOBJECT (o: p_Object): Pointer;
function _OBJ(o: p_Object): p_Object; inline; function _OBJ(o: p_Object): p_Object; inline;
function __OBJECT (o: Pointer): p_Object; inline; function __OBJECT (o: Pointer): p_Object; inline;
function OCLASS (o: Pointer): pIClass; inline; function OCLASS (o: Pointer): pIClass; inline;
{$endif}
function SHIFTITEM (n: smallint): word; function SHIFTITEM (n: smallint): word;
function SHIFTMENU (n: smallint): word; function SHIFTMENU (n: smallint): word;
function SHIFTSUB (n: smallint): word; function SHIFTSUB (n: smallint): word;
@ -4222,14 +4315,17 @@ function SUBNUM( n : Word): Word;
FUNCTION DisplayAlert(alertNumber : ULONG;const string_ : string; height : ULONG) : BOOLEAN; FUNCTION DisplayAlert(alertNumber : ULONG;const string_ : string; height : ULONG) : BOOLEAN;
FUNCTION LockPubScreen(const name : string) : pScreen; FUNCTION LockPubScreen(const name : string) : pScreen;
{$if not defined(AMIGA_V1_2_ONLY)}
FUNCTION MakeClass(const classID : string;const superClassID : pCHAR;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass; FUNCTION MakeClass(const classID : string;const superClassID : pCHAR;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass;
FUNCTION MakeClass(const classID : pCHAR;const superClassID : string;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass; FUNCTION MakeClass(const classID : pCHAR;const superClassID : string;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass;
FUNCTION MakeClass(const classID : string;const superClassID : string;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass; FUNCTION MakeClass(const classID : string;const superClassID : string;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass;
FUNCTION NewObjectA(classPtr : pIClass;const classID : string;const tagList : pTagItem) : POINTER; FUNCTION NewObjectA(classPtr : pIClass;const classID : string;const tagList : pTagItem) : POINTER;
{$endif}
PROCEDURE SetDefaultPubScreen(const name : string); PROCEDURE SetDefaultPubScreen(const name : string);
FUNCTION TimedDisplayAlert(alertNumber : ULONG;const string_ : string; height : ULONG; time : ULONG) : BOOLEAN; FUNCTION TimedDisplayAlert(alertNumber : ULONG;const string_ : string; height : ULONG; time : ULONG) : BOOLEAN;
PROCEDURE UnlockPubScreen(const name : string; screen : pScreen); PROCEDURE UnlockPubScreen(const name : string; screen : pScreen);
{$if not defined(AMIGA_V1_2_ONLY)}
function DoMethodA(Obj: PObject_; Msg: APTR): PtrUInt; function DoMethodA(Obj: PObject_; Msg: APTR): PtrUInt;
function DoSuperMethodA(Cl: PIClass; Obj: PObject_; Msg: APTR): PtrUInt; function DoSuperMethodA(Cl: PIClass; Obj: PObject_; Msg: APTR): PtrUInt;
function CoerceMethodA(Cl: PIClass; Obj: PObject_; Msg: APTR): PtrUInt; function CoerceMethodA(Cl: PIClass; Obj: PObject_; Msg: APTR): PtrUInt;
@ -4237,9 +4333,265 @@ function SetSuperAttrsA(Cl: PIClass; Obj: PObject_; Msg : APTR): PtrUInt;
function DoMethod(Obj: PObject_; Params: array of PtrUInt): LongWord; inline; function DoMethod(Obj: PObject_; Params: array of PtrUInt): LongWord; inline;
function DoSuperMethod(Cl: PIClass; Obj: PObject_; const Params: array of PtrUInt): PtrUInt; inline; function DoSuperMethod(Cl: PIClass; Obj: PObject_; const Params: array of PtrUInt): PtrUInt; inline;
{$endif}
IMPLEMENTATION IMPLEMENTATION
{$if defined(AMIGA_V1_2_ONLY)}
function OpenWindowTagList(NewWindow: PNewWindow; TagList: PTagItem):PWindow;
var
Nw: TNewWindow;
Scr: PScreen;
LockedScreenName: PChar;
ScreenTitle: PChar;
Win: PWindow;
ILock: LongWord;
begin
if not Assigned(NewWindow) then
begin
NewWindow := @Nw;
FillChar(Nw, SizeOf(Nw), 0);
NW.LeftEdge := 20;
NW.TopEdge := 20;
NW.Width := 200;
NW.Height := 100;
Nw.DetailPen := 0;
Nw.BlockPen := 1;
nw.MaxWidth := 640;
nw.MaxHeight := 512;
nw.WType := WBENCHSCREEN_F;
end;
LockedScreenName := nil;
ScreenTitle := nil;
//
while TagList <> nil do
begin
case TagList^.ti_Tag of
WA_Flags: NewWindow^.Flags := NewWindow^.Flags or TagList^.ti_Data;
WA_Gadgets: NewWindow^.FirstGadget := Pointer(TagList^.ti_Data);
WA_GimmeZeroZero: NewWindow^.Flags := NewWindow^.Flags or WFLG_GIMMEZEROZERO;
WA_InnerHeight,WA_Height: NewWindow^.Height := TagList^.ti_Data;
WA_IDCMP: NewWindow^.IDCMPFlags := NewWindow^.IDCMPFlags or TagList^.ti_Data;
WA_Left: NewWindow^.LeftEdge := TagList^.ti_Data;
WA_MaxHeight: NewWindow^.MaxHeight := TagList^.ti_Data;
WA_MaxWidth: NewWindow^.MaxWidth := TagList^.ti_Data;
WA_MinHeight: NewWindow^.MinHeight := TagList^.ti_Data;
WA_MinWidth: NewWindow^.MinWidth := TagList^.ti_Data;
WA_NoCareRefresh: NewWindow^.Flags := NewWindow^.Flags or WFLG_NOCAREREFRESH;
WA_PubScreen: NewWindow^.Screen := Pointer(TagList^.ti_Data);
WA_PubScreenName:
begin
ILock := LockIBase(0);
LockedScreenName := PChar(TagList^.ti_Data);
if (LowerCase(string(LockedScreenName)) = 'workbench') or (LockedScreenName = nil) then
begin
NewWindow^.WType := WBENCHSCREEN_F;
NewWindow^.Screen := nil;
end
else
begin
Scr := pIntuitionBase(_IntuitionBase)^.FirstScreen;
while Assigned(Scr) do
begin
if LowerCase(string(scr^.Title)) = LowerCase(string(LockedScreenName)) then
begin
NewWindow^.Screen := Scr;
NewWindow^.WType := CUSTOMSCREEN_F;
Break;
end;
Scr := Scr^.NextScreen
end;
UnlockIBase(ILock);
end;
end;
WA_ReportMouse: NewWindow^.Flags := NewWindow^.Flags or WFLG_REPORTMOUSE;
WA_RMBTrap: NewWindow^.Flags := NewWindow^.Flags or WFLG_RMBTRAP;
WA_ScreenTitle: ScreenTitle := PChar(TagList^.ti_Data);
WA_SimpleRefresh: NewWindow^.Flags := NewWindow^.Flags or WFLG_SIMPLE_REFRESH;
WA_SizeBBottom: NewWindow^.Flags := NewWindow^.Flags or WFLG_SIZEBBOTTOM;
WA_SizeBRight: NewWindow^.Flags := NewWindow^.Flags or WFLG_SIZEBRIGHT;
WA_SizeGadget: NewWindow^.Flags := NewWindow^.Flags or WFLG_SIZEGADGET;
WA_SmartRefresh: NewWindow^.Flags := NewWindow^.Flags or WFLG_SMART_REFRESH;
WA_SuperBitMap: NewWindow^.BitMap := Pointer(TagList^.ti_Data);
WA_Title: NewWindow^.Title := PChar(TagList^.ti_Data);
WA_Top: NewWindow^.TopEdge := TagList^.ti_Data;
WA_InnerWidth,WA_Width: NewWindow^.Width := TagList^.ti_Data;
end;
TagList := NextTagItem(TagList);
end;
Win := OpenWindow(NewWindow);
if Assigned(Win) and Assigned(ScreenTitle) then
SetWindowTitles(Win, NewWindow^.Title, ScreenTitle);
OpenWindowTagList := Win;
end;
function OpenScreenTagList(NewScreen: PNewScreen; TagList: PTagItem): PScreen;
var
Scr: PScreen;
Ns: TNewScreen;
ILock: LongWord;
STagList: PTagItem;
begin
OpenScreenTagList := nil;
if not Assigned(NewScreen) then
begin
NewScreen := @Ns;
FillChar(Ns, SizeOf(Ns), 0);
Ns.LeftEdge := 0;
Ns.TopEdge := 0;
Ns.Width := 320;
Ns.Height := 200;
Ns.DetailPen := 0;
Ns.BlockPen := 1;
Ns.Depth := 1;
Ns.ViewModes := 0;
end;
// SEarch for Like Workbench
STagList := TagList;
while STagList <> nil do
begin
if STagList^.ti_Tag = SA_LikeWorkbench then
begin
ILock := LockIBase(0);
Scr := PIntuitionBase(_IntuitionBase)^.FirstScreen;
if Assigned(Scr) then
begin
NewScreen^.LeftEdge := Scr^.LeftEdge;
NewScreen^.TopEdge := Scr^.TopEdge;
NewScreen^.Width := Scr^.Width;
NewScreen^.Height := Scr^.Height;
NewScreen^.Font := Scr^.Font;
NewScreen^.Depth := Scr^.BitMap.Depth;
NewScreen^.DetailPen := Scr^.DetailPen;
NewScreen^.BlockPen := Scr^.BlockPen;
NewScreen^.ViewModes := Scr^.ViewPort.Modes;
NewScreen^.SType := Scr^.Flags; // not sure if that is correct
end;
UnlockIBase(ILock);
end;
STagList := NextTagItem(STagList);
end;
// check the other tags
while TagList <> nil do
begin
case TagList^.ti_Tag of
SA_AutoScroll: if TagList^.ti_Data <> 0 then NewScreen^.SType := NewScreen^.SType or AUTOSCROLL else NewScreen^.SType := NewScreen^.SType and not AUTOSCROLL;
SA_Behind: if TagList^.ti_Data <> 0 then NewScreen^.SType := NewScreen^.SType or SCREENBEHIND_F else NewScreen^.SType := NewScreen^.SType and not SCREENBEHIND_F;
SA_BitMap: begin NewScreen^.SType := NewScreen^.SType or CUSTOMBITMAP_F; NewScreen^.CustomBitMap := Pointer(TagList^.ti_Data); end;
SA_BlockPen: NewScreen^.BlockPen := TagList^.ti_Data;
//SA_ColorMapEntries: TODO:
//SA_Colors: todo: after
//SA_Colors32: todo: after
SA_Depth: NewScreen^.Depth := TagList^.ti_Data;
SA_DetailPen: NewScreen^.DetailPen := TagList^.ti_Data;
SA_Font: NewScreen^.Font := Pointer(TagList^.ti_Data);
//SA_FullPalette: TODO:
//SA_Pens: TODO:
SA_Height: NewScreen^.Height := TagList^.ti_Data;
SA_Left: NewScreen^.LeftEdge := TagList^.ti_Data;
//SA_PubName: TODO: hmmm, not really possible
SA_Quiet: if TagList^.ti_Data <> 0 then NewScreen^.SType := NewScreen^.SType or SCREENQUIET_F else NewScreen^.SType := NewScreen^.SType and not SCREENQUIET_F;
SA_ShowTitle: if TagList^.ti_Data <> 0 then NewScreen^.SType := NewScreen^.SType or SHOWTITLE_F else NewScreen^.SType := NewScreen^.SType and not SHOWTITLE_F;
SA_Title: NewScreen^.DefaultTitle := PChar(TagList^.ti_Data);
SA_Top: NewScreen^.TopEdge := TagList^.ti_Data;
SA_Type: NewScreen^.SType := NewScreen^.SType or (TagList^.ti_Data) and not PUBLICSCREEN_F;
SA_DisplayID: NewScreen^.ViewModes := TagList^.ti_Data;
SA_Width: NewScreen^.Width := TagList^.ti_Data;
end;
TagList := NextTagItem(TagList);
end;
Scr := OpenScreen(NewScreen);
OpenScreenTagList := Scr;
end;
function EasyRequestArgs(Window: PWindow; const EasyStruct: PEasyStruct; IDCMPPtr: PLongWord; const Args: Pointer): LongInt;
var
Body, PosText, NegText: TIntuiText;
pFlags, nFlags, Width, Height: LongWord;
pText, NText, s: AnsiString;
Found: Boolean;
i: Integer;
Target: array[0..255] of Char;
Magic: LongWord;
begin
Magic := $16c04e75; // move.b d0,(a3)+ rts
RawDoFmt(easyStruct^.es_TextFormat, args, TProcedure(@Magic), @Target[0]);
with Body do
begin
BackPen := 1;
FrontPen := 2;
DrawMode := JAM1;
IText := @Target[0];
LeftEdge := 17;
TopEdge := 20;
ITextFont := nil;
NextText := nil;
end;
//
NText := '';
PText := '';
if Assigned(easyStruct^.es_GadgetFormat) then
begin
s := string(easyStruct^.es_GadgetFormat);
Found := False;
for i := 1 to Length(s) do
begin
if not Found and (s[i] = '|') then
Found := True
else
begin
if Found then
NText := NText + s[i]
else
PText := PText + s[i];
end;
end;
end;
if (PText = '') and (NText = '') then
PText := 'Ok';
with PosText do
begin
BackPen := 1;
FrontPen := 2;
DrawMode := JAM1;
IText := PChar(PText);
LeftEdge := 7;
TopEdge := 4;
ITextFont := nil;
NextText := nil;
end;
with NegText do
begin
BackPen := 1;
FrontPen := 2;
DrawMode := JAM1;
IText := PChar(NText);
LeftEdge := 7;
TopEdge := 4;
ITextFont := nil;
NextText := nil;
end;
Width := IntuiTextLength(@Body) + 50;
Height := 70;
if idcmpPtr <> nil then
pFlags := idcmpPtr^
else
pFlags := 0;
NFlags := 0;
if AutoRequest(Window, @Body, @PosText, @NegText, pFlags, nFlags, Width, Height) then
EasyRequestArgs := 1
else
EasyRequestArgs := 0;
end;
{$endif}
function OpenScreenTags(newScreen : pNewScreen; tagList : array of PtrUInt) : pScreen; function OpenScreenTags(newScreen : pNewScreen; tagList : array of PtrUInt) : pScreen;
begin begin
OpenScreenTags := OpenScreenTagList(newScreen, @tagList); OpenScreenTags := OpenScreenTagList(newScreen, @tagList);
@ -4250,6 +4602,7 @@ begin
OpenWindowTags := OpenWindowTagList(newWindow, @tagList); OpenWindowTags := OpenWindowTagList(newWindow, @tagList);
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
function NewObject(classPtr : pIClass; classID : pCHAR; Const argv : array of PtrUInt) : POINTER; function NewObject(classPtr : pIClass; classID : pCHAR; Const argv : array of PtrUInt) : POINTER;
begin begin
NewObject := NewObjectA(classPtr,classID, @argv); NewObject := NewObjectA(classPtr,classID, @argv);
@ -4270,16 +4623,19 @@ begin
SetGadgetAttrs := SetGadgetAttrsA(gadget,window,requester,@argv); SetGadgetAttrs := SetGadgetAttrsA(gadget,window,requester,@argv);
end; end;
procedure SetWindowPointer(win : pWindow; tags: array of DWord);
begin
SetWindowPointerA(win, @tags);
end;
{$endif}
function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT; function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT;
begin begin
EasyRequest := EasyRequestArgs(window, easystruct, idcmpptr, @args); EasyRequest := EasyRequestArgs(window, easystruct, idcmpptr, @args);
end; end;
procedure SetWindowPointer(win : pWindow; tags: array of DWord);
begin
SetWindowPointerA(win, @tags);
end;
{$if not defined(AMIGA_V1_2_ONLY)}
function INST_DATA (cl: pIClass; o: p_Object): Pointer; inline; function INST_DATA (cl: pIClass; o: p_Object): Pointer; inline;
begin begin
INST_DATA := Pointer(Longint(o) + cl^.cl_InstOffset); INST_DATA := Pointer(Longint(o) + cl^.cl_InstOffset);
@ -4309,6 +4665,7 @@ function OCLASS (o: Pointer): pIClass; inline;
begin begin
OCLASS := p_Object(o - sizeof(t_Object))^.o_Class; OCLASS := p_Object(o - sizeof(t_Object))^.o_Class;
end; end;
{$endif}
function SHIFTITEM (n: smallint): word; inline; function SHIFTITEM (n: smallint): word; inline;
begin begin
@ -4389,6 +4746,7 @@ begin
LockPubScreen := LockPubScreen(PChar(RawByteString(name))); LockPubScreen := LockPubScreen(PChar(RawByteString(name)));
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
FUNCTION MakeClass(const classID : string;const superClassID : pCHAR;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass; FUNCTION MakeClass(const classID : string;const superClassID : pCHAR;const superClassPtr : pIClass; instanceSize : ULONG; flags : ULONG) : pIClass;
begin begin
MakeClass := MakeClass(PChar(RawByteString(classID)),superClassID,superClassPtr,instanceSize,flags); MakeClass := MakeClass(PChar(RawByteString(classID)),superClassID,superClassPtr,instanceSize,flags);
@ -4408,6 +4766,7 @@ FUNCTION NewObjectA(classPtr : pIClass;const classID : string;const tagList : pT
begin begin
NewObjectA := NewObjectA(classPtr,PChar(RawByteString(classID)),taglist); NewObjectA := NewObjectA(classPtr,PChar(RawByteString(classID)),taglist);
end; end;
{$endif}
PROCEDURE SetDefaultPubScreen(const name : string); PROCEDURE SetDefaultPubScreen(const name : string);
begin begin
@ -4424,7 +4783,7 @@ begin
UnlockPubScreen(PChar(RawByteString(name)),screen); UnlockPubScreen(PChar(RawByteString(name)),screen);
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
function DoMethodA(Obj: PObject_; Msg: APTR): PtrUInt; function DoMethodA(Obj: PObject_; Msg: APTR): PtrUInt;
begin begin
if Assigned(Obj) then if Assigned(Obj) then
@ -4470,6 +4829,7 @@ begin
arr[2] := 0; arr[2] := 0;
SetSuperAttrsA := DoSuperMethodA(Cl, Obj, @arr); SetSuperAttrsA := DoSuperMethodA(Cl, Obj, @arr);
end; end;
{$endif}
initialization initialization
IntuitionBase := pIntuitionBase(_IntuitionBase); IntuitionBase := pIntuitionBase(_IntuitionBase);

View File

@ -110,13 +110,58 @@ VAR KeymapBase : pLibrary = nil;
const const
KEYMAPNAME : PChar = 'keymap.library'; KEYMAPNAME : PChar = 'keymap.library';
{$if defined(AMIGA_V1_2_ONLY)}
function MapRawKey(event: PInputEvent; Buffer: PCHAR; Length: LongInt; keyMap: PKeyMap): SmallInt;
{$else}
FUNCTION AskKeyMapDefault : pKeyMap; syscall KeymapBase 036; FUNCTION AskKeyMapDefault : pKeyMap; syscall KeymapBase 036;
FUNCTION MapANSI(thestring : pCHAR location 'a0'; count : LONGINT location 'd0'; buffer : pCHAR location 'a1'; length : LONGINT location 'd1'; keyMap : pKeyMap location 'a2') : LONGINT; syscall KeymapBase 048; FUNCTION MapANSI(thestring : pCHAR location 'a0'; count : LONGINT location 'd0'; buffer : pCHAR location 'a1'; length : LONGINT location 'd1'; keyMap : pKeyMap location 'a2') : LONGINT; syscall KeymapBase 048;
FUNCTION MapRawKey(event : pInputEvent location 'a0'; buffer : pCHAR location 'a1'; length : LONGINT location 'd1'; keyMap : pKeyMap location 'a2') : smallint; syscall KeymapBase 042; FUNCTION MapRawKey(event : pInputEvent location 'a0'; buffer : pCHAR location 'a1'; length : LONGINT location 'd1'; keyMap : pKeyMap location 'a2') : smallint; syscall KeymapBase 042;
PROCEDURE SetKeyMapDefault(keyMap : pKeyMap location 'a0'); syscall KeymapBase 030; PROCEDURE SetKeyMapDefault(keyMap : pKeyMap location 'a0'); syscall KeymapBase 030;
{$endif}
IMPLEMENTATION IMPLEMENTATION
{$if defined(AMIGA_V1_2_ONLY)}
var
ConDev: PDevice = nil;
ConMsgPort: PMsgPort = nil;
ConIOReq: PIORequest = nil;
function RawKeyConvert(Events: PInputEvent location 'a0'; Buffer: PCHAR location 'a1'; Length: LongInt location 'd1'; KeyMap: PKeyMap location 'a2'): LongInt; syscall ConDev 048;
function MapRawKey(event: PInputEvent; Buffer: PCHAR; Length: LongInt; keyMap: PKeyMap): SmallInt;
begin
if not Assigned(ConDev) then
begin
ConMsgPort := CreatePort(nil, 0);
ConIOReq := CreateExtIO(ConMsgPort, SizeOf(TIOStdReq));
OpenDevice('console.device', -1, ConIOReq, 0);
ConDev := ConIOReq^.io_Device;
end;
if Assigned(ConDev) then
MapRawKey := RawKeyConvert(event, Buffer, length, keymap)
else
MapRawKey := 0;
end;
procedure CloseKeyMapConsole;
begin
if Assigned(ConDev) and Assigned(ConIOReq) then
begin
CloseDevice(ConIOReq);
DeleteExtIO(ConIOReq);
end;
ConDev := nil;
ConIOReq := nil;
if Assigned(ConMsgPort) then
DeletePort(ConMsgPort);
ConMsgPort := nil;
end;
{$endif}
const const
{ Change VERSION and LIBVERSION to proper values } { Change VERSION and LIBVERSION to proper values }
VERSION : string[2] = '0'; VERSION : string[2] = '0';
@ -127,6 +172,9 @@ initialization
finalization finalization
if Assigned(KeymapBase) then if Assigned(KeymapBase) then
CloseLibrary(KeymapBase); CloseLibrary(KeymapBase);
{$if defined(AMIGA_V1_2_ONLY)}
CloseKeyMapConsole;
{$endif}
END. (* UNIT KEYMAP *) END. (* UNIT KEYMAP *)

View File

@ -339,6 +339,11 @@ Type
var var
UtilityBase: pUtilityBase; UtilityBase: pUtilityBase;
{$if defined(AMIGA_V1_2_ONLY)}
function NextTagItem(var Item: PTagItem): PTagItem; inline;
{$else}
function AddNamedObject(nameSpace : pNamedObject location 'a0';obj : pNamedObject location 'a1') : LongBool; syscall _UtilityBase 222; function AddNamedObject(nameSpace : pNamedObject location 'a0';obj : pNamedObject location 'a1') : LongBool; syscall _UtilityBase 222;
function AllocateTagItems(num : ULONG location 'd0') : pTagItem; syscall _UtilityBase 066; function AllocateTagItems(num : ULONG location 'd0') : pTagItem; syscall _UtilityBase 066;
function AllocNamedObjectA(const name : STRPTR location 'a0';const TagList : pTagItem location 'a1') : pNamedObject; syscall _UtilityBase 228; function AllocNamedObjectA(const name : STRPTR location 'a0';const TagList : pTagItem location 'a1') : pNamedObject; syscall _UtilityBase 228;
@ -389,6 +394,7 @@ FUNCTION Stricmp(CONST string1 : string; CONST string2 : string) : LONGINT;
FUNCTION Strnicmp(CONST string1 : string; CONST string2 : pCHAR; length : LONGINT) : LONGINT; FUNCTION Strnicmp(CONST string1 : string; CONST string2 : pCHAR; length : LONGINT) : LONGINT;
FUNCTION Strnicmp(CONST string1 : pCHAR; CONST string2 : string; length : LONGINT) : LONGINT; FUNCTION Strnicmp(CONST string1 : pCHAR; CONST string2 : string; length : LONGINT) : LONGINT;
FUNCTION Strnicmp(CONST string1 : string; CONST string2 : string; length : LONGINT) : LONGINT; FUNCTION Strnicmp(CONST string1 : string; CONST string2 : string; length : LONGINT) : LONGINT;
{$endif}
function TAG_(value: pointer): PtrUInt; overload; inline; function TAG_(value: pointer): PtrUInt; overload; inline;
@ -408,6 +414,40 @@ procedure HookEntryPas;
IMPLEMENTATION IMPLEMENTATION
{$if defined(AMIGA_V1_2_ONLY)}
{$HINTS OFF}
function NextTagItem(var Item: PTagItem): PTagItem; inline;
begin
NextTagItem := nil;
if Item = nil then
Exit;
//
Inc(Item);
repeat
if Item = nil then
Exit;
case Item^.ti_Tag of
TAG_DONE:
begin
Item := nil;
NextTagItem := nil;
Exit;
end;
TAG_SKIP: Inc(Item, Item^.ti_Data);
TAG_MORE: Item := PTagItem(Item^.ti_Data);
TAG_IGNORE: Inc(Item);
else
begin
NextTagItem := Item;
Exit;
end;
end;
until False;
end;
{$else}
function AllocNamedObject(name : STRPTR; Const argv : array of PtrUInt) : pNamedObject; function AllocNamedObject(name : STRPTR; Const argv : array of PtrUInt) : pNamedObject;
begin begin
AllocNamedObject := AllocNamedObjectA(name,@argv); AllocNamedObject := AllocNamedObjectA(name,@argv);
@ -453,6 +493,7 @@ FUNCTION Strnicmp(CONST string1 : string; CONST string2 : string; length : LONGI
begin begin
Strnicmp := Strnicmp(PChar(RawbyteString(string1)),PChar(RawbyteString(string2)),length); Strnicmp := Strnicmp(PChar(RawbyteString(string1)),PChar(RawbyteString(string2)),length);
end; end;
{$endif}
function TAG_(value: pointer): PtrUInt; inline; function TAG_(value: pointer): PtrUInt; inline;
begin begin

View File

@ -88,10 +88,13 @@ function FExpandLock( l : BPTR): String;
var var
buffer : array[0..255] of char; buffer : array[0..255] of char;
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
if l <> 0 then begin if l <> 0 then begin
if NameFromLock(l,buffer,255) then FExpandLock := strpas(buffer) if NameFromLock(l,buffer,255) then FExpandLock := strpas(buffer)
else FExpandLock := ''; else FExpandLock := '';
end else FExpandLock := ''; end else
{$endif}
FExpandLock := '';
end; end;
Function CSCPAR(rk : pRemember; s : String) : STRPTR; Function CSCPAR(rk : pRemember; s : String) : STRPTR;

View File

@ -59,9 +59,12 @@ begin
if WBMsg <> nil then begin if WBMsg <> nil then begin
ProgramName := strpas(WBMsg^.sm_ArgList^[1].wa_Name); ProgramName := strpas(WBMsg^.sm_ArgList^[1].wa_Name);
end else begin end else begin
{$if not defined(AMIGA_V1_2_ONLY)}
if GetprogramName(buffer,255) then begin if GetprogramName(buffer,255) then begin
ProgramName := strpas(buffer); ProgramName := strpas(buffer);
end else begin end else
{$endif}
begin
ProgramName := ''; ProgramName := '';
end; end;
end; end;

View File

@ -31,8 +31,10 @@ var
fib: TFileInfoBlock; fib: TFileInfoBlock;
begin begin
Result := 0; Result := 0;
{$if not defined(AMIGA_V1_2_ONLY)}
if Boolean(ExamineFH(BPTR(Handle), @fib)) then if Boolean(ExamineFH(BPTR(Handle), @fib)) then
Result := fib.fib_size; Result := fib.fib_size;
{$endif}
end; end;
function TInputPipeStream.GetPosition: Int64; function TInputPipeStream.GetPosition: Int64;
@ -50,11 +52,13 @@ var
Filename: array[0..255] of Char; Filename: array[0..255] of Char;
DeleteIt: Boolean; DeleteIt: Boolean;
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
if (FHandle <> UnusedHandle) and (FHandle <> 0) then if (FHandle <> UnusedHandle) and (FHandle <> 0) then
begin begin
DeleteIt := NameFromFH(BPTR(FHandle), @(Filename[0]), 255); DeleteIt := NameFromFH(BPTR(FHandle), @(Filename[0]), 255);
FileClose(FHandle); FileClose(FHandle);
if DeleteIt then if DeleteIt then
AmigaDos.dosDeleteFile(@(Filename[0])); AmigaDos.dosDeleteFile(@(Filename[0]));
end; end;
{$endif}
end; end;

View File

@ -556,8 +556,10 @@ begin
else else
InternalWrite(CSI + '22;3'+ IntToStr(AnsiColors[Color].o) + 'm') InternalWrite(CSI + '22;3'+ IntToStr(AnsiColors[Color].o) + 'm')
{$else} {$else}
{$if not defined(AMIGA_V1_2_ONLY)}
if Pens[Color] < 0 then if Pens[Color] < 0 then
Pens[Color] := ObtainBestPen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, AnsiColors[color].r shl 24, AnsiColors[color].g shl 24, AnsiColors[color].b shl 24, [TAG_END]); Pens[Color] := ObtainBestPen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, AnsiColors[color].r shl 24, AnsiColors[color].g shl 24, AnsiColors[color].b shl 24, [TAG_END]);
{$endif}
TheUnit := GetConUnit; TheUnit := GetConUnit;
if Assigned(TheUnit) then if Assigned(TheUnit) then
begin begin
@ -595,8 +597,10 @@ begin
else else
InternalWrite(CSI + '22;4'+ IntToStr(AnsiColors[Color].o) + 'm') InternalWrite(CSI + '22;4'+ IntToStr(AnsiColors[Color].o) + 'm')
{$else} {$else}
{$if not defined(AMIGA_V1_2_ONLY)}
if Pens[Color] < 0 then if Pens[Color] < 0 then
Pens[Color] := ObtainBestPen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, AnsiColors[color].r shl 24, AnsiColors[color].g shl 24, AnsiColors[color].b shl 24, [TAG_END]); Pens[Color] := ObtainBestPen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, AnsiColors[color].r shl 24, AnsiColors[color].g shl 24, AnsiColors[color].b shl 24, [TAG_END]);
{$endif}
TheUnit := GetConUnit; TheUnit := GetConUnit;
if Assigned(TheUnit) then if Assigned(TheUnit) then
begin begin
@ -891,7 +895,9 @@ procedure InitCRT;
var var
i: Integer; i: Integer;
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
SetMode(DosOutput(), 1); SetMode(DosOutput(), 1);
{$endif}
// //
AssignCrt(Output); AssignCrt(Output);
Rewrite(Output); Rewrite(Output);
@ -913,11 +919,15 @@ procedure FreeCRT;
var var
i: Integer; i: Integer;
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
SetMode(DosOutput(), 0); SetMode(DosOutput(), 0);
{$endif}
for i := 0 to High(Pens) do for i := 0 to High(Pens) do
begin begin
{$if not defined(AMIGA_V1_2_ONLY)}
if Pens[i] >= 0 then if Pens[i] >= 0 then
ReleasePen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, Pens[i]); ReleasePen(IntuitionBase^.ActiveScreen^.ViewPort.ColorMap, Pens[i]);
{$endif}
Pens[i] := -1; Pens[i] := -1;
end; end;
// reset colors and delete to end of screen (get rid of old drawings behind the last caret position) // reset colors and delete to end of screen (get rid of old drawings behind the last caret position)

View File

@ -31,6 +31,10 @@ interface
function WaitForSystemEvent(millisec: Integer): boolean; function WaitForSystemEvent(millisec: Integer): boolean;
function IBMToANSI(s: RawByteString): RawByteString;
function ANSIToIBM(s: RawByteString): RawByteString;
implementation implementation
uses uses
@ -175,6 +179,118 @@ begin
LastShiftState := LastShiftState or $40; LastShiftState := LastShiftState or $40;
end; end;
procedure AnsiToIBMChar(var c: Char); inline;
begin
// https://en.wikipedia.org/wiki/Code_page_437
case c of
// line 8
#$C7: c := #128; // C
#$FC: c := #129; // ue
#$E9: c := #130; // e'
#$E2: c := #131; // a^
#$E4: c := #132; // ae
#$E0: c := #133; // a`
#$E5: c := #134; //
#$e7: c := #135; // c
#$ea: c := #136; // e^
#$eb: c := #137; // ee
#$E8: c := #138; // e`
#$ef: c := #139; // ie
#$ee: c := #140; // i^
#$ec: c := #141; // i`
#$C4: c := #142; // AE
// line 9
#$C9: c := #144; // Ee
#$e6: c := #145; // a-e
#$c6: c := #146; // A-E
#$F4: c := #147; // o^
#$F6: c := #148; // oe
#$F2: c := #149; // o`
#$FB: c := #150; // u^
#$F9: c := #151; // u`
#$FF: c := #152; // ye
#$D6: c := #153; // OE
#$DC: c := #154; // UE
#$A2: c := #155; // cent
#$A3: c := #156; // Pound
#$A5: c := #157; // Yen
// line A
#$E1: c := #160; // a'
#$ED: c := #161; // i'
#$F3: c := #162; // o'
#$FA: c := #163; // u'
#$F1: c := #164; // n~
#$D1: c := #165; // N~
// line E
#$DF: c := #225; // sz
end;
end;
procedure IBMToAnsiChar(var c: Char); inline;
begin
case c of
// line 8
#128: c := #$C7; // C
#129: c := #$FC; // ue
#130: c := #$E9; // e'
#131: c := #$E2; // a^
#132: c := #$E4; // ae
#133: c := #$E0; // a`
#134: c := #$E5; //
#135: c := #$e7; // c
#136: c := #$ea; // e^
#137: c := #$eb; // ee
#138: c := #$E8; // e`
#139: c := #$ef; // ie
#140: c := #$ee; // i^
#141: c := #$ec; // i`
#142: c := #$C4; // AE
// line 9
#144: c := #$C9; // Ee
#145: c := #$e6; // a-e
#146: c := #$c6; // A-E
#147: c := #$F4; // o^
#148: c := #$F6; // oe
#149: c := #$F2; // o`
#150: c := #$FB; // u^
#151: c := #$F9; // u`
#152: c := #$FF; // ye
#153: c := #$D6; // OE
#154: c := #$DC; // UE
#155: c := #$A2; // cent
#156: c := #$A3; // Pound
#157: c := #$A5; // Yen
// line A
#160: c := #$E1; // a'
#161: c := #$ED; // i'
#162: c := #$F3; // o'
#163: c := #$FA; // u'
#164: c := #$F1; // n~
#165: c := #$D1; // N~
// line E
#225: c := #$DF; // sz
end;
end;
function IBMToANSI(s: RawByteString): RawByteString;
var
i: Integer;
begin
for i := 1 to Length(s) do
IBMToAnsiChar(s[i]);
IBMToANSI := s;
end;
function ANSIToIBM(s: RawByteString): RawByteString;
var
i: Integer;
begin
for i := 1 to Length(s) do
AnsiToIBMChar(s[i]);
ANSIToIBM := s;
end;
function SysPollKeyEvent: TKeyEvent; function SysPollKeyEvent: TKeyEvent;
var var
MouseEvent: Boolean; // got a mouseevent -> do not leave cycle MouseEvent: Boolean; // got a mouseevent -> do not leave cycle
@ -344,6 +460,7 @@ begin
ie.ie_position.ie_addr := PPointer(IAddr)^; ie.ie_position.ie_addr := PPointer(IAddr)^;
Buff[0] := #0; Buff[0] := #0;
Ret := MapRawKey(@ie, @Buff[0], 1, nil); Ret := MapRawKey(@ie, @Buff[0], 1, nil);
AnsiToIBMChar(Buff[0]);
KeyCode := Ord(Buff[0]); KeyCode := Ord(Buff[0]);
KeySet^.KeyCode := Ord(Buff[0]); // if maprawkey does not work it still is 0 KeySet^.KeyCode := Ord(Buff[0]); // if maprawkey does not work it still is 0
KeySet^.ShiftState := LastShiftState; // shift state set before the case KeySet^.ShiftState := LastShiftState; // shift state set before the case

View File

@ -129,6 +129,9 @@ begin
SA_Draggable , 1, SA_Draggable , 1,
SA_Quiet , 1, SA_Quiet , 1,
SA_LikeWorkbench , 1, // Let OS SA_LikeWorkbench , 1, // Let OS
{$if defined(AMIGA_V1_2_ONLY)}
SA_Depth , 4,
{$endif}
TAG_END, TAG_END TAG_END, TAG_END
]); ]);
{$ifdef VIDEODEBUG} {$ifdef VIDEODEBUG}
@ -174,9 +177,10 @@ var
videoDefaultFlags: PtrUInt; videoDefaultFlags: PtrUInt;
begin begin
videoDefaultFlags:=VIDEO_WFLG_DEFAULTS; videoDefaultFlags:=VIDEO_WFLG_DEFAULTS;
{$if not defined(AMIGA_V1_2_ONLY)}
if GetVar('FPC_VIDEO_SIMPLEREFRESH',@envBuf,sizeof(envBuf),0) > -1 then if GetVar('FPC_VIDEO_SIMPLEREFRESH',@envBuf,sizeof(envBuf),0) > -1 then
videoDefaultFlags:=videoDefaultFlags and not WFLG_SMART_REFRESH; videoDefaultFlags:=videoDefaultFlags and not WFLG_SMART_REFRESH;
{$endif}
if FPC_VIDEO_FULLSCREEN then if FPC_VIDEO_FULLSCREEN then
begin begin
OS_Screen := GetScreen; OS_Screen := GetScreen;
@ -196,7 +200,7 @@ begin
WA_Activate , 1, WA_Activate , 1,
WA_Borderless , 1, WA_Borderless , 1,
WA_BackDrop , 1, WA_BackDrop , 1,
WA_FLAGS , VIDEO_WFLG_DEFAULTS, WA_FLAGS , VIDEO_WFLG_DEFAULTS or WFLG_BORDERLESS,
WA_IDCMP , VIDEO_IDCMP_DEFAULTS, WA_IDCMP , VIDEO_IDCMP_DEFAULTS,
TAG_END, TAG_END TAG_END, TAG_END
]); ]);
@ -266,6 +270,11 @@ begin
{ FIXME/TODO: next to the hardwired selection, there could be some heuristics, { FIXME/TODO: next to the hardwired selection, there could be some heuristics,
which sets the font size correctly on screens according to the aspect which sets the font size correctly on screens according to the aspect
ratio. (KB) } ratio. (KB) }
{$if defined(AMIGA_V1_2_ONLY)}
VideoFont:=@vgafont8;
VideoFontHeight:=8;
FPC_VIDEO_FULLSCREEN := True;
{$else}
VideoFont:=@vgafont; VideoFont:=@vgafont;
VideoFontHeight:=16; VideoFontHeight:=16;
if GetVar('FPC_VIDEO_BUILTINFONT',@envBuf,sizeof(envBuf),0) > -1 then if GetVar('FPC_VIDEO_BUILTINFONT',@envBuf,sizeof(envBuf),0) > -1 then
@ -283,6 +292,7 @@ begin
end; end;
end; end;
end; end;
{$endif}
// fill videobuf and oldvideobuf with different bytes, to allow proper first draw // fill videobuf and oldvideobuf with different bytes, to allow proper first draw
FillDword(VideoBuf^, VideoBufSize div 4, $1234D3AD); FillDword(VideoBuf^, VideoBufSize div 4, $1234D3AD);
@ -305,7 +315,7 @@ begin
// borders or titlebar as intended. // borders or titlebar as intended.
ScreenWidth := VideoWindow^.GZZWidth div 8; ScreenWidth := VideoWindow^.GZZWidth div 8;
ScreenHeight := VideoWindow^.GZZHeight div VideoFontHeight; ScreenHeight := VideoWindow^.GZZHeight div VideoFontHeight;
ScreenColor := False; ScreenColor := True;
{$ifdef VIDEODEBUG} {$ifdef VIDEODEBUG}
Writeln('DEBUG: Fullscreen - windowed - Width * Heigth = ',ScreenWidth,' * ',ScreenHeight); Writeln('DEBUG: Fullscreen - windowed - Width * Heigth = ',ScreenWidth,' * ',ScreenHeight);
@ -326,8 +336,13 @@ begin
for Counter := 0 to 15 do for Counter := 0 to 15 do
begin begin
VideoPens[Counter] := ObtainBestPenA(VideoColorMap, {$if defined(AMIGA_V1_2_ONLY)}
VideoPens[Counter] := Counter;
SetRGB4(@(PScreen(VideoWindow^.WScreen)^.ViewPort), Counter, vgacolors[counter, 0] shr 4, vgacolors[counter, 1] shr 4, vgacolors[counter, 2] shr 4);
{$else}
VideoPens[Counter] := ObtainBestPenA(VideoColorMap,
vgacolors[counter, 0] shl 24, vgacolors[counter, 1] shl 24, vgacolors[counter, 2] shl 24, nil); vgacolors[counter, 0] shl 24, vgacolors[counter, 1] shl 24, vgacolors[counter, 2] shl 24, nil);
{$endif}
{$ifdef VIDEODEBUG} {$ifdef VIDEODEBUG}
If VideoPens[Counter] = -1 then If VideoPens[Counter] = -1 then
WriteLn('errr color[',Counter,'] = ', VideoPens[Counter]) WriteLn('errr color[',Counter,'] = ', VideoPens[Counter])
@ -437,8 +452,10 @@ begin
FreeBitmap(BufRp^.Bitmap); FreeBitmap(BufRp^.Bitmap);
BufRp^.Bitmap := nil; BufRp^.Bitmap := nil;
{$endif} {$endif}
{$if not defined(AMIGA_V1_2_ONLY)}
for Counter := 0 to 15 do for Counter := 0 to 15 do
ReleasePen(VideoColorMap, VideoPens[Counter]); ReleasePen(VideoColorMap, VideoPens[Counter]);
{$endif}
if ((FPC_VIDEO_FULLSCREEN) and (OS_Screen <> nil)) then if ((FPC_VIDEO_FULLSCREEN) and (OS_Screen <> nil)) then
begin begin
CloseScreen(OS_Screen); CloseScreen(OS_Screen);
@ -821,7 +838,11 @@ end;
function SysGetVideoModeCount: Word; function SysGetVideoModeCount: Word;
begin begin
{$if defined(AMIGA_V1_2_ONLY)}
SysGetVideoModeCount := 1;
{$else}
SysGetVideoModeCount := 2; SysGetVideoModeCount := 2;
{$endif}
end; end;
function SysGetVideoModeData(Index: Word; var Mode: TVideoMode): Boolean; function SysGetVideoModeData(Index: Word; var Mode: TVideoMode): Boolean;
@ -832,8 +853,9 @@ begin
0: begin 0: begin
Mode.Col := 80; Mode.Col := 80;
Mode.Row := 25; Mode.Row := 25;
Mode.Color := True; Mode.Color := False;
end; end;
{$if not defined(AMIGA_V1_2_ONLY)}
1: begin 1: begin
Screen := LockPubScreen('Workbench'); Screen := LockPubScreen('Workbench');
Mode.Col := Screen^.Width div 8; Mode.Col := Screen^.Width div 8;
@ -841,6 +863,7 @@ begin
UnlockPubScreen('Workbench', Screen); UnlockPubScreen('Workbench', Screen);
Mode.Color := False; Mode.Color := False;
end; end;
{$endif}
end; end;
SysGetVideoModeData := True; SysGetVideoModeData := True;
end; end;