* View by Paolo Russo - Amiga Magazine
VIEW       MOVE.L A0,A5
           MOVE.L 4,A6
           LEA LIBRARIES(PC),A2
           LEA EXEC(PC),A3
           MOVE.L A6,(A3)+
           MOVEQ #2,D2
L1         MOVEQ #0,D0
           MOVE.L A2,A1
           JSR -552(A6) ; D0=OpenLibrary(A1,D0)
           MOVE.L D0,(A3)+
L2         TST.B (A2)+
           BNE.S L2
           DBRA D2,L1
           MOVE.L #1024,D0
           MOVEQ #3,D1
           JSR -198(A6) ; D0=AllocMem(D0,D1)
           MOVE.L D0,(A3)+
           MOVE.L D0,A2
           MOVE.L D0,A1
           MOVE.B (A5)+,D0
L3         MOVE.B D0,(A1)+
           MOVE.B (A5)+,D0
           CMP.B #10,D0
           BNE.S L3
           CLR.B (A1)
           MOVE.L A2,D1
           MOVE.L DOS(PC),A6
           MOVE.L #1005,D2
           JSR -30(A6) ; D0=Open(D1,D2)
           MOVE.L D0,D7
           BEQ ERR1
           MOVEQ #12,D3
           BSR.S READ
           CMP.L #'FORM',(A1)+
           BNE ERR2
           CMP.L #'ILBM',4(A1)
           BNE ERR2
LOADLOOP   MOVEQ #8,D3
           BSR.S READ
           MOVE.L (A1)+,D0
           MOVE.L (A1)+,D3
           ADDQ.L #1,D3
           AND.B #$FE,D3
           LEA PROPS(PC),A0
           MOVEQ #2,D1
L4         MOVE.L (A0)+,A3
           CMP.L (A0)+,D0
           DBEQ D1,L4
           BNE.S L6
           BSR.S READ
           MOVE.L D3,(A3)+
L5         MOVE.B (A1)+,(A3)+
           SUBQ.W #1,D3
           BNE.S L5
           BRA.S LOADLOOP
L6         CMP.L #'BODY',D0
           BEQ.S LOADSCREEN
           MOVE.L D7,D1
           MOVE.L D3,D2
           MOVEQ #0,D3
           JSR -66(A6) ; D0=Seek(D1,D2,D3)
           TST.L D0
           BMI ERR2
           BRA.S LOADLOOP
READ       MOVE.L D7,D1
           MOVE.L A2,D2
           JSR -42(A6) ; D0=Read(D1,D2,D3)
           MOVE.L (A7)+,A0
           CMP.L D0,D3
           BNE ERR2
           MOVE.L A2,A1
           JMP (A0)
LOADSCREEN MOVEM.W LX(PC),D1-D5
           LSR.W #8,D5
           LEA NEWSCREEN(PC),A0
           LEA NEWWINDOW(PC),A2
           MOVEM.W D1-D2/D5,4(A0)
           MOVEQ #0,D3
           CMP.W #500,D1
           BCS.S LORES
HIRES      OR.W #$8000,D3
LORES      CMP.W #330,D2
           BCS.S NOLACE
LACE       OR.W #4,D3
NOLACE     MOVE.L CAMG(PC),D0
           BEQ.S NOCAMG
           MOVE.L VIEWMODE(PC),D3
NOCAMG     MOVE.W D3,12(A0)
           MOVE.L INTUITION(PC),A6
           JSR -198(A6) ; D0=OpenScreen(A0)
           MOVE.L D0,30(A2)
           MOVE.L D0,A3
           BEQ ERR2
           MOVE.L A2,A0
           JSR -204(A6) ; D0=OpenWindow(A0)
           MOVE.L D0,A2
           LEA CMAP(PC),A4
           MOVE.L (A4)+,D4
           BEQ.S NOCMAP
           MOVE.L GRAPHICS(PC),A6
           DIVU #3,D4
           CMP.W #32,D4
           BLS.S L8
           MOVEQ #32,D4
L8         MOVEQ #0,D6
           BRA.S L7
SETCOLOR   LEA 44(A3),A0
           MOVE.W D6,D0
           MOVEQ #0,D1
           MOVE.B (A4)+,D1
           LSR.B #4,D1
           MOVEQ #0,D2
           MOVE.B (A4)+,D2
           LSR.B #4,D2
           MOVEQ #0,D3
           MOVE.B (A4)+,D3
           LSR.B #4,D3
           JSR -288(A6) ; SetRGB4(A0,D0,D1,D2,D3)
           ADDQ.W #1,D6
L7         DBRA D4,SETCOLOR
NOCMAP     MOVE.L DOS(PC),A6
           MOVEM.L 192(A3),D0-D4/A0
           MOVEM.L D0-D4/A0,BITPLANES
           MOVE.B COMPRESS(PC),D0
           BNE.S COMP1
