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

  1.  
  2.  Include "equ.h"
  3.  Include "impequ.h"
  4.  
  5.  SECTION degasc,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,degasc
  19.  
  20.  
  21. * Degas
  22. *
  23. * the first 32k of the picture is in buff1
  24. *
  25. check:    move.l    table,a0
  26.     move.l    buff1(a0),a1
  27.     move.l    (a1),a1
  28.     move.w    (a1),d0
  29.     cmp.w    #$8000,d0
  30.     bcs    never
  31.     cmp.w    #$8003,d0
  32.     bcc    never
  33. ;    move.l    fname(a0),a1
  34. ;cdgs2:    move.b    (a1)+,d0
  35. ;    beq    maybe
  36. ;    cmp.b    #'.',d0
  37. ;    bne    cdgs2
  38. ;    cmp.b    #'P',(a1)+
  39. ;    bne    maybe
  40. ;    cmp.b    #'C',(a1)+
  41. ;    bne    maybe
  42. ;    cmp.b    #'1',(a1)
  43. ;    bcs    maybe
  44. ;    cmp.b    #'3',(a1)
  45. ;    bhi    maybe
  46.     moveq    #2,d0
  47. irts:    rts
  48. *
  49. *
  50. *
  51. degasc:    move.l    table,a0
  52.     move.l    f_openr(a0),a0
  53.     jsr    (a0)
  54.     beq    irts
  55.  
  56.     move.l    table,a0
  57.     move.l    spclnum(a0),a0
  58.     cmp.w    #1,(a0)
  59.     beq    impobj
  60. *
  61. *
  62. *
  63. imppic:    move.l    table,a0
  64.     move.l    p_open(a0),a0
  65.     jsr    (a0)
  66.     beq    irts
  67.  
  68.     bsr    getpicinfo
  69.  
  70.     move.l    table,a4
  71.     move.l    cwptr(a4),a4        ;ptr to window handle
  72.     move.l    (a4),a4            ;window handle
  73.     move.l    (a4),a4            ;ptr to window structure
  74.  
  75.     lea    pic,a0
  76.     move.w    pc_Type(a0),pi_Type(a4)
  77.     move.w    pc_SFreq(a0),pi_SFreq(a4)
  78.     move.w    pc_SAngle(a0),pi_SAngle(a4)
  79.     move.w    pc_SSpot(a0),pi_SSpot(a4)
  80.     move.l    pc_SMap(a0),pi_SMap(a4)
  81.     move.l    pc_SMap+4(a0),pi_SMap+4(a4)
  82.     move.w    pc_XDpi(a0),pi_XDpi(a4)
  83.     move.w    pc_YDpi(a0),pi_YDpi(a4)
  84.     move.w    pc_W(a0),pi_W(a4)
  85.     move.w    pc_H(a0),pi_H(a4)
  86.     move.w    pc_Width(a0),pi_Width(a4)
  87.     move.w    pc_BitPln(a0),pi_BitPln(a4)
  88.     move.w    pc_Palet(a0),pi_Palet(a4)
  89.  
  90.     move.w    pi_Palet(a4),d1
  91.     mulu    #pl_Sizeof,d1
  92.     move.w    pi_Width(a4),d0
  93.     mulu    pi_BitPln(a4),d0
  94.     mulu    pi_H(a4),d0
  95.     add.l    d1,d0
  96.  
  97.     clr.w    d1
  98.     clr.w    d2
  99.     move.l    table,a0
  100.     move.l    m_alloc(a0),a0
  101.     jsr    (a0)
  102.     beq    abortpic
  103.  
  104.     move.l    table,a3
  105.     move.l    cwptr(a3),a3
  106.     move.l    (a3),a3
  107.     move.l    (a3),a3
  108.     move.l    a0,pi_Ptr(a3)
  109.     move.l    (a0),a4
  110.     move.l    a4,picptr
  111.  
  112.     bsr    putcolor
  113.     bsr    putpic
  114.  
  115.     move.l    table,a0
  116.     move.l    p_close(a0),a0
  117.     jsr    (a0)
  118.  
  119.     move.l    table,a0
  120.     move.l    f_closer(a0),a0
  121.     jmp    (a0)
  122.  
  123. abortpic:
  124.     move.l    table,a0
  125.     move.l    p_abort(a0),a0
  126.     jsr    (a0)
  127.  
  128.     move.l    table,a0
  129.     move.l    f_closer(a0),a0
  130.     jmp    (a0)
  131.  
  132. *
  133. *
  134. *
  135. impobj:    move.l    table,a0
  136.     move.l    o_open(a0),a0
  137.     jsr    (a0)
  138.     beq    irts
  139.  
  140.     bsr    getpicinfo
  141.  
  142.     move.b    #tpic,object+ob_Type
  143.     clr.l    object+ob_Left
  144.     clr.l    object+ob_Top
  145.  
  146.     move.w    pic+pc_W,d1
  147.     move.l    #7200,d0
  148.     bsr    Mulu1632
  149.     move.w    pic+pc_XDpi,d2
  150.     bsr    Divu1648
  151.     move.l    d0,object+ob_Right
  152.  
  153.     move.w    pic+pc_H,d1
  154.     move.l    #7200,d0
  155.     bsr    Mulu1632
  156.     move.w    pic+pc_YDpi,d2
  157.     bsr    Divu1648
  158.     move.l    d0,object+ob_Bottom
  159.  
  160.     clr.b    object+ob_Flag
  161.     clr.w    object+ob_Slant
  162.     clr.w    object+ob_Twist
  163.     move.w    #50,object+ob_LWidth        ;1 point line
  164.     clr.b    object+ob_LType            ;no line
  165.     move.b    #1,object+ob_LColor        ;black line
  166.     clr.b    object+ob_FType            ;no fill
  167.     move.b    #1,object+ob_FColor        ;black fill
  168.     clr.b    object+ob_LBegin
  169.     clr.b    object+ob_LEnd
  170.     move.w    #900,object+ob_HStandOff    ;1/8 inch
  171.     move.w    #900,object+ob_VStandOff    ;1/8 inch
  172. *
  173. *
  174.     move.l    table,a1
  175.     move.l    o_obj(a1),a1
  176.     lea    object,a0
  177.     jsr    (a1)
  178.     beq    abortobj
  179.  
  180.     move.w    pic+pc_Width,d0
  181.     mulu    pic+pc_BitPln,d0
  182.     mulu    pic+pc_H,d0
  183.     move.w    pic+pc_Palet,d1
  184.     mulu    #pl_Sizeof,d1
  185.     add.l    d1,d0
  186.     add.l    #pc_Sizeof,d0
  187.  
  188.     move.l    table,a0
  189.     move.l    o_malloc(a0),a0
  190.     jsr    (a0)
  191.     beq    abortobj
  192.  
  193.     lea    pic,a1
  194.     clr.l    pc_DPtr(a1)
  195.     clr.w    pc_DScale(a1)
  196.     move.w    pc_Palet(a1),d0
  197.     mulu    #pl_Sizeof,d0
  198.     add.l    #pc_Sizeof,d0
  199.     move.l    d0,pc_Ptr(a1)
  200.  
  201.     move.w    #pc_Sizeof/2-1,d0
  202. oppic1:    move.w    (a1)+,(a0)+
  203.     dbf    d0,oppic1
  204.     move.l    a0,picptr
  205.  
  206.     bsr    putcolor
  207.     bsr    putpic
  208.  
  209.     move.l    table,a0        ;end of input file.
  210.     move.l    o_close(a0),a0        ; close and flush buffer
  211.     jsr    (a0)
  212.  
  213.     move.l    table,a0
  214.     move.l    f_closer(a0),a0
  215.     jmp    (a0)
  216.  
  217.  
  218. abortobj:
  219.     move.l    table,a0        ;end of input file.
  220.     move.l    o_abort(a0),a0        ; close and flush buffer
  221.     jsr    (a0)
  222.  
  223.     move.l    table,a0
  224.     move.l    f_closer(a0),a0
  225.     jmp    (a0)
  226.  
  227. *
  228. *
  229. *
  230. getpicinfo:
  231.     move.l    table,a0
  232.     move.l    f_getw(a0),a0
  233.     jsr    (a0)
  234.  
  235.     bclr    #15,d0
  236.     lea    dgstbl,a0
  237.     lsl.w    #2,d0
  238.     move.l    0(a0,d0.w),a0
  239.  
  240.     lea    pic,a4
  241.  
  242.     move.w    (a0)+,pc_Palet(a4)    ;number of color pallet entries
  243.     move.w    (a0)+,pc_BitPln(a4)
  244.     move.w    (a0)+,pc_W(a4)
  245.     move.w    (a0)+,pc_H(a4)
  246.     move.w    (a0)+,pc_Width(a4)
  247.     move.w    (a0)+,pc_XDpi(a4)
  248.     move.w    (a0),pc_YDpi(a4)
  249.  
  250.     clr.w    pc_Type(a4)
  251.     move.w    #-1,pc_SFreq(a4)
  252.     move.w    #-1,pc_SAngle(a4)
  253.     clr.w    pc_SSpot(a4)
  254.     clr.l    pc_SMap(a4)
  255.     clr.l    pc_SMap+4(a4)
  256.     rts
  257.  
  258.  
  259. putcolor:
  260.     move.w    pic+pc_Palet,temp1        ;# of colors in bit map
  261. dgsp2:    move.l    table,a0
  262.     move.l    f_getw(a0),a0
  263.     jsr    (a0)
  264.  
  265.     move.w    d0,d1
  266.     move.w    d0,d2
  267.     lsr.w    #8,d0
  268.     lsr.w    #4,d1
  269.     and.w    #%111,d0        ;red
  270.     and.w    #%111,d1        ;green
  271.     and.w    #%111,d2        ;blue
  272.     mulu    #65535,d0
  273.     mulu    #65535,d1
  274.     mulu    #65535,d2
  275.     divu    #7,d0
  276.     divu    #7,d1
  277.     divu    #7,d2
  278.  
  279.     move.l    picptr,a4
  280.     move.w    d0,(a4)+        ;red
  281.     move.w    d1,(a4)+        ;green
  282.     move.w    d2,(a4)+        ;blue
  283.  
  284.     mulu    #19661,d0
  285.     mulu    #38666,d1
  286.     mulu    #7209,d2
  287.     add.l    d1,d0
  288.     add.l    d2,d0
  289.     swap    d0
  290.     cmp.w    #$8000,d0
  291.     bcc    pcwhite
  292.     moveq    #1,d0
  293.     bra    pcblack
  294. pcwhite:
  295.     moveq    #0,d0
  296. pcblack:
  297.     move.w    d0,(a4)+
  298.     move.l    a4,picptr
  299.  
  300.     subq.w    #1,temp1
  301.     bne    dgsp2
  302.  
  303.     move.l    #16,d0            ;skip over unused color pallete entries
  304.     sub.w    pic+pc_Palet,d0
  305.     lsl.w    #1,d0
  306.     move.l    table,a0
  307.     move.l    f_skip(a0),a0
  308.     jmp    (a0)
  309. *
  310. *
  311.  
  312. putpic:
  313.     move.w    pic+pc_Width,d0
  314.     mulu    pic+pc_H,d0
  315.     move.l    d0,plane
  316.  
  317. dgsuc1:    move.l    picptr,tpptr
  318.     move.w    pic+pc_BitPln,temp2        ;do for each bitplane
  319.  
  320. dgsuc2:    move.w    pic+pc_Width,temp3
  321.     move.l    tpptr,a0
  322.     clr.w    rlecnt            ;current rle count
  323.  
  324. dgsuc3:    move.l    a0,-(sp)
  325.     jsr    getnext
  326.     move.l    (sp)+,a0
  327.     move.b    d0,(a0)+
  328.     subq.w    #1,temp3        ;next byte in row
  329.     bne    dgsuc3
  330.  
  331.     move.l    plane,d0
  332.     add.l    d0,tpptr
  333.     subq.w    #1,temp2
  334.     bne    dgsuc2            ;next bitplane row
  335.  
  336.     move.l    picptr,a0
  337.     add.w    pic+pc_Width,a0        ;width
  338.     move.l    a0,picptr
  339.     subq.w    #1,pic+pc_H
  340.     bne    dgsuc1            ;next row
  341.     rts
  342. *
  343. *
  344. *
  345. * Degas Compressed getnext byte from run length encoded picture
  346. *
  347. *
  348. getnext:
  349.     subq.w    #1,rlecnt
  350.     bcc    more
  351. gn1:    clr.w    rlecmd            ;uncompressed
  352.     move.l    table,a0
  353.     move.l    f_get(a0),a0
  354.     jsr    (a0)
  355.     and.w    #$ff,d0
  356.     tst.b    d0
  357.     bpl    gn2            ;the next bytes are not repeats
  358.     cmp.b    #-128,d0
  359.     beq    gn1
  360.     neg.b    d0
  361.     move.w    d0,rlecnt        ;repeat count
  362.     move.w    #1,rlecmd        ;repeat command
  363.     move.l    table,a0
  364.     move.l    f_get(a0),a0
  365.     jsr    (a0)
  366.     move.b    d0,rlerep
  367.     rts
  368.  
  369. gn2:    move.w    d0,rlecnt        ;we should add one to d2, but the dbf
  370. more:    tst.w    rlecmd            ;will take care of that for us.
  371.     bne    rle
  372.     move.l    table,a0
  373.     move.l    f_get(a0),a0
  374.     jmp    (a0)
  375.  
  376. rle:    move.b    rlerep,d0
  377.     rts
  378.  
  379.  
  380. Mulu1632:
  381.     move.l    table,a0
  382.     move.l    mulu1632(a0),a0
  383.     jmp    (a0)
  384.  
  385. Divu1648:
  386.     move.l    table,a0
  387.     move.l    divu1648(a0),a0
  388.     jmp    (a0)
  389.  
  390. *******************************************************************
  391. ***    called when the import routine choosen finds something    ***
  392. ***    wrong with the file loaded.                ***
  393. *******************************************************************
  394. notright:
  395.     rts
  396.  
  397. never:    moveq    #0,d0
  398.     rts
  399.  
  400. maybe:    moveq    #1,d0
  401.     rts
  402.  
  403. right:    moveq    #2,d0
  404.     rts
  405.  
  406. *************************************************************
  407. *************************************************************
  408.  
  409.  SECTION degasc,DATA,PUBLIC
  410. dgstbl:    dc.l    dgslow,dgsmed,dgshi
  411. dgslow:    dc.w    16,4,320,200,40,36,36
  412. dgsmed:    dc.w    4,2,640,200,80,72,36
  413. dgshi:    dc.w    2,1,640,400,80,77,77
  414.  
  415.  
  416. special:
  417.     dc.w    2
  418.     dc.l    spcl1,spcl2
  419.  
  420. *
  421. *
  422. *
  423. name:    dc.b    "Degas Compressed v2.1.0",0
  424.  
  425. spcl1:    dc.b    "Picture Window",0
  426. spcl2:    dc.b    "Object",0
  427.  
  428. *
  429.  SECTION degasc,BSS,PUBLIC
  430. *
  431. temp1:    ds.w    1
  432. temp2:    ds.w    1
  433. temp3:    ds.w    1
  434.  
  435.  
  436. rlecmd:    ds.w    1
  437. rlecnt:    ds.w    1
  438. rlerep:    ds.b    1
  439.     ds.b    1
  440.  
  441. plane:    ds.l    1
  442. tpptr:    ds.l    1
  443. picptr:    ds.l    1
  444.  
  445. object:    ds.w    ob_SizeOf/2
  446. pic:    ds.w    pc_Sizeof/2
  447.