	  incdir   "includeiii:"
	  include  "exec/exec_lib.i"
	  include  "exec/memory.i"
	  include  "utility/tagitem.i"
	  include  "workbench/icon_lib.i"
	  include  "workbench/icon.i"
	  include  "mb2:libraries/newiconv4/include/libraries/newicon_lib.i"

AbsExecBase        = 4

CALL      macro
	  jsr      _LVO\1(a6)
	  endm

	  rsreset
NewDiskObject      rs.b      0
ndo_StdObject      rs.l      1
ndo_NormalImage    rs.l      1
ndo_SelectedImage  rs.l      1
ndo_Sizeof         rs.b      0

	  rsreset
ChunkyImage        rs.b      0
ci_Width           rs.w      1
ci_Height          rs.w      1
ci_NumColors       rs.w      1
ci_Flags           rs.w      1
ci_Palette         rs.l      1
ci_ChunkyData      rs.l      1
ci_Sizeof          rs.b      0

;fs "Main routine"
start:
	  bra.s    .begin
	  dc.b     0,"$VER: NI35Patch 1.0 (31.10.99) ©1999, CdBS Software (MORB)",0
	  even

.begin:
	  move.l   (AbsExecBase).w,a6
	  lea      icon_name(pc),a1
	  moveq    #44,d0
	  CALL     OpenLibrary
	  move.l   d0,IconBase
	  beq.s    .Fail

	  lea      newicon_name(pc),a1
	  moveq    #40,d0
	  CALL     OpenLibrary
	  move.l   d0,NewIconBase
	  beq.s    .Fail

	  move.l   d0,a5

	  move.l   a5,a1
	  lea      _LVOFreeNewDiskObject,a0
	  move.l   #_FreeNewDiskObject,d0
	  CALL     SetFunction

	  move.l   a5,a1
	  lea      _LVOGetDefNewDiskObject,a0
	  move.l   #_GetDefNewDiskObject,d0
	  CALL     SetFunction

	  move.l   a5,a1
	  lea      _LVOGetNewDiskObject,a0
	  move.l   #_GetNewDiskObject,d0
	  CALL     SetFunction

	  move.l   a5,a1
	  lea      _LVOPutNewDiskObject,a0
	  move.l   #_PutNewDiskObject,d0
	  CALL     SetFunction

	  clr.l    start-4
	  moveq    #0,d0
	  rts

.Fail:
	  move.l   NewIconBase,a1
	  CALL     CloseLibrary
	  move.l   IconBase,a1
	  CALL     CloseLibrary

	  moveq    #20,d0
	  rts
;fe
;fs "Data"
icon_name:
	  dc.b     "icon.library",0
newicon_name:
	  dc.b     "newicon.library",0
	  even
;fe
	  section  grunt,code
IconBase:
	  ds.l     1
NewIconBase:
	  ds.l     1

;fs "GetNewDiskObject()"
_GetNewDiskObject:
	  movem.l  d2/a2-6,-(a7)
	  move.l   a0,d2

	  move.l   (AbsExecBase).w,a6
	  move.l   #ndo_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  tst.l    d0
	  beq.s    .FailAlloc
	  move.l   d0,a2

	  pea      0.w
	  pea      0.w
	  pea      ICONGETA_RemapIcon
	  pea      0.w
	  pea      ICONGETA_Screen

	  move.l   a7,a1
	  move.l   d2,a0
	  move.l   IconBase(pc),a6
	  CALL     GetIconTagList
	  lea      5*4(a7),a7
	  move.l   d0,ndo_StdObject(a2)
	  beq.s    .FailGetIcon
	  move.l   d0,d2

	  pea      0.w
	  move.l   a7,a3

	  pea      0.w
	  move.l   a3,-(a7)
	  pea      ICONCTRLA_IsPaletteMapped
	  move.l   a7,a1
	  move.l   d2,a0
	  CALL     IconControlA
	  lea      4*4(a7),a7
	  tst.l    (a3)
	  beq.s    .Done

	  move.l   (AbsExecBase).w,a6
	  move.l   #ci_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  move.l   d0,ndo_NormalImage(a2)
	  beq.s    .Fail

	  move.l   #ci_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  move.l   d0,ndo_SelectedImage(a2)
	  beq.s    .Fail

	  lea      -4*4(a7),a7
	  move.l   a7,a5

	  move.l   ndo_NormalImage(a2),a3
	  move.l   ndo_SelectedImage(a2),a4
	  moveq    #1,d0
	  move.w   d0,ci_Flags(a3)
	  move.w   d0,ci_Flags(a4)
	  pea      0.w
	  pea      ci_Palette(a3)
	  pea      ICONCTRLA_GetPalette1
	  pea      ci_Palette(a4)
	  pea      ICONCTRLA_GetPalette2
	  pea      (a5)
	  pea      ICONCTRLA_GetPaletteSize1
	  pea      4(a5)
	  pea      ICONCTRLA_GetPaletteSize2
	  pea      ci_ChunkyData(a3)
	  pea      ICONCTRLA_GetImageData1
	  pea      ci_ChunkyData(a4)
	  pea      ICONCTRLA_GetImageData2
	  pea      8(a5)
	  pea      ICONCTRLA_GetWidth
	  pea      12(a5)
	  pea      ICONCTRLA_GetHeight
	  move.l   a7,a1
	  move.l   d2,a0
	  move.l   IconBase(pc),a6
	  CALL     IconControlA
	  lea      (4+17)*4(a7),a7

	  move.l   (a5)+,d0
	  move.w   d0,ci_NumColors(a3)
	  move.l   (a5)+,d0
	  move.w   d0,ci_NumColors(a4)
	  move.l   (a5)+,d0
	  move.w   d0,ci_Width(a3)
	  move.w   d0,ci_Width(a4)
	  move.l   (a5)+,d0
	  move.w   d0,ci_Height(a3)
	  move.w   d0,ci_Height(a4)

