home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariimp / img.s < prev    next >
Text File  |  1991-05-23  |  8KB  |  501 lines

  1.  
  2.  Include "equ.h"
  3.  Include "impequ.h"
  4.  
  5.  SECTION img,CODE,PUBLIC
  6. ***************************************************
  7. ***                        ***
  8. ***************************************************
  9. dumbentry:
  10.     clr.l    d0
  11.     rts
  12.  
  13.     dc.l    "IMPP"
  14.     dc.w    200
  15.     dc.l    0
  16.  
  17. table:    dc.l    0
  18.     dc.l    name,special,check,img
  19.  
  20. *
  21. * IMG bit image file format
  22. *
  23. * the first 32k of the image is in buff1
  24. *
  25. check:    move.l    table,a0
  26.     move.l    buff1(a0),a1
  27.     move.l    (a1),a1
  28.     cmp.w    #1,(a1)+
  29.     bne    never
  30.     cmp.w    #8,(a1)
  31.     bne    never
  32.  
  33. ;    move.l    fname(a0),a1
  34. ;cimg2:    move.b    (a1)+,d0
  35. ;    beq    maybe
  36. ;    cmp.b    #'.',d0
  37. ;    bne    cimg2
  38. ;    cmp.b    #'I',(a1)+
  39. ;    bne    maybe
  40. ;    cmp.b    #'M',(a1)+
  41. ;    bne    maybe
  42. ;    cmp.b    #'G',(a1)
  43. ;    bne    maybe
  44.     moveq    #2,d0            ;it's a match
  45. irts:    rts
  46. *
  47. *
  48. *
  49. ***********************************************************
  50. ***                            ***
  51. ***********************************************************
  52. img:    move.l    table,a0
  53.     move.l    spclnum(a0),a0
  54.     cmp.w    #1,(a0)
  55.     beq    imgobj
  56. *
  57. *
  58. imgpic:    bsr    getpicinfo
  59.  
  60.     move.l    table,a0
  61.     move.l    p_open(a0),a0
  62.     jsr    (a0)
  63.     beq    irts
  64.  
  65.     move.l    table,a4
  66.     move.l    cwptr(a4),a4
  67.     move.l    (a4),a4
  68.     move.l    (a4),a4
  69.  
  70.     lea    pic,a0
  71.     move.w    pc_Type(a0),pi_Type(a4)
  72.     move.w    pc_SFreq(a0),pi_SFreq(a4)
  73.     move.w    pc_SAngle(a0),pi_SAngle(a4)
  74.     move.w    pc_SSpot(a0),pi_SSpot(a4)
  75.     move.l    pc_SMap(a0),pi_SMap(a4)
  76.     move.l    pc_SMap+4(a0),pi_SMap+4(a4)
  77.     move.w    pc_XDpi(a0),pi_XDpi(a4)
  78.     move.w    pc_YDpi(a0),pi_YDpi(a4)
  79.     move.w    pc_W(a0),pi_W(a4)
  80.     move.w    pc_H(a0),pi_H(a4)
  81.     move.w    pc_Width(a0),pi_Width(a4)
  82.     move.w    pc_BitPln(a0),pi_BitPln(a4)
  83.     move.w    pc_Palet(a0),pi_Palet(a4)
  84.  
  85.     move.w    pi_Width(a4),d0
  86.     mulu    pi_BitPln(a4),d0
  87.     mulu    pi_H(a4),d0
  88.  
  89.     clr.w    d1
  90.     clr.w    d2
  91.     move.l    table,a0
  92.     move.l    m_alloc(a0),a0
  93.     jsr    (a0)
  94.     beq    abortpic
  95.  
  96.     move.l    table,a3
  97.     move.l    cwptr(a3),a3
  98.     move.l    (a3),a3
  99.     move.l    (a3),a3
  100.     move.l    a0,pi_Ptr(a3)
  101.     move.l    (a0),a4
  102.     move.l    a4,picptr
  103.  
  104.     bsr    putpic
  105.  
  106.     move.l    table,a0
  107.     move.l    p_close(a0),a0
  108.     jsr    (a0)
  109.  
  110.     move.l    table,a0
  111.     move.l    f_closer(a0),a0
  112.     jmp    (a0)
  113.  
  114. abortpic:
  115.     move.l    table,a0
  116.     move.l    p_abort(a0),a0
  117.     jsr    (a0)
  118.  
  119.     move.l    table,a0
  120.     move.l    f_closer(a0),a0
  121.     jmp    (a0)
  122.  
  123. ***********************************************************
  124. ***                            ***
  125. ***********************************************************
  126. imgobj:    bsr    getpicinfo
  127.  
  128.     move.l    table,a0
  129.     move.l    o_open(a0),a0
  130.     jsr    (a0)
  131.     beq    irts
  132.  
  133.     move.b    #tpic,object+ob_Type
  134.     clr.l    object+ob_Left
  135.     clr.l    object+ob_Top
  136.  
  137.     move.w    pic+pc_W,d1
  138.     move.l    #7200,d0
  139.     bsr    Mulu1632
  140.     move.w    pic+pc_XDpi,d2
  141.     bsr    Divu1648
  142.     move.l    d0,object+ob_Right
  143.  
  144.     move.w    pic+pc_H,d1
  145.     move.l    #7200,d0
  146.     bsr    Mulu1632
  147.     move.w    pic+pc_YDpi,d2
  148.     bsr    Divu1648
  149.     move.l    d0,object+ob_Bottom
  150.  
  151.     clr.b    object+ob_Flag
  152.     clr.w    object+ob_Slant
  153.     clr.w    object+ob_Twist
  154.     move.w    #50,object+ob_LWidth        ;1 point line
  155.     clr.b    object+ob_LType            ;no line
  156.     move.b    #1,object+ob_LColor        ;black line
  157.     clr.b    object+ob_FType            ;no fill
  158.     move.b    #1,object+ob_FColor        ;black fill
  159.     clr.b    object+ob_LBegin
  160.     clr.b    object+ob_LEnd
  161.     move.w    #900,object+ob_HStandOff    ;1/8 inch
  162.     move.w    #900,object+ob_VStandOff    ;1/8 inch
  163. *
  164. *
  165.     move.l    table,a1
  166.     move.l    o_obj(a1),a1
  167.     lea    object,a0
  168.     jsr    (a1)
  169.     beq    abortobj
  170.  
  171.     move.w    pic+pc_Width,d0
  172.     mulu    pic+pc_BitPln,d0
  173.     mulu    pic+pc_H,d0
  174.     add.l    #pc_Sizeof,d0
  175.  
  176.     move.l    table,a0
  177.     move.l    o_malloc(a0),a0
  178.     jsr    (a0)
  179.     beq    abortobj
  180.  
  181.     lea    pic,a1
  182.     clr.l    pc_DPtr(a1)
  183.     clr.w    pc_DScale(a1)
  184.     move.l    #pc_Sizeof,pc_Ptr(a1)
  185.  
  186.     move.w    #pc_Sizeof/2-1,d0
  187. oppic1:    move.w    (a1)+,(a0)+
  188.     dbf    d0,oppic1
  189.     move.l    a0,picptr
  190.  
  191.     bsr    putpic
  192. *
  193. * end of input file.  close and flush buffer
  194. *
  195.     move.l    table,a0
  196.     move.l    o_close(a0),a0
  197.     jsr    (a0)
  198.  
  199.     move.l    table,a0
  200.     move.l    f_closer(a0),a0
  201.     jmp    (a0)
  202.  
  203. *
  204. *
  205. abortobj:
  206.     move.l    table,a0
  207.     move.l    o_abort(a0),a0
  208.     jsr    (a0)
  209.  
  210.     move.l    table,a0
  211.     move.l    f_closer(a0),a0
  212.     jmp    (a0)
  213.  
  214.  
  215. getpicinfo:
  216.     move.l    table,a0
  217.     move.l    f_openr(a0),a0
  218.     jsr    (a0)
  219.     beq    irts
  220.  
  221.     move.l    table,a1
  222.     move.l    buff1(a1),a0
  223.     move.l    (a0),a0
  224.     move.l    #16,d0
  225.     move.l    f_getr(a1),a1
  226.     jsr    (a1)
  227.     beq    irts
  228.  
  229.     move.l    table,a0
  230.     move.l    buff1(a0),a0
  231.     move.l    (a0),a0
  232.     move.w    4(a0),pic+pc_BitPln
  233.     move.w    6(a0),ptrn
  234.     move.w    8(a0),pxw
  235.     move.w    10(a0),pxh
  236.     move.w    12(a0),d0
  237.     move.w    d0,pic+pc_W
  238.     add.w    #15,d0
  239.     lsr.w    #3,d0
  240.     bclr    #0,d0
  241.     move.w    d0,pic+pc_Width
  242.     move.w    14(a0),dheight
  243.     move.w    dheight,pic+pc_H
  244.     move.w    #PC_BW,pic+pc_Type
  245.     move.w    #-1,pic+pc_SFreq    ;default frequency
  246.     move.w    #-1,pic+pc_SAngle    ;default angle
  247.     clr.w    pic+pc_SSpot
  248.     clr.l    pic+pc_SMap
  249.     clr.l    pic+pc_SMap+4
  250.  
  251.     clr.w    pic+pc_Palet        ;number of color pallet entries
  252.  
  253.     move.l    #25500,d0
  254.     divu    pxw,d0
  255.     move.w    d0,pic+pc_XDpi        ;x dots per inch
  256.     move.l    #25500,d0
  257.     divu    pxh,d0
  258.     move.w    d0,pic+pc_YDpi        ;y dots per inch
  259.     rts
  260.  
  261. *
  262. *
  263. *
  264. putpic:    move.w    pic+pc_Width,d0
  265.     mulu    pic+pc_H,d0
  266.     move.l    d0,plane
  267.  
  268.     move.w    pic+pc_W,d0
  269.     add.w    #7,d0
  270.     lsr.w    #3,d0
  271.     move.w    d0,wide
  272.  
  273. imgp3:    move.l    picptr,tpptr
  274.     move.w    pic+pc_BitPln,temp2        ;do for each bitplane
  275.  
  276. imgp4:    move.w    wide,temp3
  277.     move.l    tpptr,a0
  278.     clr.w    rlecnt            ;current rle count
  279.     move.w    #1,vrepcnt
  280.  
  281. imgp5:    move.l    a0,-(sp)
  282.     jsr    getnext
  283.     move.l    (sp)+,a0
  284.     move.b    d0,(a0)+
  285.     subq.w    #1,temp3        ;next byte in row
  286.     bne    imgp5
  287.     clr.b    (a0)+
  288.     clr.b    (a0)+
  289.  
  290.     move.l    plane,d0
  291.     add.l    d0,tpptr
  292.     subq.w    #1,temp2
  293.     bne    imgp4            ;next bitplane row
  294. *
  295. *
  296.     move.w    vrepcnt,d7
  297.     subq.w    #1,d7
  298.     move.l    picptr,a4
  299.     bra    unc9
  300. unc1:    move.l    a4,a3
  301.     move.w    pic+pc_BitPln,d6
  302.     bra    unc5
  303. unc2:    move.l    a3,a1
  304.     move.l    a2,a0
  305.     move.w    wide,d5
  306.     bra    unc4
  307. unc3:    move.b    (a1)+,(a0)+
  308. unc4:    dbf    d5,unc3
  309.     add.l    plane,a3
  310.     add.l    plane,a2
  311. unc5:    dbf    d6,unc2
  312. unc9:    move.l    picptr,a2
  313.     add.w    pic+pc_Width,a2        ;width
  314.     move.l    a2,picptr
  315.     subq.w    #1,pic+pc_H
  316.     beq    irts
  317.     dbf    d7,unc1
  318.  
  319.     bra    imgp3            ;next scan line
  320.  
  321.  
  322.  
  323. ***********************************************************
  324. ***                            ***
  325. ***********************************************************
  326. *
  327. *
  328. * IMG getnext byte from run length encoded? picture
  329. *   (something strange like it)
  330. *
  331. * rlecmd - 0 replicate zeros
  332. * rlecmd - 1 replicate ones
  333. * rlecmd - 2 from file
  334. *
  335. getnext:
  336.     subq.w    #1,rlecnt
  337.     bcc    more
  338. gn1:    clr.w    rlecmd            ;uncompressed
  339.     move.l    table,a0
  340.     move.l    f_get(a0),a0
  341.     jsr    (a0)
  342.     and.w    #$ff,d0
  343.     cmp.b    #$80,d0            ;bit string
  344.     beq    gn3
  345.     cmp.b    #0,d0            ;pattern
  346.     beq    gn4
  347.     tst.b    d0
  348.     bpl    gn2            ;zero replicate
  349.     move.w    #1,rlecmd        ; ones replicate
  350. gn2:    and.b    #$7f,d0
  351.     move.w    d0,rlecnt
  352.     bra    getnext
  353.  
  354. gn3:    move.l    table,a0
  355.     move.l    f_get(a0),a0
  356.     jsr    (a0)
  357.     and.w    #$ff,d0
  358.     move.w    d0,rlecnt
  359.     move.w    #2,rlecmd        ;bit string
  360.     bra    getnext
  361.  
  362.  
  363. gn4:    move.l    table,a0
  364.     move.l    f_get(a0),a0
  365.     jsr    (a0)
  366.     tst.b    d0
  367.     beq    gn5            ;vertical replication count
  368.     and.w    #$ff,d0
  369.     mulu    ptrn,d0
  370.     move.w    d0,rlecnt
  371.  
  372.     lea    pattern,a2
  373.     move.w    ptrn,d1
  374.     bra    gn4b
  375. gn4a:    move.l    a2,-(sp)
  376.     move.w    d1,-(sp)
  377.     move.l    table,a0
  378.     move.l    f_get(a0),a0
  379.     jsr    (a0)
  380.     move.w    (sp)+,d1
  381.     move.l    (sp)+,a2
  382.     move.b    d0,(a2)+
  383. gn4b:    dbf    d1,gn4a
  384.  
  385.     move.w    #3,rlecmd        ;pattern string
  386.     bra    getnext
  387.  
  388. gn5:    move.l    table,a0
  389.     move.l    f_get(a0),a0
  390.     jsr    (a0)
  391.     cmp.b    #$ff,d0
  392.     bne    getnext
  393.     move.l    table,a0
  394.     move.l    f_get(a0),a0
  395.     jsr    (a0)
  396.     and.w    #$ff,d0
  397.     move.b    d0,vrepcnt+1
  398.     clr.w    rlecnt
  399.     bra    getnext
  400. *
  401. *
  402. more:    cmp.w    #1,rlecmd        ;will take care of that for us.
  403.     beq    rep_1
  404.     bcs    rep_0
  405.     cmp.w    #3,rlecmd
  406.     beq    reppat
  407.     move.l    table,a0
  408.     move.l    f_get(a0),a0
  409.     jmp    (a0)
  410.  
  411. reppat:    move.w    ptrn,d1
  412.     lea    pattern,a0
  413.     move.b    (a0),d0
  414.     bra    repp2
  415. repp1:    move.b    1(a0),(a0)+
  416. repp2:    subq.w    #1,d1
  417.     bne    repp1
  418.     move.b    d0,(a0)
  419.     rts
  420.  
  421. rep_1:    move.w    #$ff,d0
  422.     rts
  423. rep_0:    moveq    #0,d0
  424.     rts
  425. *
  426.  
  427. Mulu1632:
  428.     move.l    table,a0
  429.     move.l    mulu1632(a0),a0
  430.     jmp    (a0)
  431.  
  432. Divu1648:
  433.     move.l    table,a0
  434.     move.l    divu1648(a0),a0
  435.     jmp    (a0)
  436.  
  437. *******************************************************************
  438. ***    called when the import routine choosen finds something    ***
  439. ***    wrong with the file loaded.                ***
  440. *******************************************************************
  441. notright:
  442.     rts
  443.  
  444. never:    moveq    #0,d0
  445.     rts
  446.  
  447. maybe:    moveq    #1,d0
  448.     rts
  449.  
  450. right:    moveq    #2,d0
  451.     rts
  452.  
  453. *************************************************************
  454. *************************************************************
  455.  SECTION img,DATA,PUBLIC
  456.  
  457. special:
  458.     dc.w    2
  459.     dc.l    spcl1,spcl2
  460.  
  461. name:    dc.b    "IMG Bit Image File v2.0.0",0
  462. spcl1:    dc.b    "Picture Window",0
  463. spcl2:    dc.b    "Object",0
  464.  
  465.  SECTION img,BSS,PUBLIC
  466. *
  467. bitpln:        ds.w    1
  468. colors:        ds.w    1
  469. wide:        ds.w    1
  470. dheight:    ds.w    1
  471. nxtscn:        ds.w    1
  472. pxh:        ds.w    1
  473. pxw:        ds.w    1
  474.  
  475. plane:    ds.l    1
  476. pptr:    ds.l    1
  477. tpptr:    ds.l    1
  478.  
  479. rlecmd:    ds.w    1
  480. rlecnt:    ds.w    1
  481. ptrn:    ds.w    1
  482. pattern:    ds.l    2
  483. vrepcnt:    ds.w    1
  484.  
  485. temp1:    ds.w    1
  486. temp2:    ds.w    1
  487. temp3:    ds.w    1
  488.  
  489.  
  490. object:    ds.w    ob_SizeOf/2
  491. array:    ds.w    3
  492. pic:    ds.w    pc_Sizeof/2
  493.  
  494. count:        ds.l    1
  495. len:        ds.l    1
  496. fhandle:    ds.w    1
  497.  
  498. picptr:        ds.l    1
  499.  
  500. *
  501.