2
0
Эх сурвалжийг харах

Amiga: Workbench 1.x compatibilty via the AMIGA_V1_2_ONLY define

Marcus Sackrow 4 жил өмнө
parent
commit
c1f6a7afdd

+ 12 - 0
packages/ami-extra/src/muihelper.pas

@@ -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

+ 215 - 19
packages/amunits/src/coreunits/agraphics.pas

@@ -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 SafeSetOutlinePen(w : pRastPort; c : byte);
-PROCEDURE SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
+procedure RemBob(Bob: PBob); inline;
 
 
 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

+ 42 - 2
packages/amunits/src/coreunits/amigados.pas

@@ -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 *)
 
 

+ 6 - 1
packages/amunits/src/coreunits/amigalib.pas

@@ -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);

+ 139 - 0
packages/amunits/src/coreunits/exec.pas

@@ -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;

+ 368 - 8
packages/amunits/src/coreunits/intuition.pas

@@ -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;
 
 
-function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT;
+procedure SetWindowPointer(win : pWindow; tags: array of DWord);
 begin
 begin
-  EasyRequest := EasyRequestArgs(window, easystruct, idcmpptr, @args);
+  SetWindowPointerA(win, @tags);
 end;
 end;
+{$endif}
 
 
-procedure SetWindowPointer(win : pWindow; tags: array of DWord);
+function EasyRequest(window : pWindow;const easyStruct : pEasyStruct; idcmpPtr : pULONG; args : array of DWord) : LONGINT;
 begin
 begin
-  SetWindowPointerA(win, @tags);
+  EasyRequest := EasyRequestArgs(window, easystruct, idcmpptr, @args);
 end;
 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);

+ 48 - 0
packages/amunits/src/coreunits/keymap.pas

@@ -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 *)
 
 
 
 

+ 41 - 0
packages/amunits/src/coreunits/utility.pas

@@ -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

+ 4 - 1
packages/amunits/src/utilunits/hisoft.pas

@@ -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;

+ 4 - 1
packages/amunits/src/utilunits/wbargs.pas

@@ -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;

+ 5 - 1
packages/fcl-process/src/amicommon/pipes.inc

@@ -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;

+ 10 - 0
packages/rtl-console/src/amicommon/crt.pp

@@ -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)

+ 124 - 7
packages/rtl-console/src/amicommon/keyboard.pp

@@ -22,7 +22,7 @@ interface
   message port of the window. This is mainly used in Free Vision to
   message port of the window. This is mainly used in Free Vision to
   give up the Task''s timeslice instead of dos.library/Delay() which
   give up the Task''s timeslice instead of dos.library/Delay() which
   blocks the event handling and ruins proper window refreshing among
   blocks the event handling and ruins proper window refreshing among
-  others 
+  others
   input: specify a timeout to wait for an event to arrive. this is the
   input: specify a timeout to wait for an event to arrive. this is the
          maximum timeout. the function might return earlier or even
          maximum timeout. the function might return earlier or even
          immediately if there's an event. it's specified in milliseconds
          immediately if there's an event. it's specified in milliseconds
@@ -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
@@ -69,7 +73,7 @@ end;
 var
 var
   KeyQueue: TKeyEvent;
   KeyQueue: TKeyEvent;
 
 
-type 
+type
   RawCodeEntry = record
   RawCodeEntry = record
     rc,n,s,c,a : Word; { raw code, normal, shift, ctrl, alt }
     rc,n,s,c,a : Word; { raw code, normal, shift, ctrl, alt }
   end;
   end;
@@ -90,7 +94,7 @@ const
      (rc: 77; n: $5000; s: $5000; c: $9100; a: $A000; ), // DOWN   // shift?
      (rc: 77; n: $5000; s: $5000; c: $9100; a: $A000; ), // DOWN   // shift?
      (rc: 78; n: $4D00; s: $4D00; c: $7400; a: $9D00; ), // RIGHT  // shift?
      (rc: 78; n: $4D00; s: $4D00; c: $7400; a: $9D00; ), // RIGHT  // shift?
      (rc: 79; n: $4B00; s: $4B00; c: $7300; a: $9B00; ), // LEFT   // shift?
      (rc: 79; n: $4B00; s: $4B00; c: $7300; a: $9B00; ), // LEFT   // shift?
- 
+
      (rc: 80; n: $3B00; s: $5400; c: $5E00; a: $6800; ), // F1
      (rc: 80; n: $3B00; s: $5400; c: $5E00; a: $6800; ), // F1
      (rc: 81; n: $3C00; s: $5500; c: $5F00; a: $6900; ), // F2
      (rc: 81; n: $3C00; s: $5500; c: $5F00; a: $6900; ), // F2
      (rc: 82; n: $3D00; s: $5600; c: $6000; a: $6A00; ), // F3
      (rc: 82; n: $3D00; s: $5600; c: $6000; a: $6A00; ), // F3
@@ -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; // a°
+    #$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; // a°
+    #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
@@ -233,7 +349,7 @@ begin
             GotActiveWindow;
             GotActiveWindow;
           end;
           end;
         IDCMP_INACTIVEWINDOW: begin
         IDCMP_INACTIVEWINDOW: begin
-            // force cursor off. we stop getting IntuiTicks when 
+            // force cursor off. we stop getting IntuiTicks when
             // the window is inactive, so the blinking stops.
             // the window is inactive, so the blinking stops.
             ToggleCursor(true);
             ToggleCursor(true);
             GotInactiveWindow;
             GotInactiveWindow;
@@ -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
@@ -492,7 +609,7 @@ begin
       Res := SysPollKeyEvent;
       Res := SysPollKeyEvent;
       // remove event from KeyQueue, because we return it here,
       // remove event from KeyQueue, because we return it here,
       // else we get double keys if GetKeyevent is called without a PollKeyEvent called first
       // else we get double keys if GetKeyevent is called without a PollKeyEvent called first
-      KeyQueue := 0; 
+      KeyQueue := 0;
     until Res <> 0;
     until Res <> 0;
   end else
   end else
   begin
   begin
@@ -562,7 +679,7 @@ begin
   if (recvbits and windowbit) > 0 then
   if (recvbits and windowbit) > 0 then
     WaitForSystemEvent:=true;
     WaitForSystemEvent:=true;
 
 
-  if waitTimerFired then 
+  if waitTimerFired then
   begin
   begin
     AbortIO(PIORequest(waitTimer));
     AbortIO(PIORequest(waitTimer));
     WaitIO(PIORequest(waitTimer));
     WaitIO(PIORequest(waitTimer));
@@ -575,7 +692,7 @@ procedure DoneSystemEventWait;
 begin
 begin
   if assigned(waitTimer) then
   if assigned(waitTimer) then
   begin
   begin
-    if waitTimerFired then 
+    if waitTimerFired then
     begin
     begin
       AbortIO(PIORequest(waitTimer));
       AbortIO(PIORequest(waitTimer));
       WaitIO(PIORequest(waitTimer));
       WaitIO(PIORequest(waitTimer));

+ 28 - 5
packages/rtl-console/src/amicommon/video.pp

@@ -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;