.Done:
	  move.l   a2,d0

	  movem.l  (a7)+,d2/a2-6
	  rts

.Fail:
	  move.l   IconBase(pc),a6
	  move.l   a2,a0
	  CALL     FreeDiskObject

	  move.l   (AbsExecBase).w,a6
	  move.l   ndo_NormalImage(a2),a1
	  CALL     FreeVec
	  move.l   ndo_SelectedImage(a2),a1
	  CALL     FreeVec

.FailGetIcon:
	  move.l   (AbsExecBase).w,a6
	  move.l   a2,a1
	  CALL     FreeVec

	  moveq    #0,d0
	  movem.l  (a7)+,d2/a2-6
	  rts

.FailAlloc:
	  moveq    #0,d0
	  movem.l  (a7)+,d2/a2-6
	  rts

;fe
;fs "GetDefNewDiskObject()"
_GetDefNewDiskObject:
	  movem.l  d2/a2-6,-(a7)
	  move.l   d0,d2

	  move.l   (AbsExecBase).w,a6
	  move.l   #ndo_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  tst.l    d0
	  beq.s    .FailAlloc
	  move.l   d0,a2

	  pea      0.w
	  move.l   d2,-(a7)
	  pea      ICONGETA_GetDefaultType
	  pea      0.w
	  pea      ICONGETA_RemapIcon
	  pea      0.w
	  pea      ICONGETA_Screen

	  move.l   a7,a1
	  sub.l    a0,a0
	  move.l   IconBase(pc),a6
	  CALL     GetIconTagList
	  lea      7*4(a7),a7
	  move.l   d0,ndo_StdObject(a2)
	  beq.s    .FailGetIcon
	  move.l   d0,d2

	  pea      0.w
	  move.l   a7,a3

	  pea      0.w
	  move.l   a3,-(a7)
	  pea      ICONCTRLA_IsPaletteMapped
	  move.l   a7,a1
	  move.l   d2,a0
	  CALL     IconControlA
	  lea      4*4(a7),a7
	  tst.l    (a3)
	  beq.s    .Done

	  move.l   (AbsExecBase).w,a6
	  move.l   #ci_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  move.l   d0,ndo_NormalImage(a2)
	  beq.s    .Fail

	  move.l   #ci_Sizeof,d0
	  move.l   #MEMF_CLEAR,d1
	  CALL     AllocVec
	  move.l   d0,ndo_SelectedImage(a2)
	  beq.s    .Fail

	  lea      -4*4(a7),a7
	  move.l   a7,a5

	  move.l   ndo_NormalImage(a2),a3
	  move.l   ndo_SelectedImage(a2),a4
	  moveq    #1,d0
	  move.w   d0,ci_Flags(a3)
	  move.w   d0,ci_Flags(a4)
	  pea      0.w
	  pea      ci_Palette(a3)
	  pea      ICONCTRLA_GetPalette1
	  pea      ci_Palette(a4)
	  pea      ICONCTRLA_GetPalette2
	  pea      (a5)
	  pea      ICONCTRLA_GetPaletteSize1
	  pea      4(a5)
	  pea      ICONCTRLA_GetPaletteSize2
	  pea      ci_ChunkyData(a3)
	  pea      ICONCTRLA_GetImageData1
	  pea      ci_ChunkyData(a4)
	  pea      ICONCTRLA_GetImageData2
	  pea      8(a5)
	  pea      ICONCTRLA_GetWidth
	  pea      12(a5)
	  pea      ICONCTRLA_GetHeight
	  move.l   a7,a1
	  move.l   d2,a0
	  move.l   IconBase(pc),a6
	  CALL     IconControlA
	  lea      (4+17)*4(a7),a7

	  move.l   (a5)+,d0
	  move.w   d0,ci_NumColors(a3)
	  move.l   (a5)+,d0
	  move.w   d0,ci_NumColors(a4)
	  move.l   (a5)+,d0
	  move.w   d0,ci_Width(a3)
	  move.w   d0,ci_Width(a4)
	  move.l   (a5)+,d0
	  move.w   d0,ci_Height(a3)
	  move.w   d0,ci_Height(a4)

