;PROJECT: SONIX MUSIC SYSTEM
;FILE: LS.ASM

;COPYRIGHT 1986 BY MARK RILEY

;11/18/86: CREATED!

 INCLUDE "I:MACROS.ASM"
 DEFINE MEMORY
 INCLUDE "I:DOS.ASM"
 INCLUDE "I:DEVICES.ASM"
 INCLUDE "I:COMMAND.ASM"
 INCLUDE "I:GRAPHICS.ASM"
 INCLUDE "I:INTUITION.ASM"
 INCLUDE "I:ILBM.ASM"
 INCLUDE "I:SYSTEM.ASM"

;*** LOAD SCREEN COMMAND ***

MAIN
 CLRA A6
 CLRA A5

 BSR GETOPTION
 MOVE.L A0,FILENAME
 BEQ USAGE

 CMP.B #'?',(A0)
 BNE.S 1$
 TST.B 1(A0)
 BEQ USAGE

1$
 MOVE.L #MEMF_PUBLIC,D0
 BSR LOADCODE
 MOVA A0,A6
 BEQ ERROR

 MOVE.L A6,A2
 ADD.L #12,A2

2$
 ADDQ.L #8,A2
 CMP.L #'BMHD',-8(A2)
 BEQ.S 3$
 ADD.L -4(A2),A2
 BRA.S 2$

3$
 MOVE.L #NEWSCREEN,A0
 MOVE.W BMHD.WIDTH(A2),NS.WIDTH(A0)
 MOVE.W BMHD.HEIGHT(A2),NS.HEIGHT(A0)
 MOVE.B BMHD.NPLANES(A2),NS.DEPTH+1(A0)
 MOVE.W #CUSTOMSCREEN,NS.TYPE(A0)
 INTLIB OPENSCREEN
 MOVE.L D0,A5
 BEQ ERROR

 MOVE.L A2,A3
4$
 ADD.L -4(A3),A3
 ADDQ.L #8,A3
 CMP.L #'CMAP',-8(A3)
 BNE.S 4$

 MOVE.B BMHD.NPLANES(A2),D6
 CLR.W D7
 BSET D6,D7

 LEA SCRN.VIEWPORT(A5),A0
 CLR.W D0
7$
 MOVE.B (A3)+,D1
 LSR.B #4,D1
 MOVE.B (A3)+,D2
 LSR.B #4,D2
 MOVE.B (A3)+,D3
 LSR.B #4,D3
 SAVE D0/A0
 GFXLIB SETRGB4
 RESTORE D0/A0
 ADDQ.W #1,D0
 CMP.W D0,D7
 BNE.S 7$

 MOVE.L A2,A3
5$
 ADD.L -4(A3),A3
 ADDQ.L #8,A3
 CMP.L #'BODY',-8(A3)
 BNE.S 5$

 LEA SCRN.BITMAP(A5),A4
 CLR.W D6
11$
 CLR.W D7
10$
 MOVE.W D7,D0
 ASL.W #2,D0
 MOVE.L BM.PLANES(A4,D0.W),A0
 MOVE.W D6,D0
 MULU BM.BYTESPERROW(A4),D0
 ADD.L D0,A0

 MOVE.L A0,A1
 ADD.W BM.BYTESPERROW(A4),A1
12$
 CMP.L A0,A1
 BEQ.S 13$
 MOVE.B (A3)+,D0
 BMI.S 14$
15$
 MOVE.B (A3)+,(A0)+
 SUBQ.B #1,D0
 BPL.S 15$
 BRA.S 12$
14$
 MOVE.B (A3)+,D1
 SUBQ.B #1,D0
 BPL.S 12$
16$
 MOVE.B D1,(A0)+
 ADDQ.B #1,D0
 BNE.S 16$
 BRA.S 12$
13$

 ADDQ.B #1,D7
 CMP.B BMHD.NPLANES(A2),D7
 BNE.S 10$
 ADDQ.W #1,D6
 CMP.W BMHD.HEIGHT(A2),D6
 BNE.S 11$

 MOVE.L FILENAME,A0
 BSR DOTEXTCOUNT
 MOVE.L A0,A1
 ADD.L D0,A0
20$
 CMP.L A0,A1
 BEQ.S 21$
 CMP.B #'/',-1(A0)
 BEQ.S 21$
 CMP.B #':',-1(A0)
 BEQ.S 21$
 SUBQ.L #1,A0
 BRA.S 20$

21$
 MOVE.L A0,A1
 BSR DOTEXTCOUNT
 ADD.L #SIZE.MP+SIZE.PTR+1,D0
 MOVE.L #MEMF_PUBLIC!MEMF_CLEAR,D1
 BSR ALLOCATE
 TSTA A0
 BEQ ERROR2

 INITPORT A0

 LEA SIZE.MP(A0),A2
 MOVE.L A5,(A2)+

 MOVE.L A2,MP.NODE+NODE.NAME(A0)
22$
 MOVE.B (A1)+,D0
 CMP.B #'a',D0
 BLT.S 23$
 CMP.B #'z',D0
 BGT.S 23$
 AND.B #$DF,D0
23$
 MOVE.B D0,(A2)+
 BNE.S 22$

 MOVE.L A0,A1
 SYSLIB ADDPORT

 CLR.L D0

QUIT
 PUSH D0

 MOVE.L A6,A0
 BSR RELEASE

 PULL D0
 RTS

ERROR2
 MOVE.L A5,A0
 INTLIB CLOSESCREEN

ERROR
 WRITETEXT STDERR,#ERRORTEXT
 MOVEQ #21,D0
 BRA.S QUIT

USAGE
 WRITETEXT STDERR,#USAGETEXT
 CLR.L D0
 BRA.S QUIT

;*** DATA AREA ***

FILENAME DC.L 0
NEWSCREEN DCB.B SIZE.NS,0
USAGETEXT DC.B 'Usage: LOADSCREEN file',10,0
ERRORTEXT DC.B 'Insufficient available memory!',10,0
 FIXPC

 THEEND