COMP0      MOVE.W 186(A3),D6
C1         LEA BITPLANES(PC),A4
           MOVE.W D5,D4
C2         MOVE.L D7,D1
           MOVE.L (A4),D2
           MOVEQ #0,D3
           MOVE.W 184(A3),D3
           JSR -42(A6) ; D0=Read(D1,D2,D3)
           ADD.L D3,(A4)+
           SUBQ.W #1,D4
           BNE.S C2
           SUBQ.W #1,D6
           BNE.S C1
           BRA.S LOADED
COMP1      MOVEQ #0,D3
           MOVE.W 186(A3),D6
C3         LEA BITPLANES(PC),A4
           MOVE.W D5,D4
C4         MOVE.L (A4),A0
           MOVE.W 184(A3),D2
C5         BSR.S GETBYTE
           EXT.W D0
           BMI.S REPLICATE
LITERAL    SUB.W D0,D2
           BSR.S GETMANY
           BRA.S NEXT
REPLICATE  NEG.W D0
           MOVE.W D0,D1
           BSR.S GETBYTE
           SUB.W D1,D2
C7         MOVE.B D0,(A0)+
           DBRA D1,C7
NEXT       SUBQ.W #1,D2
           BHI.S C5
           MOVE.L A0,(A4)+
           SUBQ.W #1,D4
           BNE.S C4
           SUBQ.W #1,D6
           BNE.S C3
           BRA.S LOADED
GETBYTE    MOVE.B (A1)+,D0
           DBRA D3,RET
           BSR.S FILLBUFFER
           BRA.S GETBYTE
GETMANY    MOVE.B (A1)+,(A0)+
           DBRA D3,OK
           SUBQ.L #1,A0
           BSR.S FILLBUFFER
           BRA.S GETMANY
OK         DBRA D0,GETMANY
RET        RTS
FILLBUFFER MOVE.L #1024,D3
           MOVEM.L D0-D2/A0,-(A7)
           MOVE.L D7,D1
           MOVE.L BUFFER(PC),D2
           JSR -42(A6) ; D0=Read(D1,D2,D3)
           MOVE.L D2,A1
           MOVEM.L (A7)+,D0-D2/A0
           RTS
LOADED     MOVE.L EXEC(PC),A6
           MOVE.L 86(A2),A0
           MOVE.B 15(A0),D1
           MOVEQ #0,D0
           BSET D1,D0
           JSR -318(A6) ; D0=Wait(D0)
           MOVE.L INTUITION(PC),A6
           MOVE.L A2,A0
           JSR -72(A6) ; CloseWindow(A0)
           MOVE.L A3,A0
           move.w #0,0
           JSR -66(A6) ; CloseScreen(A0)
ERR2       MOVE.L DOS(PC),A6
           MOVE.L D7,D1
           JSR -36(A6) ; Close(D1)
ERR1       MOVE.L EXEC(PC),A6
           MOVE.L BUFFER(PC),A1
           MOVE.L #1024,D0
           JSR -210(A6) ; FreeMem(A1,D0)
           LEA DOS(PC),A2
           MOVEQ #2,D2
C8         MOVE.L (A2)+,A1
           JSR -414(A6) ; CloseLibrary(A1)
           DBRA D2,C8
           MOVEQ #0,D0
           RTS
EXEC       DC.L 0
DOS        DC.L 0
INTUITION  DC.L 0
GRAPHICS   DC.L 0
BUFFER     DC.L 0
BITPLANES  DC.L 0,0,0,0,0,0
NEWSCREEN  DC.W 0,0,0,0,0,0
           DC.W 0,15
           DC.L 0,0,0,0
NEWWINDOW  DC.W 0,0,50,50,0
           DC.L $200,$20848
           DC.L 0,0,0,0,0
           DC.W 0,0,0,0,15
PROPS      DC.L CAMG,'CAMG'
           DC.L BMHD,'BMHD'
           DC.L CMAP,'CMAP'
CAMG       DC.L 0
VIEWMODE   DC.L 0
BMHD       DC.L 0
LX         DC.W 0
LY         DC.W 0
X          DC.W 0
Y          DC.W 0
NPLANES    DC.B 0
MASKING    DC.B 0
COMPRESS   DC.B 0
PAD1       DC.B 0
TRANSPCOL  DC.W 0
XASPECT    DC.B 0
YASPECT    DC.B 0
PAGEWIDTH  DC.W 0
PAHEHEIGHT DC.W 0
CMAP       DC.L 0
           DC.L 0,0,0,0,0,0,0,0
           DC.L 0,0,0,0,0,0,0,0
           DC.L 0,0,0,0,0,0,0,0
           DC.L 0,0,0,0,0,0,0,0
           DC.L 0,0,0,0,0,0,0,0
           DC.L 0,0,0,0,0,0,0,0
LIBRARIES  DC.B 'dos.library',0
           DC.B 'intuition.library',0
           DC.B 'graphics.library',0
           END

