home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / S8-TCAL3.DMS / in.adf / Programmer / Examples.lha / object_logo.tclib.s < prev   
Encoding:
Text File  |  1994-10-31  |  11.7 KB  |  458 lines

  1.  
  2.     include 'lvos.i'
  3.     include 'tclib.i'
  4.  
  5. startall:
  6.     moveq   #-13,d0     ; if user tries to start this lib!
  7.     rts                 ;   (need -13 to identify TClibs!)
  8.     dc.l 'TCLB'         ; TurboCalc-Lib - this field is used to identify
  9.                         ;   TClibs and to link them in memory (i.e. that
  10.                         ;   this entry is used and thus changed by TC
  11.                         ;   to keep a list of all already loaded libs!)
  12.     dc.l 'OBJT'
  13.     dc.w 1,0            ; Version, Revision
  14.     dc.l txt_name
  15.     dc.l txt_ver
  16.     dc.l txt_author
  17.     dc.l 0              ; flags - reserved
  18.     dc.l 0              ; reserved
  19.     dc.l 0              ; reserved
  20. * default-routines
  21.     dc.l objclass_init  ; init
  22.     dc.l 0  ; exit
  23.     dc.l 0  ; flush
  24.     dc.l 0
  25. *
  26. objclass_pic:
  27.     dc.l 0
  28.     dc.l objclass_picname
  29.     dc.l 'LOGO'
  30.     dc.b 0
  31.     dc.b 1<<OBJCLASSFLAGS1_ACTIONTASK
  32.     dc.b 0,0
  33.     dc.l objpic_new
  34.     dc.l objpic_duplicate
  35.     dc.l objpic_free
  36.     dc.l 0  ; for this example no edit-routine!
  37.     dc.l objpic_draw
  38.     dc.l objpic_load
  39.     dc.l objpic_save
  40.     dc.l objpic_action
  41.  
  42. objclass_picname: dc.b 'Iff-Logo (Example)',0
  43.  
  44. txt_name: dc.b '(Example) Logo-Objectclass',0
  45. txt_ver: dc.b '$VER: Logo-Objectclass V1.0 (20.10.94)',0
  46. txt_author: dc.b '© 1994 Michael Friedrich',0
  47.  cnop 0,2
  48.  
  49.  
  50.  
  51.  
  52.  STRUCTURE ObjPic,0
  53.  
  54.  WORD objpic_depth
  55.  WORD objpic_width
  56.  WORD objpic_height
  57.  LABEL objpic_bitmap
  58. * complete bitmap-structure
  59.     WORD    objpicbm_BytesPerRow
  60.     WORD    objpicbm_Rows
  61.     BYTE    objpicbm_Flags
  62.     BYTE    objpicbm_Depth
  63.     WORD    objpicbm_Pad
  64.     STRUCT  objpicbm_Planes,8*4
  65. *
  66.  LABEL ObjPic_SIZE
  67.  
  68.  STRUCTURE ObjPic_drawmem,0
  69.  LABEL objpicdm_scalearg
  70.     WORD   bsa_SrcX            ; source origin
  71.     WORD   bsa_SrcY
  72.     WORD   bsa_SrcWidth        ; source size
  73.     WORD   bsa_SrcHeight
  74.     WORD   bsa_XSrcFactor      ; scale factor denominators
  75.     WORD   bsa_YSrcFactor
  76.     WORD   bsa_DestX           ; destination origin
  77.     WORD   bsa_DestY
  78.     WORD   bsa_DestWidth       ; destination size result
  79.     WORD   bsa_DestHeight
  80.     WORD   bsa_XDestFactor     ; scale factor numerators
  81.     WORD   bsa_YDestFactor
  82.     LONG    bsa_SrcBitMap       ; source BitMap
  83.     LONG    bsa_DestBitMap      ; destination BitMap
  84.     LONG   bsa_Flags           ; reserved.  Must be zero!
  85.     WORD   bsa_XDDA            ; reserved
  86.     WORD   bsa_YDDA
  87.     LONG    bsa_Reserved1
  88.     LONG    bsa_Reserved2
  89.  WORD objpicdm_tempwidth
  90.  WORD objpicdm_tempheight
  91.  LABEL objpicdm_bitmap2
  92.     WORD    objpicbm2_BytesPerRow
  93.     WORD    objpicbm2_Rows
  94.     BYTE    objpicbm2_Flags
  95.     BYTE    objpicbm2_Depth
  96.     WORD    objpicbm2_Pad
  97.     STRUCT  objpicbm2_Planes,8*4
  98.  LABEL ObjPic_drawmem_SIZE
  99.  
  100.  
  101. objclass_init:
  102. * nothing to init, simply check if we are running with V36+
  103.     GETGFX
  104.     cmp.w   #36,$14(a6)
  105.     bhs.s   10$
  106.     moveq   #-1,d0
  107.     rts
  108. 10$ moveq   #0,d0
  109.     rts
  110.  
  111.  
  112. **********************************
  113.  
  114. objpic_new:
  115.     movem.l d2-d7/a2-a3,-(sp)
  116.     moveq   #ObjPic_SIZE,d0
  117.     XSR     AllocMemClear
  118.     beq.s   90$
  119.     move.l  a0,a3
  120. *
  121.     moveq   #2,d0   ; depth
  122.     moveq   #$4b,d1 ; width
  123.     moveq   #$20,d2 ; height
  124.     movem.w d0-d2,objpic_depth(a3)
  125. *
  126.     lea     objpic_bitmap(a3),a0
  127.     GETGFX
  128.     CALL    _LVOInitBitMap
  129. *
  130.     lea     objpicbm_Planes(a3),a2
  131.     move.l  #AppIcon_p,(a2)+
  132.     move.l  #AppIcon_p+($50/8)*$20,(a2)
  133. *
  134.     move.l  a3,d0
  135.     moveq   #0,d1   ; no _EDIT needed!
  136. 90$ movem.l (sp)+,d2-d7/a2-a3
  137.     rts
  138.  
  139. objpic_duplicate
  140.     move.l  a0,-(sp)
  141.     moveq   #ObjPic_SIZE,d0
  142.     XSR     AllocMemClear
  143.     beq.s   90$
  144.     move.l  (sp),a1
  145.     move.l  a0,(sp)
  146.     moveq   #ObjPic_SIZE/2-1,d0
  147. 21$ move.w  (a1)+,(a0)+
  148.     dbra    d0,21$
  149.     move.l  (sp),a0
  150. 90$ addq.w  #4,sp
  151.     rts
  152. objpic_free
  153.     XMP     FreeMem
  154.  
  155. objpic_draw
  156.     movem.l d0-d7,-(sp)
  157.     sub.l   d0,d2
  158.     sub.l   d1,d3
  159.     addq.l  #1,d2
  160.     addq.l  #1,d3
  161.     moveq   #0,d6
  162.     cmp.w   #1000,d2    ; BlitScale fails, if with >1008
  163.     blo.s   40$         ; so divide if it should be bigger
  164.     move.l  d2,-(sp)
  165.     divu    #1000,d2
  166.     addq.w  #1,d2 ; divide in d2 pieces!!!
  167.     move.w  d2,d6
  168.     swap    d6
  169.     move.l  (sp)+,d2
  170. 40$ moveq   #0,d7
  171.     cmp.w   #1000,d3    ; for height this seems to work, but
  172.     blo.s   50$         ; do it never the less for height, too.
  173.     move.l  d3,-(sp)    ; first to be sure and second
  174.     divu    #1000,d3    ; and second to limit temp-bitmap!!!)
  175.     addq.w  #1,d3 ; divide in d3 pieces!!!
  176.     move.w  d3,d7
  177.     swap    d7
  178.     move.l  (sp)+,d3
  179. *** loop for all parts
  180. 50$ movem.l d0-d5/a0-a1,-(sp)
  181. * d6/d7-1):
  182.     move.l  d6,d4
  183.     swap    d4
  184.     tst.w   d4
  185.     beq.s   51$
  186.     divu    d4,d2
  187.     move.l  d2,d5
  188.     mulu    d6,d2
  189.     add.l   d2,d0   ; add width/n * k
  190.     moveq   #0,d2
  191.     move.w  d5,d2
  192.     subq.w  #1,d4
  193.     cmp.w   d4,d6
  194.     bne.s   51$
  195.     swap    d5
  196.     add.w   d5,d2   ; is last part, so add modula
  197. 51$ move.l  d7,d4
  198.     swap    d4
  199.     tst.w   d4
  200.     beq.s   52$
  201.     divu    d4,d3
  202.     move.l  d3,d5
  203.     mulu    d7,d3
  204.     add.l   d3,d1   ; add height/n * k
  205.     moveq   #0,d3
  206.     move.w  d5,d3
  207.     subq.w  #1,d4
  208.     cmp.w   d4,d7
  209.     bne.s   52$
  210.     swap    d5
  211.     add.w   d5,d3   ; is last part, so add modula
  212. 52$ movem.l 4*4(sp),d4/d5
  213. *
  214.     bsr.s   objpic_draw2
  215.     movem.l (sp)+,d0-d5/a0-a1
  216.     addq.w  #1,d6
  217.     move.l  d6,d5
  218.     swap    d5
  219.     cmp.w   d5,d6
  220.     blo.s   50$
  221. *
  222.     clr.w   d6
  223.     addq.w  #1,d7
  224.     move.l  d7,d5
  225.     swap    d5
  226.     cmp.w   d5,d7
  227.     blo.s   50$
  228.     movem.l (sp)+,d0-d7
  229.     rts
  230. * d0-d3: x/y/w/h, d6/d7: upper-word: #pieces, lower-word: piece-number (w/h)
  231. objpic_draw2:
  232.     movem.l d0-d7/a2-a4,-(sp)
  233.     move.l  a0,a3
  234.  
  235. *** alloc second bitmap and blitscale-structure
  236.     moveq   #ObjPic_drawmem_SIZE,d0
  237.     XSR     AllocMemClear
  238.     beq     90$
  239.     move.l  a0,a4
  240. *** fill blitscale-structure!
  241.     lea     objpicdm_scalearg(a4),a1
  242.     clr.l   (a1)+   ; source_x/y
  243.     movem.w objpic_width(a3),d0-d1
  244. * d6/d7-2):
  245.     movem.l d4/d5,-(sp)
  246.     move.l  d6,d4
  247.     swap    d4
  248.     tst.w   d4
  249.     beq.s   21$
  250.     divu    d4,d0
  251.     move.l  d0,d5
  252.     mulu    d6,d0
  253.     move.w  d0,-4(a1)   ; new x-pos: width/n * k
  254.     move.w  d5,d0
  255.     subq.w  #1,d4
  256.     cmp.w   d4,d6
  257.     bne.s   21$
  258.     swap    d5
  259.     add.w   d5,d0       ; is last part, so add modula
  260. 21$ move.l  d7,d4
  261.     swap    d4
  262.     tst.w   d4
  263.     beq.s   22$
  264.     divu    d4,d1
  265.     move.l  d1,d5
  266.     mulu    d7,d1
  267.     move.w  d1,-2(a1)   ; new y-pos: height/n * k
  268.     move.w  d5,d1
  269.     subq.w  #1,d4
  270.     cmp.w   d4,d6
  271.     bne.s   22$
  272.     swap    d5
  273.     add.w   d5,d1       ; is last part, so add modula
  274. 22$ movem.l (sp)+,d4/d5
  275. *
  276.     move.w  d0,(a1)+    ; source_width/height
  277.     move.w  d1,(a1)+
  278.     move.w  d0,(a1)+    ; source_factor
  279.     move.w  d1,(a1)+
  280.     clr.l   (a1)+       ; dest_x/y (are 0 for temp-bitmap!!!)
  281.     clr.l   (a1)+       ; dest_w/h, is calculated by routine!
  282.     move.w  d2,(a1)+    ; dest_factor
  283.     move.w  d3,(a1)+    ; "
  284. *
  285.     lea     objpic_bitmap(a3),a0
  286.     move.l  a0,(a1)+    ; source-bitmap
  287.     lea     objpicdm_bitmap2(a4),a0
  288.     move.l  a0,(a1)+    ; mid-bitmap
  289.     clr.l   (a1)+   ; flags
  290. *** init temp-bitmap!!!
  291. * calc width
  292.     lea     objpicdm_scalearg(a4),a0
  293.     move.w  bsa_SrcWidth(a0),d0
  294.     move.w  bsa_XDestFactor(a0),d1
  295.     move.w  bsa_XSrcFactor(a0),d2
  296.     CALL    -684    ; LVOScalerDiv
  297. *
  298.     move.l  d0,-(sp)
  299.     lea     objpicdm_scalearg(a4),a0
  300.     move.w  bsa_SrcHeight(a0),d0
  301.     move.w  bsa_YDestFactor(a0),d1
  302.     move.w  bsa_YSrcFactor(a0),d2
  303.     CALL    -684    ; LVOScalerDiv
  304.     move.l  d0,d2
  305.     move.l  (sp)+,d1
  306.     move.w  objpic_depth(a3),d0
  307. * compare to dest-values and use higher ones!
  308.     cmp.w   2+2*4(sp),d1
  309.     bls.s   31$
  310.     move.w  2+2*4(sp),d1
  311. 31$ cmp.w   2+3*4(sp),d2
  312.     bls.s   32$
  313.     move.w  2+3*4(sp),d2
  314. 32$ movem.w d1/d2,objpicdm_tempwidth(a4)
  315.     lea     objpicdm_bitmap2(a4),a0
  316.     movem.l d0-d2/a0,-(sp)
  317.     CALL    _LVOInitBitMap
  318. * alloc mem for temp-bitmap
  319.     movem.l (sp)+,d0-d2/a0
  320.     exg.l   d0,d1
  321.     exg.l   d1,d2
  322.     lea     8(a0),a0
  323. 35$ movem.l d0-d2/a0,-(sp)  ; x/y/w
  324.     CALL    _LVOAllocRaster
  325.     move.l  d0,d3
  326.     movem.l (sp)+,d0-d2/a0
  327.     move.l  d3,(a0)+
  328. * well, no error checking here (but as this is only a test-objectclass
  329. * i was too lazy :)
  330.     subq.w  #1,d2
  331.     bne.s   35$
  332. *** blit & scale from first bitmap to temp-bitmap
  333.     lea     objpicdm_scalearg(a4),a0
  334.     CALL    -678    ; _LVOBitMapScale
  335. *** blit temp to rastport
  336.     lea     objpicdm_bitmap2(a4),a0
  337.     move.l  a2,a1
  338.     moveq   #0,d0   ; temp-x/y
  339.     moveq   #0,d1
  340.     movem.l (sp),d2-d5  ; dest-x/y/w/h
  341.     move.w  #$c0,d6     ; copy!
  342.     CALL    _LVOBltBitMapRastPort
  343. *** free allocated structure(s) and end
  344. * free raster
  345. 50$ moveq   #0,d2
  346.     move.b  objpicbm2_Depth(a4),d2
  347.     lea     objpicbm2_Planes(a4),a3
  348. 51$ move.l  (a3)+,a0
  349.     movem.w objpicdm_tempwidth(a4),d0-d1
  350.     CALL    _LVOFreeRaster
  351.     subq.w  #1,d2
  352.     bne.s   51$
  353. ** free temp-structure
  354.     move.l  a4,a0
  355.     XSR     FreeMem
  356. 90$ movem.l (sp)+,d0-d7/a2-a4
  357.     rts
  358.  
  359.  
  360. objpic_load
  361.     tst.l   d0
  362.     bne.s   10$
  363. * d0=0: ask for 6 bytes to load!
  364.     moveq   #6,d0
  365.     suba.l  a0,a0
  366.     rts
  367. * d0=1, a0=*mem for the requested 6 bytes - there aren't used here!
  368. 10$ bsr     objpic_new
  369.     move.l  d0,a0
  370.     moveq   #0,d0   ; free the allocated mem!
  371.     rts
  372.  
  373. objpic_save:
  374. * normally you needn't save any data for this test-objectclass
  375. * to show saving, depth, width and height of the picture are written
  376. * a0 is set, needn't change
  377.     moveq   #6,d0   , write first 6 bytes of a0
  378.     moveq   #0,d1   ; do not free this mem
  379.     rts
  380.  
  381. objpic_action:
  382. * no action, simply return...
  383.     moveq   #0,d0
  384.     rts
  385.  
  386.  
  387.  
  388.  SECTION Graphic,DATA_C
  389.  
  390. AppIcon_p:
  391.  dc.w $7fff,$ffff,$ffff,$ffff,$ffc0
  392.  dc.w $4040,$1002,$0040,$0801,$0040
  393.  dc.w $7fff,$ffff,$ffff,$ffff,$ffc0
  394.  dc.w $4040,$0000,$0000,$0000,$0040
  395.  dc.w $404b,$81c0,$36b5,$c000,$0040
  396.  dc.w $404a,$01c0,$3e80,$0000,$0040
  397.  dc.w $6a80,$0000,$0000,$0000,$0040
  398.  dc.w $4040,$0000,$0000,$0000,$0040
  399.  dc.w $4042,$8000,$7e00,$001c,$0040
  400.  dc.w $4042,$8000,$7e00,$0014,$0040
  401.  dc.w $5540,$0000,$0000,$0000,$0040
  402.  dc.w $4040,$0000,$0000,$0000,$0040
  403.  dc.w $4049,$0180,$3808,$8000,$0040
  404.  dc.w $4049,$0180,$3808,$0000,$0040
  405.  dc.w $6ac0,$0000,$0000,$0000,$0040
  406.  dc.w $4046,$0000,$0000,$0000,$0040
  407.  dc.w $4046,$0700,$001f,$ffff,$ffc0
  408.  dc.w $4040,$0000,$001f,$ffff,$ffc0
  409.  dc.w $5540,$0000,$0010,$0000,$0040
  410.  dc.w $4040,$0000,$0011,$3800,$1c40
  411.  dc.w $4040,$07a0,$1e11,$3800,$1c40
  412.  dc.w $4040,$05e0,$0f11,$381c,$1c40
  413.  dc.w $6ac0,$0000,$0011,$3f1c,$1c40
  414.  dc.w $4040,$0000,$0011,$3f1c,$1c40
  415.  dc.w $4042,$8000,$0013,$ffff,$ff40
  416.  dc.w $4042,$8000,$0011,$0003,$8040
  417.  dc.w $6ae0,$0000,$0011,$0003,$8040
  418.  dc.w $4040,$0000,$0011,$0003,$8040
  419.  dc.w $4040,$0000,$0010,$0000,$0040
  420.  dc.w $7fff,$ffff,$ffff,$ffff,$ffc0
  421.  dc.w $0000,$0000,$0000,$0000,$0000
  422.  dc.w $0000,$0000,$0000,$0000,$0000
  423.  dc.w $0000,$0000,$0000,$0000,$0000
  424.  dc.w $0007,$00e0,$1c03,$8070,$1c00
  425.  dc.w $0000,$0000,$0000,$0000,$0000
  426.  dc.w $003f,$effd,$ffbf,$f7fe,$ff80
  427.  dc.w $0e34,$7fff,$c94a,$3fff,$ff80
  428.  dc.w $0031,$effd,$c13f,$f7fe,$ff80
  429.  dc.w $0015,$5555,$5555,$5555,$5500
  430.  dc.w $003f,$effd,$ffbf,$f7fe,$ff80
  431.  dc.w $0e3d,$7fff,$ffff,$ffe3,$ff80
  432.  dc.w $003d,$6ffd,$ffbf,$f7ea,$ff80
  433.  dc.w $0015,$5555,$5555,$5555,$5500
  434.  dc.w $003f,$effd,$ffbf,$f7fe,$ff80
  435.  dc.w $0e36,$fe7f,$c7f7,$7fff,$ff80
  436.  dc.w $0036,$ee7d,$c7b7,$f7fe,$ff80
  437.  dc.w $0015,$5555,$5555,$5555,$5500
  438.  dc.w $0039,$effd,$ffbf,$f7fe,$ff80
  439.  dc.w $0e39,$f8ff,$ffe0,$0000,$0000
  440.  dc.w $003f,$effd,$ffaf,$ffff,$ff80
  441.  dc.w $0005,$5555,$554f,$ffff,$ff80
  442.  dc.w $003f,$effd,$ffae,$ffff,$ff80
  443.  dc.w $0e3f,$f85f,$ffee,$ffff,$ff80
  444.  dc.w $003f,$ea1d,$f0ae,$ffff,$ff80
  445.  dc.w $0015,$5555,$554e,$f8ff,$ff80
  446.  dc.w $003f,$effd,$ffae,$f8ff,$ff80
  447.  dc.w $0e3d,$7fff,$ffec,$0000,$0080
  448.  dc.w $003d,$6ffd,$ffae,$fffc,$7f80
  449.  dc.w $0015,$5555,$554e,$fffc,$7f80
  450.  dc.w $003f,$effd,$ffae,$fffc,$7f80
  451.  dc.w $0e3f,$ffff,$ffef,$ffff,$ff80
  452.  dc.w $0000,$0000,$0000,$0000,$0000
  453.  dc.w $0000,$0000,$0000,$0000,$0000
  454.  dc.w $0000,$0000,$0000,$0000,$0000
  455.  
  456.  END
  457.  
  458.