home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariimp / macpaint.s < prev    next >
Text File  |  1991-06-17  |  10KB  |  448 lines

  1.  Include "equ.h"
  2.  Include "impequ.h"
  3.  
  4.  
  5.  SECTION MACPAINT,CODE,PUBLIC
  6.  
  7. ***************************************************
  8. ***                        ***
  9. ***************************************************
  10. dumbentry:
  11.     clr.l    d0
  12.     rts
  13.  
  14.     dc.l    "IMPP"        ; magik number for pic import
  15.     dc.w    200
  16.     dc.l    0
  17.  
  18. table:    dc.l    0
  19.     dc.l    name,special,check,macp
  20.  
  21.  
  22. ***************************************
  23. **   Is it really a MacPaint file?   **
  24. ***************************************
  25. check:    move.l    table,a0
  26.     move.l    buff1(a0),a1
  27.         move.l  (a1),a1
  28.     add.l   #65,a1
  29.         lea     test,a0
  30.         moveq    #3,d0
  31. ck0:    cmp.b   (a1)+,(a0)+
  32.         bne     never
  33.         dbf     d0,ck0
  34.         bra     right
  35.  
  36. ***************************************
  37. **                                   **
  38. ***************************************
  39. macp:   move.l    sp,savesp
  40.     
  41.         move.l    table,a0
  42.     move.l    flen(a0),a0
  43.     move.l    (a0),piclength
  44.     
  45.         move.l  table,a0
  46.     move.l    f_openr(a0),a0
  47.     jsr    (a0)
  48.     beq    rrts
  49.  
  50.     move.l    table,a0
  51.     move.l    spclnum(a0),a0
  52.     cmp.w    #1,(a0)
  53.     beq    impobj
  54.  
  55.  
  56. ***************************************
  57. **                                   **
  58. ***************************************
  59. imppic:    move.l    table,a0
  60.     move.l    p_open(a0),a0
  61.     jsr    (a0)
  62.     beq    rrts
  63.  
  64.     bsr    getpicinfo
  65.  
  66.     move.l    table,a4
  67.     move.l    cwptr(a4),a4        ;ptr to window handle
  68.     move.l    (a4),a4            ;window handle
  69.     move.l    (a4),a4            ;ptr to window structure
  70.  
  71.     lea    pic,a0
  72.     move.w    pc_Type(a0),pi_Type(a4)
  73.     move.w    pc_SFreq(a0),pi_SFreq(a4)
  74.     move.w    pc_SAngle(a0),pi_SAngle(a4)
  75.     move.w    pc_SSpot(a0),pi_SSpot(a4)
  76.     move.l    pc_SMap(a0),pi_SMap(a4)
  77.     move.l    pc_SMap+4(a0),pi_SMap+4(a4)
  78.     move.w    pc_XDpi(a0),pi_XDpi(a4)
  79.     move.w    pc_YDpi(a0),pi_YDpi(a4)
  80.     move.w    pc_W(a0),pi_W(a4)
  81.     move.w    pc_H(a0),pi_H(a4)
  82.     move.w    pc_Width(a0),pi_Width(a4)
  83.     move.w    pc_BitPln(a0),pi_BitPln(a4)
  84.     move.w    pc_Palet(a0),pi_Palet(a4)
  85.  
  86.     move.w    pi_Palet(a4),d1
  87.     mulu    #pl_Sizeof,d1
  88.     move.w    pi_Width(a4),d0
  89.     mulu    pi_BitPln(a4),d0
  90.     mulu    pi_H(a4),d0
  91.     add.l    d1,d0        ;size of bitmap +( 4 words * #colors)
  92.  
  93.     clr.w    d1
  94.     clr.w    d2
  95.     move.l    table,a0
  96.     move.l    m_alloc(a0),a0
  97.     jsr    (a0)
  98.     beq    abortpic
  99.  
  100.     move.l    table,a3
  101.     move.l    cwptr(a3),a3
  102.     move.l    (a3),a3
  103.     move.l    (a3),a3
  104.     move.l    a0,pi_Ptr(a3)
  105.     move.l    (a0),a4
  106.     move.l    a4,picptr
  107.  
  108.     bsr    putpic
  109.  
  110.     move.l    table,a0
  111.     move.l    p_close(a0),a0
  112.     jsr    (a0)
  113.  
  114.     move.l    table,a0
  115.     move.l    f_closer(a0),a0
  116.     jmp    (a0)
  117.  
  118.  
  119. abortpic:
  120.     bsr    purgepic
  121.  
  122.     move.l    table,a0
  123.     move.l    p_abort(a0),a0
  124.     jsr    (a0)
  125.  
  126. abort0:    move.l    table,a0
  127.     move.l    f_closer(a0),a0
  128.     jmp    (a0)
  129.  
  130.  
  131. ***************************************
  132. **                                   **
  133. ***************************************
  134. impobj:    move.l    table,a0
  135.     move.l    o_open(a0),a0
  136.     jsr    (a0)
  137.     beq    abort0
  138.  
  139.     bsr    getpicinfo
  140.  
  141.     move.b    #tpic,object+ob_Type
  142.     clr.l    object+ob_Left
  143.     clr.l    object+ob_Top
  144.  
  145.     move.w    pic+pc_W,d1
  146.     move.l    #7200,d0
  147.     bsr    Mulu1632
  148.     move.w    pic+pc_XDpi,d2
  149.     bsr    Divu1648
  150.     move.l    d0,object+ob_Right
  151.  
  152.     move.w    pic+pc_H,d1
  153.     move.l    #7200,d0
  154.     bsr    Mulu1632
  155.     move.w    pic+pc_YDpi,d2
  156.     bsr    Divu1648
  157.     move.l    d0,object+ob_Bottom
  158.  
  159.     clr.b    object+ob_Flag
  160.     clr.w    object+ob_Slant
  161.     clr.w    object+ob_Twist
  162.     move.w    #50,object+ob_LWidth        ;1 point line
  163.     clr.b    object+ob_LType            ;no line
  164.     move.b    #1,object+ob_LColor        ;black line
  165.     clr.b    object+ob_FType            ;no fill
  166.     move.b    #1,object+ob_FColor        ;black fill
  167.     clr.b    object+ob_LBegin
  168.     clr.b    object+ob_LEnd
  169.     move.w    #900,object+ob_HStandOff    ;1/8 inch
  170.     move.w    #900,object+ob_VStandOff    ;1/8 inch
  171. *
  172. *
  173.     move.l    table,a1
  174.     move.l    o_obj(a1),a1
  175.     lea    object,a0
  176.     jsr    (a1)
  177.     beq    abortobj
  178.  
  179.     move.w    pic+pc_Width,d0
  180.     mulu    pic+pc_BitPln,d0
  181.     mulu    pic+pc_H,d0
  182.     move.w    pic+pc_Palet,d1
  183.     mulu    #pl_Sizeof,d1
  184.     add.l    d1,d0
  185.     add.l    #pc_Sizeof,d0
  186.  
  187.     move.l    table,a0
  188.     move.l    o_malloc(a0),a0
  189.     jsr    (a0)
  190.     beq    abortobj
  191.  
  192.     lea    pic,a1
  193.     clr.l    pc_DPtr(a1)
  194.     clr.w    pc_DScale(a1)
  195.     move.w    pc_Palet(a1),d0
  196.     mulu    #pl_Sizeof,d0
  197.     add.l    #pc_Sizeof,d0
  198.     move.l    d0,pc_Ptr(a1)
  199.  
  200.     move.w    #pc_Sizeof/2-1,d0
  201. oppic1:    move.w    (a1)+,(a0)+
  202.     dbf    d0,oppic1
  203.     move.l    a0,picptr
  204.  
  205.     bsr    putpic
  206.  
  207.     move.l    table,a0
  208.     move.l    o_close(a0),a0
  209.     jsr    (a0)
  210.  
  211.     move.l    table,a0
  212.     move.l    f_closer(a0),a0
  213.     jmp    (a0)
  214.  
  215. abortobj:
  216.     bsr    purgepic
  217.  
  218.     move.l    table,a0
  219.     move.l    o_abort(a0),a0
  220.     jsr    (a0)
  221.  
  222.     move.l    table,a0
  223.     move.l    f_closer(a0),a0
  224.     jmp    (a0)
  225.  
  226.  
  227. *******************************************
  228. ***                        ***
  229. *******************************************
  230. getpicinfo:
  231.     lea    pic,a0
  232.     move.w    #pc_Sizeof-1,d0
  233. gpi1:    clr.b    (a0)+
  234.     dbra    d0,gpi1
  235.  
  236.     clr.l    picture
  237.     move.l    table,a1
  238.     move.l    piclength,d0
  239.     clr.w    d1
  240.     clr.w    d2
  241.     move.l    m_alloc(a1),a1
  242.     jsr    (a1)            ;allocate memory for the picture
  243.     move.l    a0,picture
  244.     clr.l    picoffset
  245.  
  246.     move.l    (a0),a0                 ;read in the entire picture
  247.     move.l    piclength,d0
  248.     move.l    table,a1
  249.     move.l    f_getr(a1),a1
  250.     jsr    (a1)
  251.     beq    errrts
  252.  
  253. gpi2:   lea    pic,a0
  254.         clr.l   d0
  255.     move.b    #PC_BW,d0
  256.     move.w    d0,pc_Type(a0)
  257.     move.w    #-1,pc_SFreq(a0)
  258.     move.w    #-1,pc_SAngle(a0)
  259.     move.w    #0,pc_SSpot(a0)
  260.     move.l    #0,pc_SMap(a0)
  261.     move.l    #0,pc_SMap+4(a0)
  262.     move.w    #72,pc_XDpi(a0)
  263.     move.w    #72,pc_YDpi(a0)
  264.         move.w  #576,pc_W(a0)           ;always this width
  265.         move.w  #720,pc_H(a0)           ;always this height
  266.     move.w    #72,pc_Width(a0)        ;bytes per row
  267.     move.w    #1,pc_BitPln(a0)
  268.     move.w    #0,pc_Palet(a0)
  269.  
  270.     rts
  271.  
  272.  
  273. *******************************************
  274. ***                    ***
  275. *******************************************
  276. putpic:
  277.     clr.l    picoffset
  278.         
  279.         move.w    pic+pc_Width,d0         ;set amiga bitmap to all white ($ff)
  280.     mulu    pic+pc_BitPln,d0
  281.     mulu    pic+pc_H,d0
  282.     move.l    d0,d1
  283.     swap    d1
  284.     move.l    picptr,a0
  285.     bra    pp2
  286. pp1:    move.b    #$00,(a0)+
  287. pp2:    dbf    d0,pp1
  288.     dbf    d1,pp1
  289.  
  290.     move.l    picture,a0
  291.     move.l    (a0),a0
  292.     add.l    #640,a0         ;push a0 ahead to the pict data
  293.         
  294.         bsr     pckcomp
  295.         
  296.     bra    purgepic
  297.  
  298. **********************************
  299. **                              **
  300. **********************************
  301. pckcomp:
  302.         clr.l   d6
  303.         clr.l   d0
  304.         
  305.         move.w  #720,d5         ;always 720 rows tall
  306.  
  307.         move.w  pic+pc_W,d6      ;d6 = number of bytes in row
  308.         add.w   #7,d6
  309.         lsr.w   #3,d6
  310.         move.w  d6,d0           ;d0 = save d6
  311.     bra    pk8
  312.  
  313. pk1:    move.w    d0,d6           ;reset d6 to number of bytes in row
  314.     move.l    picptr,a1       ;a1 = adress in amiga bitmap
  315.  
  316. pk2:    clr.l   d1
  317.         move.b  (a0)+,d1        ;d1 = one byte code
  318.         cmp.b   #128,d1
  319.         beq.s   pk2             ;code 128 = do nothing, so get next byte
  320.         
  321.         btst    #7,d1           ;check the high bit
  322.         beq     op2             ;if 0 copy the next d1+1 bytes as is
  323.     
  324. op1:    neg.b   d1              ;else copy the next byte -d1+1 times
  325.         sub.b   d1,d6           ;decrement row byte count
  326.         subq.w  #1,d6
  327.         
  328.         move.b  (a0)+,d2        ;get the byte to copy         
  329. op12:   move.b  d2,(a1)+        ;copy the byte
  330.         dbf   d1,op12         ;loop until done (d1=-1)        
  331.         bra     pk6
  332.  
  333. op2:    sub.b   d1,d6           ;decrement row byte count
  334.         subq.w  #1,d6
  335.  
  336. op22:   move.b  (a0)+,(a1)+
  337.     dbf   d1,op22
  338.  
  339. pk6:    tst.w   d6              ;are we done with a row yet
  340.         bne     pk2             ;no - keep going
  341.         
  342.         move.l  a1,d6
  343.         btst    #0,d6           ;did we end on an odd address
  344.         beq     pk7
  345.         move.b  #0,(a1)+
  346.  
  347. pk7:    move.l    picptr,a1
  348.     add.w    pic+pc_Width,a1
  349.     move.l    a1,picptr
  350.         
  351. pk8:    dbf     d5,pk1
  352.         rts
  353.  
  354.  
  355. ***********************************
  356. ***                ***
  357. ***********************************
  358. Mulu1632:
  359.         move.l  table,a0
  360.         move.l  mulu1632(a0),a0
  361.         jmp     (a0)
  362.         
  363. ***********************************
  364. ***                ***
  365. ***********************************
  366. Divu1648:
  367.         move.l  table,a0
  368.         move.l  divu1648(a0),a0
  369.         jmp     (a0)
  370.  
  371. ***********************************
  372. ***                ***
  373. ***********************************
  374. errrts:    bsr    purgepic
  375.     move.l    savesp,sp
  376. rrts:    rts
  377.  
  378. purgepic:
  379.     tst.l    picture
  380.     beq    rrts
  381.     move.l    picture,a0
  382.     move.l    table,a1
  383.     move.l    m_delete(a1),a1
  384.     jsr    (a1)
  385.     rts
  386.  
  387. *******************************************************************
  388. ***    called when the import routine choosen finds something    ***
  389. ***    wrong with the file loaded.                ***
  390. *******************************************************************
  391. never:    clr.w    d0
  392.     rts
  393.  
  394. maybe:    move.w    #1,d0
  395.     rts
  396.  
  397. right:    move.w    #2,d0
  398.     rts
  399.  
  400. *************************************************************
  401. *************************************************************
  402.  SECTION MACPAINT,DATA,PUBLIC
  403.  
  404. special:
  405.     dc.w    2
  406.     dc.l    spcl1,spcl2
  407.  
  408. vers:   dc.b    "$VER: "
  409. name:    dc.b    "MacPaint  v2.0.2",0
  410.  
  411. spcl1:    dc.b    "Picture Window",0
  412. spcl2:    dc.b    "Object",0
  413.  
  414. test:   dc.b    "PNTG",0
  415.  
  416.  SECTION MACPAINT,BSS,PUBLIC
  417. temp:        ds.l    1
  418. temp2:        ds.l    1
  419. savesp:        ds.l    1
  420. picptr:        ds.l    1
  421. pptr:        ds.l    1
  422. pic:        ds.w    pc_Sizeof/2
  423. object:        ds.w    ob_SizeOf/2
  424.  
  425. picture:    ds.l    1
  426. picoffset:    ds.l    1
  427. piclength:    ds.l    1
  428.  
  429.  
  430.  
  431. ****************************** CHANGES ************************************
  432. ;
  433. ;       version 2.0.2
  434. ;
  435. ;       - added a version string
  436. ;
  437. ;
  438. ;       version 2.0.1
  439. ;       
  440. ;       - changed the default pc_SFreq and pc_SAngle from 0 to -1
  441. ;
  442. ;       - now only checks the TYPE field for PNTG (not creator for MPNT)
  443. ;
  444. ;
  445. ;       version 2.0.0
  446. ;
  447. ;       - initial release (shipped with PgS v2.0)                   
  448.