home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / code / asm_show.sit / ShowInit.asm
Assembly Source File  |  1988-08-30  |  6KB  |  203 lines

  1. ; File: ShowINIT.a
  2. ; Last Modified: Wednesday, July 29, 1987 1:11:16 PM
  3. ;------------------------------------------------------------------------------------------------
  4. ;
  5. ;    Simple INIT notification routine
  6. ;     by Paul Mercer (Applied Logic Systems),
  7. ;        Darin Adler, and Paul Snively (ICOM Simulations)
  8. ;     from an idea by Steve Capps
  9. ;
  10. ;    Created:  6/7/87  PM    - first version
  11. ;    Modified: 6/15/87 PM    - changed to standard (Pascal) calling conventions
  12. ;          6/20/87 PM    - fixed color & Finder bug on Mac II
  13. ;          6/22/87 DBA    - improved handling of QuickDraw
  14. ;          6/29/87 DBA    - used scratch8 to avoid conflict with REasy AccessS
  15. ;          6/30/87 DBA    - changed to a 4-byte scheme with RchecksumS
  16. ;          6/30/87 PFS    - separated into ShowINIT and InnerShowINIT
  17. ;          7/1/87  DBA    - fixed stack bug and switched to CurApName+
  18. ;          7/2/87  PM    - added check for old signature in ApplScratch for
  19. ;                   backword compatibility (TMON Startup)
  20. ;          7/3/87  PM    - removed _SysBeep in ErrorExit since it causes a crash
  21. ;                   also changed ICN# plotter to srcOr mode for Blinker
  22. ;          7/13/87 PM    - fixed a3 trashing bug in InnerShowINIT - exit code left
  23. ;                  word on stack (reported by D. Dunham) 
  24. ;          7/21/87 PM    - due to popular demand, InitGraf is no longer being called
  25. ;                   this avoids the problem with Startupscreens getting
  26. ;                   Rwashed outS by ShowINIT though someone else is still
  27. ;                   bound to call InitGraf sooner or later (i.e. InitWindows)
  28. ;          7/29/87 PM    - Put InitGraf back in; this is required (reported by C. Derossi
  29. ;                   at Apple Tech Support).  Took out GetPort/SetPort.
  30. ;
  31. ;------------------------------------------------------------------------------------------------
  32.  
  33.         INCLUDE    'Traps.a'
  34.         INCLUDE    'QuickEqu.a'
  35.         INCLUDE    'SysEqu.a'
  36.         INCLUDE    'ToolEqu.a'
  37.  
  38. myH        equ    CurApName+32-4    ; a GREAT place to store 4 bytes
  39. myCheck        equ    myH+2
  40. oldSig        equ    ApplScratch    ; *** this will be taken out soon
  41. oldH        equ    oldSig+4+2
  42.  
  43. iconID        equ    10
  44. iconPtr        equ    10
  45. moveX        equ    8
  46.  
  47. myVars        RECORD    0,DECREMENT
  48. destRect    ds.w    4
  49. myBitMap    ds    bitMapRec
  50. myPort        ds    portRec
  51. savePort    ds.l    1
  52. thePort        ds    4        ; my own QuickDraw (required!)
  53.         ds    grafSize-4    ;  other QuickDraw globals (except thePort)
  54. localA5        ds    4
  55. varsSize    equ    *
  56.         ENDR
  57.  
  58. ;------------------------------------------------------------------------------------------------
  59. ;                                
  60. ;    display the ICN# specified by iconID and move the pen horizontally by moveX
  61. ;     pass a -1 in moveX to move the standard amount, moveX should be 40 for most ICN#'s
  62. ;
  63. ;    PROCEDURE ShowINIT(iconID: Integer; moveX: Integer); EXTERNAL
  64. ;
  65. ;    pascal void ShowINIT(iconID, moveX)
  66. ;        short iconID;
  67. ;        short moveX;
  68. ;        extern;
  69. ;
  70. ;------------------------------------------------------------------------------------------------
  71. ShowINIT:    PROC    EXPORT
  72.         IMPORT    InnerShowINIT
  73.         link    a6,#0            ;don't need locals here
  74.         move.l    a3,-(sp)
  75.         clr.l    -(sp)
  76.         move.l    #'ICN#',-(sp)
  77.         move    iconID(a6),-(sp)
  78.         _GetResource
  79.         move.l    (sp)+,d0
  80.         beq.s    ErrorExit
  81.         move.l    d0,a0
  82.         _HLock
  83.         move.l    a0,a3
  84.         move.l    (a0),-(sp)
  85.         move    moveX(a6),-(sp)
  86.         jsr    InnerShowINIT
  87.         move.l    a3,a0
  88.         _HUnlock
  89.         move.l    a0,-(sp)
  90.         _ReleaseResource
  91. Exit:
  92.         move.l    (sp)+,a3
  93.         unlk    a6
  94.         move.l    (sp)+,(sp)        ; ditch args
  95.         rts                ; return
  96.  
  97. ErrorExit:
  98. ;        move    #8,-(sp)        ; ***PM why doesn't this work?
  99. ;        _SysBeep
  100.         bra.s    Exit
  101.  
  102. ;------------------------------------------------------------------------------------------------
  103. ;                                
  104. ;    display the ICN# pointed to by iconPtr and move the pen horizontally by moveX
  105. ;     pass a -1 in moveX to move the standard amount, moveX should be 40 for most ICN#'s
  106. ;
  107. ;    PROCEDURE InnerShowINIT(iconPtr: ICONListPtr; moveX: Integer); EXTERNAL
  108. ;
  109. ;    pascal void InnerShowINIT(iconPtr, moveX)
  110. ;        ICONList *iconPtr;
  111. ;        short moveX;
  112. ;        extern;
  113. ;
  114. ;------------------------------------------------------------------------------------------------
  115. InnerShowINIT:    PROC    EXPORT
  116.         WITH    myVars
  117.         link    a6,#varsSize
  118.         movem.l    d2-d7/a3-a5,-(sp)
  119.         lea.l    localA5(a6),a5        ; PM7/21 - no longer calling InitGraf
  120.         pea    thePort(a6)
  121.         _InitGraf            ; ***fixes color bug as per DA@ICOM
  122.         pea    myPort(a6)
  123.         _OpenPort
  124.  
  125.         move    myH,d0
  126.         rol    #1,d0
  127.         eor    #$1021,d0
  128.         cmp    myCheck,d0
  129.         beq.s    ScratchOK
  130.         cmp.l    #'Paul',oldSig        ; ***check for old ShowINIT compatibility
  131.         beq.s    OldScratchOK
  132.         move    #8,myH
  133.         bra.s    ScratchOK
  134. OldScratchOK:
  135.         move    oldH,myH        ; put the old in the new
  136. ScratchOK:
  137.         lea    myPort(a6),a0
  138.         move    portBounds+bottom(a0),d0
  139.         sub    #8+32,d0
  140.         swap    d0
  141.         move    myH,d0
  142.  
  143.         move.l    d0,destRect(a6)
  144.         move.l    d0,destRect+botRight(a6)
  145.         add    #32,destRect+right(a6)
  146.         add    #32,destRect+bottom(a6)
  147.  
  148.         move.l    iconPtr(a6),a3
  149.         bsr.s    PlotIcon
  150.         move    myH,d0
  151.         move    moveX(a6),d1
  152.         bpl.s    @1            ; not default
  153.         move    #40,d1            ; default
  154. @1        add    d1,d0            ; move to right
  155.         move    d0,myH
  156.         rol    #1,d0
  157.         eor    #$1021,d0
  158.         move    d0,myCheck
  159. Exit:
  160.         pea    myPort(a6)
  161.         _ClosePort
  162.         movem.l    (sp)+,d2-d7/a3-a5
  163.         unlk    a6
  164.         move.l    (sp)+,a0        ; PM 7/13, bug reported by D. Dunham
  165.         addq.l    #6,sp            ; ditch args
  166.         jmp    (a0)            ; return
  167.  
  168. ; a3 holds ICN# pointer
  169.  
  170. PlotIcon:
  171.         lea    myBitMap(a6),a4
  172.         move.l    a3,baseAddr(a4)        ; fill out the bitmap record
  173.         add.l    #128,baseAddr(a4)    ; skip to mask
  174.         move    #4,rowBytes(a4)        ; 32/8 bits
  175.         move.l    #0,bounds(a4)        ; 0,0 topleft
  176.         move.l    #$00200020,bounds+botRight(a4) ; 32,32 botright
  177.  
  178.         move.l    a4,-(sp)        ; punch hole with mask
  179.         lea    myPort(a6),a2        ; get the desk port
  180.         pea    portBits(a2)        ;  for its portbits
  181.         pea    srcRect
  182.         pea    destRect(a6)
  183.         move    #srcBic,-(sp)        ; punch a hole
  184.         clr.l    -(sp)            ; no clip region
  185.         _CopyBits
  186.  
  187.         sub.l    #128,baseAddr(a4)
  188.         move.l    a4,-(sp)        ; now draw (or) icon
  189.         pea    portBits(a2)
  190.         pea    srcRect
  191.         pea    destRect(a6)
  192.         move    #srcOr,-(sp)
  193.         clr.l    -(sp)
  194.         _CopyBits
  195.  
  196.         rts
  197.  
  198. srcRect:    dc.w    0,0,32,32
  199.  
  200.         ENDPROC
  201.  
  202.         END
  203.