INCLUDE "include:exec/types.i" INCLUDE "Stereo.i" XREF _AbsExecBase XREF _LVOOpenWindow XREF _LVOCloseWindow XREF _LVOOpenLibrary XREF _LVOCloseLibrary XREF _LVOAllocMem XREF _LVOFreeMem XREF _LVODelay XREF _LVOMove XREF _LVODraw XREF _LVOSetAPen XREF _LVOWritePixel XREF _LVOGetPrefs XREF _LVOWindowToBack XREF _LVOText XREF _LVOSetDrMd CLEAR_PUBLIC EQU MEMF_CHIP!MEMF_CLEAR MyFlag EQU SMART_REFRESH!WINDOWDEPTH!WINDOWDRAG MLP1 EQU 33 SWidth EQU 340 FullH EQU 100 Begin: move.l a6,-(a7) move.l a7,InitSP bsr LibsOpen bsr Prefs bsr OpenNew bsr DoGraphs bsr CloseNew bsr CloseLibs move.l InitSP,a7 move.l (a7)+,a6 rts Prefs: move.l a6,-(a7) move.l #pf_SIZEOF,d0 bsr StructureAlloc ;Make space for preferences move.l IntuitionLibrary,a6 move.l d0,a0 ;Point to space move.l a0,-(a7) move.l #pf_SIZEOF,d0 ;Get all of them jsr _LVOGetPrefs(a6) move.l (a7)+,a1 move.b pf_LaceWB(a1),d0 ;Get lace status cmp.b #1,d0 ;See if interlace set bne.s NoInter move.w #FullH,d0 asl.w #1,d0 ;Double for interlace move.w d0,SHeight NoInter: move.l #pf_SIZEOF,d0 bsr StructFree move.l (a7)+,a6 rts InitNewWindow: move.l MyNewWindow,a2 move.w #290,nw_LeftEdge(a2) move.w SHeight,d0 lsl.w #1,d0 sub.w #17,d0 move.l #MyFlag,nw_Flags(a2) move.w #16,nw_TopEdge(a2) move.w #SWidth,nw_Width(a2) move.w d0,nw_Height(a2) move.b #3,nw_DetailPen(a2) ;Green move.b #2,nw_BlockPen(a2) ;Black move.w #SWidth,nw_MinWidth(a2) move.w d0,nw_MinHeight(a2) move.w #SWidth,nw_MaxWidth(a2) move.w d0,nw_MaxHeight(a2) move.w #WBENCHSCREEN,nw_Type(a2) rts OpenNew: move.l #nw_SIZE,d0 bsr StructureAlloc move.l d0,a2 bne.s SucAll bra TotFail ;Can't display if not to this point. SucAll: move.l a2,MyNewWindow bsr.s InitNewWindow ;Initialize new window structure move.l MyNewWindow,a0 movea.l IntuitionLibrary,a6 ;a6 established by IntuOpen jsr _LVOOpenWindow(a6) ;Open the new window. move.l d0,MyWindow ;Pointer to window structure for new window TotFail: rts CloseNew: move.l a6,-(a7) movea.l MyWindow,a0 movea.l IntuitionLibrary,a6 jsr _LVOCloseWindow(a6) move.l _AbsExecBase,a6 move.l MyNewWindow,a1 move.l #nw_SIZE,d0 bsr StructFree move.l #0,MyNewWindow move.l (a7)+,a6 rts StructureAlloc: move.l a6,-(a7) ;Save a6 (intution library base) move.l _AbsExecBase,a6 ;Exec functions coming up move.l #CLEAR_PUBLIC,d1 ;Public memory jsr _LVOAllocMem(a6) move.l (a7)+,a6 ;Recover a6 rts StructFree: move.l a6,-(a7) move.l _AbsExecBase,a6 move.l a1,d1 beq.s IsFree jsr _LVOFreeMem(a6) IsFree: move.l (a7)+,a6 rts *OpenLib opens the library whose name is pointed to by a1. The library *base address is returned in d0. a6 is destroyed. OpenLib: move.l #MLP1,d0 ;Version 33 or later movea.l _AbsExecBase,a6 jsr _LVOOpenLibrary(a6) ;Find Library base. rts ;Library base returned in d0 LibsOpen: *Now open intuition IntuOpen: move.l #IntuitionName,a1 ;Request intuition library. bsr.s OpenLib move.l d0,IntuitionLibrary beq TotFail GraphicsOpen: * Open the graphics library move.l #GraphicsName,a1 ;Request graphics library. bsr.s OpenLib move.l d0,GraphicsLibrary ;Save pointer beq TotFail GraphOpen: move.l #DosName,a1 bsr.s OpenLib move.l d0,DosLibrary beq TotFail rts CloseLibs: move.l _AbsExecBase,a6 ;Be certain we have exec library move.l DosLibrary,a1 bsr CloseLib move.l GraphicsLibrary,a1 bsr CloseLib ;Close graphics library move.l IntuitionLibrary,a1 bsr CloseLib ;Close intuition library rts CloseLib: move.l a1,d0 beq.s NotOpen jsr _LVOCloseLibrary(a6) NotOpen: rts DoGraphs: move.l a6,-(a7) move.l GraphicsLibrary,a6 move.l MyWindow,a1 move.l wd_RPort(a1),a1 ;Get rasterport move.l a1,MyRP move.l #2,d0 jsr _LVOSetAPen(a6) ;Set back to black move.l #0,d1 move.w SHeight,d3 subq.w #1,d3 ext.l d3 move.l #1,d4 bsr.s ClrLin move.l MyRP,a1 move.l #3,d0 jsr _LVOSetAPen(a6) move.l MyRP,a1 move.l #5,d0 move.l #16,d1 jsr _LVOMove(a6) move.l MyRP,a1 move.l #0,d0 ;Jam 1 jsr _LVOSetDrMd(a6) move.l MyRP,a1 lea String,a0 lea StrEnd,a2 sub.l a0,a2 move.l a2,d0 jsr _LVOText(a6) move.l MyRP,a1 move.l #1,d0 ;Jam 1 jsr _LVOSetDrMd(a6) move.l #50,d5 ;55 0.4 s delays bsr DoDelay move.l MyRP,a1 move.l #0,d2 move.w SHeight,d3 subq.w #4,d3 ext.l d3 DoLine: move.l #SWidth,d0 move.w SHeight,d1 ext.l d1 asr.l #1,d0 asr.l #2,d1 movem.l d0-d1/a1,-(a7) jsr _LVOMove(a6) movem.l (a7)+,d0-d1/a1 move.l d2,d0 move.l d3,d1 movem.l d0-d1/a1,-(a7) jsr _LVODraw(a6) moveq.l #1,d5 ;1 0.4 s delay between lines bsr DoDelay movem.l (a7)+,d0-d1/a1 addq.l #8,d2 cmp.l #SWidth-4,d2 blt.s DoLine move.l (a7)+,a6 move.l #265,d5 bsr.s DoDelay rts ClrLin: movem.l d1/a1,-(a7) move.l d4,d0 jsr _LVOMove(a6) movem.l (a7)+,d1/a1 movem.l d1/a1,-(a7) move.l #SWidth-1,d0 jsr _LVODraw(a6) movem.l (a7)+,d1/a1 addq.l #1,d1 subq.l #1,d3 bne.s ClrLin rts DoDelay: movem.l d1/a6,-(a7) SrtDel: move.l #20,d1 ;Allow 1/2 s per loop move.l DosLibrary,a6 jsr _LVODelay(a6) subq.l #1,d5 ;Count down outer loop bne.s SrtDel movem.l (a7)+,d1/a6 rts dseg InitSP: dc.l 0 MyRP: dc.l 0 MyNewWindow: dc.l 0 MyWindow: dc.l 0 IntuitionLibrary: dc.l 0 GraphicsLibrary: dc.l 0 DosLibrary: dc.l 0 SHeight: dc.w 100 IntuitionName: dc.b 'intuition.library',0 GraphicsName: dc.b 'graphics.library',0 DosName: dc.b 'dos.library',0 String: dc.b ' A> Spreadsheets R us.' StrEnd: dc.b 0 END