.Done:
	  move.l   a2,d0

	  movem.l  (a7)+,d2/a2-6
	  rts

.Fail:
	  move.l   IconBase(pc),a6
	  move.l   a2,a0
	  CALL     FreeDiskObject

	  move.l   (AbsExecBase).w,a6
	  move.l   ndo_NormalImage(a2),a1
	  CALL     FreeVec
	  move.l   ndo_SelectedImage(a2),a1
	  CALL     FreeVec

.FailGetIcon:
	  move.l   (AbsExecBase).w,a6
	  move.l   a2,a1
	  CALL     FreeVec

	  moveq    #0,d0
	  movem.l  (a7)+,d2/a2-6
	  rts

.FailAlloc:
	  moveq    #0,d0
	  movem.l  (a7)+,d2/a2-6
	  rts

;fe
;fs "FreeNewDiskObject()"
_FreeNewDiskObject:
	  movem.l  a2/a6,-(a7)
	  move.l   IconBase(pc),a6
	  move.l   a0,a2
	  move.l   ndo_StdObject(a2),a0
	  CALL     FreeDiskObject

	  move.l   (AbsExecBase).w,a6
	  move.l   ndo_NormalImage(a2),a1
	  CALL     FreeVec
	  move.l   ndo_SelectedImage(a2),a1
	  CALL     FreeVec

	  movem.l  (a7)+,a2/a6
	  rts
;fe
;fs "PutNewDiskObject()"
_PutNewDiskObject:
	  movem.l  a2-4/a6,-(a7)
	  move.l   IconBase(pc),a6

	  move.l   a0,a3
	  move.l   a1,a4

	  move.l   ndo_NormalImage(a4),d0
	  beq.s    .NoPalImg

	  move.l   d0,a2
	  pea      0.w
	  move.l   ci_Palette(a2),-(a7)
	  pea      ICONCTRLA_SetPalette1
	  moveq    #0,d0
	  move.w   ci_NumColors(a2),d0
	  move.l   d0,-(a7)
	  pea      ICONCTRLA_SetPaletteSize1
	  move.l   ci_ChunkyData(a2),-(a7)
	  pea      ICONCTRLA_SetImageData1
	  move.w   ci_Width(a2),d0
	  move.l   d0,-(a7)
	  pea      ICONCTRLA_SetWidth
	  move.w   ci_Height(a2),d0
	  move.l   d0,-(a7)
	  pea      ICONCTRLA_SetHeight

	  move.l   a7,a1
	  move.l   ndo_StdObject(a4),a0
	  CALL     IconControlA
	  lea      11*4(a7),a7

	  move.l   ndo_SelectedImage(a4),d0
	  beq.s    .NoPalImg

	  move.l   d0,a2
	  pea      0.w
	  move.l   ci_Palette(a2),-(a7)
	  pea      ICONCTRLA_SetPalette2
	  moveq    #0,d0
	  move.w   ci_NumColors(a2),d0
	  move.l   d0,-(a7)
	  pea      ICONCTRLA_SetPaletteSize2
	  move.l   ci_ChunkyData(a2),-(a7)
	  pea      ICONCTRLA_SetImageData2

	  move.l   a7,a1
	  move.l   ndo_StdObject(a4),a0
	  CALL     IconControlA
	  lea      7*4(a7),a7

.NoPalImg:
	  move.l   a3,a0
	  move.l   a4,a1

	  move.l   ndo_StdObject(a4),a1
	  pea      0.w
	  pea      1.w
	  pea      ICONPUTA_NotifyWorkbench
	  pea      1.w
	  pea      ICONPUTA_DropPlanarIconImage

	  move.l   a7,a2
	  CALL     PutIconTagList
	  lea      5*4(a7),a7

	  movem.l  (a7)+,a2-4/a6
	  rts
;fe
