home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / c / showpi1+.s < prev    next >
Text File  |  1995-03-01  |  16KB  |  890 lines

  1. exec_i        = 1
  2. graphics_i    = 1
  3. intuition_i    = 1
  4. arp_i        = 1
  5.  
  6.         INCDIR    "DH0:Source/includes/"
  7.         INCLUDE    "includes.i"
  8.  
  9.  
  10. begin:        bra.s    .real
  11.  
  12.         dc.b    "This utilitie was coded by: HANZY THE RIPPER",10
  13.         dc.b    "Copyright Eternal inc.",10,0
  14.         even
  15.  
  16.  
  17.     .real:    move.l    a7,stack
  18.         move.l    a0,command
  19.         move.w    d0,cmdlen
  20.         move.l    4.W,a6
  21.         sub.l    a1,a1
  22.         jsr    findtask(a6)
  23.         move.l    d0,task
  24.  
  25.         move.l    d0,a2
  26.         st    from_wb
  27.         tst.l    proc.cli(a2)
  28.         beq.s    .from_WB
  29.  
  30.         **** van de CLI ****
  31.  
  32.         sf    from_wb
  33.         move.l    command(pc),a0
  34.         move.w    cmdlen(pc),d0
  35.         clr.b    -1(a0,d0.W)
  36.         bra.s    .domain
  37.  
  38.  
  39. .from_WB:    lea    proc.msgport(a2),a0
  40.         jsr    waitport(a6)
  41.         lea    proc.msgport(a2),a0
  42.         jsr    getmsg(a6)
  43.         move.l    d0,wb_msg
  44.  
  45. .domain:    bsr.s    start
  46.  
  47.         tst.b    from_wb
  48.         beq.s    .no
  49.  
  50.         move.l    4.W,a6
  51.         move.l    wb_msg(pc),d0
  52.         beq.s    .no
  53.         move.l    d0,a1
  54.         jsr    replymsg(a6)
  55.  
  56.     .no:    move.l    stack(pc),a7
  57.         moveq    #0,d0
  58.         rts
  59.  
  60. stack:        dc.l    0
  61. command:    dc.l    0
  62. cmdlen:        dc.w    0
  63. task:        dc.l    0
  64. from_wb:    dc.w    0
  65. wb_msg:        dc.l    0
  66.  
  67.  
  68.  
  69. START:        move.l    4.W,a6
  70.         lea    arpname(pc),a1
  71.         jsr    openoldlibrary(a6)
  72.         move.l    d0,arp
  73.         bne.s    .ok
  74.     .err:    rts
  75.     .ok:    move.l    d0,a0
  76.         lea    48(a0),a1
  77.         move.l    (a1)+,dos
  78.         move.l    (a1)+,gfx
  79.         move.l    (a1),int
  80.  
  81.         move.l    command,a0
  82.  
  83.         sf    amiga
  84. .nextcommand:    bsr.w    skipspace
  85.         move.b    (a0),d0
  86.         cmp.b    #10,d0
  87.         beq.s    .get
  88.         tst.b    d0
  89.         bne.s    .still_ok
  90.  
  91.     .get:    bsr.w    getname
  92.         tst.l    d0
  93.         beq.w    .done
  94.         bra.s    .do_it
  95.  
  96.  
  97. .still_ok:    cmp.b    #"-",d0
  98.         bne.s    .verder
  99.         cmp.b    #"a",1(a0)
  100.         bne.s    .noABOUT
  101.         addq.w    #2,a0
  102.         bsr.w    skipspace
  103.         st    amiga
  104.         bra.s    .verder
  105.  
  106. .noABOUT:    cmp.b    #"h",1(a0)
  107.         bne.s    .noHELP
  108.         bsr.w    help
  109.         bra.w    .done
  110.  
  111. .noHELP:    cmp.b    #"n",1(a0)
  112.         bne.s    .verder
  113.         st    autoNTSC
  114.         addq.w    #2,a0
  115.         bra.s    .nextcommand
  116.         
  117.  
  118. .verder:    lea    path(pc),a2
  119.         move.l    a0,a1
  120.         bsr.w    concat
  121.         clr.b    (a2)
  122.  
  123. .do_it:        move.l    arp(pc),a6
  124.         move.l    #path,d1
  125.         move.l    #oldfile,d2
  126.         jsr    open(a6)
  127.         move.l    d0,filehd
  128.         bne.s    .open
  129.         lea    cantopen(pc),a1
  130.         jsr    puts(a6)
  131.         bra.w    .done
  132.  
  133. .open:        bsr.w    getfilelen
  134.         move.l    filelen(pc),d0
  135.         divu    #160,d0
  136.         swap    d0
  137.         cmp.w    #34,d0
  138.         beq.w    .isPI1
  139.         cmp.w    #66,d0
  140.         beq.w    .isPI1
  141.  
  142.         move.l    arp(pc),a6
  143.         lea    linebuffer,a5
  144.         move.l    filehd(pc),d1
  145.         move.l    a5,d2
  146.         moveq    #2,d3
  147.         jsr    read(a6)
  148.  
  149.         cmp.w    #$8000,(a5)        ;PC1
  150.         bne.w    .noPC1
  151.  
  152.         ***** plaatje is PC1 formaat *****
  153.  
  154.         bsr.w    loadPC1
  155.         bra.w    .done
  156.  
  157.  
  158.     .noPC1:    cmp.b    #$0a,(a5)
  159.         bne.s    .noPCX
  160.         bsr.w    loadPCX
  161.         bra.w    .done
  162.  
  163.     .noPCX:    bsr.w    closefile
  164.         lea    nopi1(pc),a1
  165.         jsr    puts(a6)
  166.         bra.w    .done
  167.  
  168. .isPI1:        swap    d0
  169.  
  170.         tst.b    autoNTSC
  171.         beq.s    .noAUTO
  172.         cmp.w    #230,d0
  173.         bgt.s    .noNTSC
  174.         move.w    #0,$dff1dc
  175.         bra.s    .setit
  176.  
  177.     .noNTSC:move.w    #32,$dff1dc
  178.  
  179.     .noAUTO:cmp.w    #256,d0
  180.         ble.s    .setit
  181.         move.w    #256,d0
  182.     .setit:    move.w    d0,screenhoog
  183.  
  184.         bsr.w    openSC
  185.  
  186.         tst.l    screenhd
  187.         bne.s    .screen
  188.         bsr.w    closefile
  189.         move.l    arp(pc),a6
  190.         lea    noscreen(pc),a1
  191.         jsr    puts(a6)
  192.         bra.w    .done
  193.  
  194. .screen:    move.l    arp(pc),a6
  195.         move.l    filehd(pc),d1
  196.         move.l    #colormap-2,d2
  197.         moveq    #32+2,d3
  198.         jsr    read(a6)
  199.  
  200.         tst.b    amiga
  201.         bne.s    .useamiga
  202.  
  203.         moveq    #16-2,d2
  204.         lea    colormap(pc),a0
  205.         move.l    a0,a1
  206. .tartaari:    move.w    (a0)+,d0
  207.         move.w    d0,d1
  208.         and.w    #$f00,d0
  209.         add.w    d0,d0
  210.         and.w    #$f00,d0
  211.         move.w    d0,(a1)
  212.         move.w    d1,d0
  213.         and.w    #$0f0,d0
  214.         add.w    d0,d0
  215.         and.w    #$0f0,d0
  216.         or.w    d0,(a1)
  217.         move.w    d1,d0
  218.         and.w    #$00f,d0
  219.         add.w    d0,d0
  220.         and.w    #$00f,d0
  221.         or.w    d0,(a1)+
  222.         dbf    d2,.tartaari
  223.  
  224. .useamiga:    move.l    gfx(pc),a6
  225.         move.l    screenhd(pc),a0
  226.         move.l    a0,a4
  227.         add.w    #44,a0            ;A0 = pointer viewport
  228.         lea    colormap,a1
  229.         moveq    #16,d0
  230.         jsr    loadrgb4(a6)        ;set colors
  231.  
  232.         move.l    a4,a0
  233.         add.w    #184+8,a0
  234.         movem.l    (a0)+,a1-a4        ;get plane adresses
  235.  
  236.         move.l    arp(pc),a6
  237.         move.w    screenhoog(pc),d6
  238.         subq.w    #1,d6
  239.  
  240.     .Y_lus:    movem.l    a1-a4,-(a7)
  241.         lea    linebuffer,a5
  242.         move.l    filehd(pc),d1
  243.         move.l    a5,d2
  244.         move.l    #160,d3
  245.         jsr    read(a6)        ;lees een beeldlijn
  246.         movem.l    (a7)+,a1-a4
  247.  
  248.         moveq    #20-1,d0
  249.      .cp:    move.w    0(a5),(a1)+
  250.          move.w    2(a5),(a2)+
  251.         move.w    4(a5),(a3)+
  252.         move.w    6(a5),(a4)+
  253.         addq.w    #8,a5
  254.         dbf    d0,.cp
  255.         dbf    d6,.y_lus
  256.         bsr.s    closefile
  257.  
  258.         bsr.w    pause
  259.         bsr.w    closeSC
  260.  
  261. .done:        tst.b    AutoNTSC
  262.         beq.s    .noauto2
  263.         move.w    #32,$dff1dc
  264.     .noauto2:
  265.         
  266.         move.l    4.W,a6
  267.         move.l    arp(pc),d0
  268.         beq.s    .noarp
  269.         move.l    d0,a1
  270.         jsr    closelibrary(a6)
  271.     .noarp:    moveq    #0,d0
  272.         rts
  273.  
  274.  
  275.  
  276. skipspace:    move.b    (a0),d0
  277.         beq.s    .err
  278.         cmp.b    #" ",d0
  279.         bne.s    .err
  280.         addq.w    #1,a0
  281.         bra.s    skipspace
  282.     .err:    
  283.         rts
  284.  
  285. closefile:    move.l    arp(pc),a6
  286.         move.l    filehd(pc),d1
  287.         beq.s    .closed
  288.         jmp    close(a6)
  289. .closed:    rts
  290.  
  291. getfilelen:    move.l    arp(pc),a6
  292.         move.l    filehd(pc),d1
  293.         moveq    #0,d2
  294.         moveq    #1,d3
  295.         jsr    seek(a6)
  296.         move.l    filehd(pc),d1
  297.         moveq    #0,d2
  298.         moveq    #-1,d3
  299.         jsr    seek(a6)
  300.         move.l    d0,filelen
  301.         rts
  302.  
  303. getname:    ;D0 = pointer naar naam
  304.         ;     of 0, bij een fout
  305.  
  306.         move.l    arp(pc),a6
  307.         lea    filereq(pc),a0
  308.         jsr    filerequest(a6)
  309.         move.l    d0,namead
  310.         beq.s    .err
  311.         move.l    d0,a0
  312.  
  313.         lea    path(pc),a2
  314.         lea    dirname(pc),a1
  315.         bsr.s    concat
  316.         cmp.b    #":",-1(a2)
  317.         beq.s    .no
  318.         move.b    #"/",(a2)+
  319.     .no:    move.l    a0,a1
  320.         bsr.s    concat
  321.         clr.b    (a2)
  322.         move.l    #path,d0
  323.     .err:    rts        
  324.  
  325. concat:        ;string a2 := string a2 + string a1 
  326.  
  327.         move.b    (a1)+,d0
  328.         beq.s    .nx
  329.         move.b    d0,(a2)+
  330.         bra.s    concat
  331.     .nx:    rts
  332.  
  333. namead:        dc.l    0        
  334.  
  335. putmidden:    move.l    a0,a1        ;pointer new window
  336.         movem.w    4(a1),d2/d3    ;breedte,hoogte file req
  337.  
  338.         move.l    int(pc),a0
  339.         move.l    56(a0),30(a1)    ;active screen
  340.         move.w    #15,46(a1)    ;custom
  341.         move.l    52(a0),d0    ;active window
  342.         beq.s    .err
  343.         move.l    d0,a0
  344.         movem.w     8(a0),d0/d1    ;breedte,hoogte window
  345.         sub.w    d2,d0
  346.         sub.w    d3,d1
  347.         lsr.w    #1,d0
  348.         lsr.w    #1,d1
  349.         movem.w    d0/d1,(a1)    ;positie filereq
  350.     .err:    rts
  351.  
  352. help:        move.l    arp(pc),a6
  353.         lea    about(pc),a1
  354.         jmp    puts(a6)
  355.  
  356.  
  357. arpname:    dc.b    "arp.library",0
  358. titel:        dc.b    "Select PI1/PC1/PCX picture",0
  359. cantopen:    dc.b    "?ERROR, Can't open file.",0
  360. noPI1:        dc.b    "?ERROR, This is no PI1/PC1/PCX picture.",0
  361. noscreen:    dc.b    "?ERROR, Can't open screen.",0
  362.  
  363. about:
  364.  dc.b    "ShowPI1 display PI1/PC1/PCX pictures ",10,10
  365.  dc.b    "coded by: Hans v/d Munckhof",10
  366.  dc.b    "       5753 CW DEURNE HOLLAND",10
  367.  dc.b    "       LEEMBAAN 13",10
  368.  dc.b    10
  369.  dc.b    "Usage: ShowPI1 [-a] [path+filename]",10
  370.  dc.b    10
  371.  dc.b    "OPTIONS: -a   force   Amiga Colorpalette (PI1/PC1)",10
  372.  dc.b    "      -n   selects NTSC/PAL depending op height (PI1/PC1)",10
  373.  dc.b    10,0
  374.  
  375.  
  376.         even
  377. arp:        dc.l    0
  378. int:        dc.l    0
  379. dos:        dc.l    0
  380. gfx:        dc.l    0
  381. amiga:        dc.w    0
  382. autoNTSC:    dc.w    0
  383. filehd:        dc.l    0
  384. filelen:    dc.l    0
  385. windowhd:    dc.l    0
  386.  
  387. filereq:    dc.l    titel
  388.         dc.l    filename    ;buffer for filename (32+1 byte)
  389.         dc.l    dirname        ;buffer for dirname  (32+1 byte)
  390.         dc.l    0        ;window ptr
  391.         dc.b    %00001000    ;function bits
  392.         dc.b    0        ;unused
  393.         dc.l    putmidden    ;user function
  394.         dc.l    0        ;unused
  395.  
  396.  
  397. newscreen:    dc.w    0,0        ;X/Y pos
  398. screenbreed:    dc.w    320        ;breedte
  399. screenhoog:    dc.w    0        ;hoogte
  400. screendiep:    dc.w    4        ;aantal planes
  401.         dc.b    1,0        ;pens
  402. viewmodes:    dc.w    0        ;viewmodes
  403.         dc.w    15        ;type
  404.         dc.l    0        ;pointer font
  405.         dc.l    path        ;pointer titel
  406.         dc.l    0        ;pointer gadgets
  407.         dc.l    0        ;pointer bitmap
  408.  
  409.  
  410. newwindow:    dc.w    0,0        ;top/left
  411.         dc.w    0,0        ;width/height
  412.         dc.b    2,1        ;detail/blok pen
  413.         dc.l    $0008        ;IDCMPFLAGS button
  414.         dc.l    $0800!$1000    ;flags
  415.         dc.l    0,0        ;gadget/checkmark
  416.         dc.l    0        ;titel
  417. screenhd:    dc.l    0        ;custom screen
  418.         dc.l    0        ;custom bitmap
  419.         dc.w    0,0,0,0        ;min/max size
  420.         dc.w    15        ;custom
  421.  
  422. dirname:    blk.b    33,0
  423. filename:    blk.b    33,0
  424.         dc.b    ":"        ;':' MOET !!!!
  425. path:        blk.b    65,0
  426.         dc.w    0
  427. colormap:    blk.w    16,0
  428. linebuffer:    blk.b    160,0
  429. filemem:    dc.l    0,0
  430. bitmapmem:    dc.l    0        ;adres  van ongepackte bitmap
  431. bitmapsize:    dc.l    0        ;lengte    van ongepackte bitmap
  432. planes:        dc.l    0,0,0,0,0,0,0
  433.  
  434.  
  435.  
  436. loadPC1:    move.l    arp(pc),a6
  437.         move.l    filehd(pc),d1
  438.         moveq    #0,d2
  439.         moveq    #-1,d3
  440.         jsr    seek(a6)        ;naar begin van file
  441.  
  442.         move.l    4.W,a6
  443.         move.l    filelen(pc),d0
  444.         moveq    #1,d1            ;PUBLIC
  445.         jsr    allocmem(a6)
  446.         move.l    d0,d7
  447.         bne.s    .memokay
  448.         bsr.w    closefile
  449.         moveq    #0,d0            ;error !
  450.         rts
  451.  
  452. .memokay:    move.l    arp(pc),a6
  453.         move.l    filehd(pc),d1
  454.         move.l    d7,d2
  455.         move.l    filelen(pc),d3
  456.         jsr    read(a6)
  457.         bsr.w    closefile
  458.         move.w    #200,screenhoog
  459.  
  460.         move.l    4.W,a6
  461.         move.l    #160*200,d0
  462.         moveq    #MEMF_PUBLIC,d1        ;Public
  463.         jsr    allocmem(a6)
  464.         move.l    d0,d6
  465.         bne.s    .mem_ok2
  466.  
  467.         move.l    d7,a1
  468.         move.l    filelen(pc),d0
  469.         jsr    freemem(a6)
  470.         moveq    #0,d0            ;error !
  471.         rts        
  472.  
  473.     .mem_ok2:
  474.         movem.l    d6/d7,-(a7)
  475.         move.l    d7,a0            ;buffer gepacked plaatje
  476.         move.l    d6,a1            ;fastmem bufer
  477.         lea    colormap,a2        ;colormap
  478.         bsr.w    convertdegas        ;depack
  479.         movem.l    (a7)+,d6/d7
  480.  
  481.         move.l    4.W,a6
  482.         move.l    d7,a1
  483.         move.l    filelen(pc),d0
  484.         jsr    freemem(a6)        ;Free filebuffer
  485.  
  486.         bsr.w    openSC
  487.         tst.l    screenHD
  488.         beq.s    .freebuf
  489.         move.l    gfx(pc),a6
  490.         move.l    screenhd(pc),a0
  491.         move.l    a0,a4
  492.         add.w    #44,a0            ;A0 = pointer viewport
  493.         lea    colormap,a1
  494.         moveq    #16,d0
  495.         jsr    loadrgb4(a6)        ;set colors
  496.         move.l    a4,a0
  497.         add.w    #184+8,a0
  498.         movem.l    (a0)+,a1-a4        ;get plane adresses
  499.  
  500.         move.l    d6,a0
  501.         move.w    #200-1,d1
  502. .Y_lus:        moveq    #(40/4)-1,d0
  503.     .lus:    move.l    0*40(a0),(a1)+        ;plane1
  504.         move.l    1*40(a0),(a2)+        ;plane2
  505.         move.l    2*40(a0),(a3)+        ;plane3
  506.         move.l    3*40(a0),(a4)+        ;plane4
  507.         addq.w    #4,a0
  508.         dbf    d0,.lus
  509.         add.w    #160-40,a0
  510.         dbf    d1,.Y_lus
  511.         tst.b    autoNTSC
  512.         beq.s    .freeBUf
  513.         move.w    #32,$dff1dc
  514.  
  515.     .freebuf:move.l    4.W,a6
  516.         move.l    d6,a1
  517.         move.l    #200*160,d0
  518.         jsr    freemem(a6)
  519.  
  520.         bsr.w    pause
  521.  
  522.         bsr.w    closeSC
  523.         moveq    #-1,d0
  524.         rts
  525.  
  526.  
  527.  
  528.  
  529.  
  530. loadPCX:    move.l    arp(pc),a6
  531.         move.l    filehd(pc),d1
  532.         moveq    #0,d2
  533.         moveq    #-1,d3
  534.         jsr    seek(a6)        ;naar begin van file
  535.  
  536.         move.l    4.W,a6
  537.         move.l    filelen(pc),d0
  538.         moveq    #1,d1            ;PUBLIC
  539.         jsr    allocmem(a6)
  540.         move.l    d0,d7
  541.         bne.s    .memokay
  542.         bsr.w    closefile
  543.         moveq    #0,d0            ;error !
  544.         rts
  545.  
  546. .memokay:    move.l    d7,filemem
  547.         move.l    arp(pc),a6
  548.         move.l    filehd(pc),d1
  549.         move.l    d7,d2
  550.         move.l    filelen(pc),d3
  551.         jsr    read(a6)
  552.         bsr.w    closefile
  553.  
  554.         move.l    filemem(pc),a0
  555.         movem.w    12(a0),d2/d3
  556.         ror.w    #8,d2            ;breedte
  557.         ror.w    #8,d3            ;hoogte
  558.         and.l    #$ffff,d2
  559.         and.l    #$ffff,d3
  560.         move.b    $41(a0),d4
  561.         and.w    #$00ff,d4
  562.         cmp.w    #4,d4            ;aantal planes
  563.         bgt.s    .freefileBUFF        ;max 4 bij PCX
  564.  
  565.         cmp.w    #368,d2
  566.         blt.s    .lores
  567.         ori.w    #$8000,viewmodes    ;hires aan        
  568.     .lores:    cmp.w    #267,d3
  569.         blt.s    .nolace
  570.         or.w    #$0004,viewmodes    ;lace aan
  571.     .nolace:move.w    d2,screenbreed
  572.         move.w    d3,screenhoog
  573.         move.w    d4,screendiep
  574.  
  575.         move.w    d2,d0
  576.         mulu    d3,d0
  577.         mulu    d4,d0
  578.         move.l    d0,bitmapsize        ;aantal bytes
  579.  
  580.         move.l    4.W,a6
  581.         moveq    #MEMF_public,d1
  582.         jsr    allocmem(a6)
  583.         move.l    d0,bitmapmem
  584.         bne.s    .depMEMok
  585.  
  586. .freeFILEbuff:    move.l    filemem(pc),a1
  587.         move.l    filelen(pc),d0
  588.         move.l    4.W,a6
  589.         jmp    freemem(a6)
  590.  
  591.  
  592. .depMEMok:    move.l    bitmapmem(pc),a1
  593.         move.l    filemem(pc),a0
  594.         bsr.w    convertPCX
  595.  
  596.         move.l    4.W,a6
  597.         move.l    filemem(pc),a1
  598.         move.l    filelen(pc),d0
  599.         jsr    freemem(a6)        ;Free filebuffer
  600.  
  601.         bsr.w    openSC
  602.         tst.l    screenhd
  603.         beq.s    .freebuf
  604.         move.l    gfx(pc),a6
  605.         move.l    screenhd(pc),a0
  606.         move.l    a0,a4
  607.         add.w    #44,a0            ;A0 = pointer viewport
  608.         lea    colormap,a1
  609.         moveq    #16,d0
  610.         jsr    loadrgb4(a6)        ;set colors
  611.  
  612.         move.l    a4,a0
  613.         add.w    #184+8,a0
  614.         lea    planes,a1
  615.         move.l    (a0)+,(a1)+
  616.         move.l    (a0)+,(a1)+
  617.         move.l    (a0)+,(a1)+
  618.         move.l    (a0)+,(a1)+
  619.         move.l    (a0)+,(a1)+
  620.  
  621.         move.l    bitmapmem,a0
  622.         move.w    PCX_hoogte(pc),d2
  623.         subq.w    #1,d2
  624. .nextline:    move.w    PCX_nrplanes(pc),d0
  625.         subq.w    #1,d0
  626.         lea    planes,a5
  627. .nextplane:    move.l    (a5),a1
  628.         move.w    PCX_byteperrow(pc),d1
  629.         subq.w    #1,d1
  630.     .cp_l:    move.b    (a0)+,(a1)+
  631.         dbf    d1,.cp_l
  632.         move.l    a1,(a5)+
  633.         dbf    d0,.nextplane
  634.         dbf    d2,.nextline
  635.  
  636.         bsr.s    pause
  637.  
  638.     .freebuf:move.l    bitmapmem(pc),a1
  639.         move.l    bitmapsize(pc),d0
  640.         move.l    4.W,a6
  641.         jsr    freemem(a6)
  642.         bsr.s    closeSC
  643. .done        rts
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650. openSC:        move.l    int(pc),a6
  651.         lea    newscreen(pc),a0
  652.         jsr    openscreen(a6)
  653.         move.l    d0,screenhd
  654.         beq.s    .no
  655.         lea    newscreen(pc),a1
  656.         lea    newwindow(pc),a0
  657.         move.l    4(a1),4(a0)
  658.         jsr    openwindow(a6)
  659.         move.l    d0,windowhd
  660.         bne.s    .no
  661.         move.l    screenhd(pc),a0
  662.         jsr    closescreen(a6)
  663.         clr.l    screenhd
  664. .no:        rts
  665.  
  666.  
  667. closeSC:    move.l    int(pc),a6
  668.         move.l    windowhd(pc),d0
  669.         beq.s    .no
  670.         move.l    d0,a0
  671.         jsr    closewindow(a6)
  672.         move.l    screenhd(pc),a0
  673.         jmp    closescreen(a6)
  674.  
  675. .no:        rts
  676.  
  677.  
  678. ww.userport    = $56
  679. im.class    = $14
  680.  
  681. pause:        move.l    4.W,a6
  682. .loop:        move.l    windowhd(pc),a0
  683.         move.l    ww.userport(a0),a0
  684.         jsr    waitport(a6)
  685.         move.l    windowhd(pc),a0
  686.         move.l    ww.userport(a0),a0
  687.         jsr    getmsg(a6)
  688.         tst.l    d0
  689.         beq.s    .loop
  690.         move.l    d0,a1
  691.         move.l    im.class(a1),d2
  692.         jsr    replymsg(a6)
  693.         cmp.l    #$0008,d2
  694.         bne.s    .loop
  695.         rts
  696.  
  697.  
  698. ;########################################
  699. ;#                    #
  700. ;# Degas_Elite unpack routine        #
  701. ;# converts Atari_ST graphics to    #
  702. ;# interleaved bitmap            #
  703. ;#                     #
  704. ;# Coded by: HANZY THE RIPPER        #
  705. ;#        Copyright 28-09-91 XenoGamy    #
  706. ;########################################
  707.  
  708. ;    --> A1 = Dest. adres
  709. ;    --> A0 = Source degas_elite
  710. ;    <-- D0 = 0, all okay D0 = -1, wrong format !
  711. ;
  712. ;    note: needs a buffer named colormap
  713. ;
  714. ;          colormap:        blk.w    16,0
  715.  
  716. convertdegas:    cmp.w    #$8000,(a0)+
  717.         beq.s    .okay
  718.         moveq    #-1,d0
  719.         rts
  720. .okay:
  721.  
  722.         moveq    #16-1,d3
  723. .colorlus:    move.b    (a0)+,d0
  724.         move.b    (a0)+,d1
  725.         move.w    d1,d2
  726.         and.w    #$0f0,d1
  727.         and.w    #$00f,d2
  728.         lsl.w    #8,d0
  729.         and.w    #$0f00,d0
  730.  
  731.         tst.b    amiga        ;atari kleuren ?
  732.         bne.s    .amiga        ;NEE, dan niet verdubbelen
  733.  
  734.         add.w    d0,d0        ;rood  * 2
  735.         add.w    d1,d1        ;groen * 2
  736.         add.w    d2,d2        ;Blauw * 2
  737.  
  738.     .amiga:    and.w    #$0f00,d0    ;rood
  739.         and.w    #$00f0,d1    ;groen
  740.         and.w    #$000f,d2    ;Blauw
  741.         or.w    d1,d0
  742.         or.w    d2,d0
  743.         move.w    d0,(a2)+
  744.         dbf    d3,.colorlus
  745.  
  746.  
  747.  
  748.         moveq    #0,d2        ;aantal bytes unpacked
  749.  
  750. .initlus:    cmp.l    #160*200,d2    ;zijn er al 32000 unpacked?
  751.         bge.s    .done        ;Yeaaah, ready !
  752.         move.b    (a0)+,d1    ;fetch header !
  753.         bpl.s    .notpacked
  754.         ext.w    d1
  755.         neg.w    d1
  756.         add.w    d1,d2        ;another D1 bytes unpacked
  757.         addq.w    #1,d2        ;+1
  758.         move.b    (a0)+,d0    ;fetch data byte
  759. .depacklus:    move.b    d0,(a1)+    ;copy it, D1 times
  760.         dbf    d1,.depacklus
  761.         bra.s    .initlus    ;get next command
  762.  
  763. .notpacked:    ext.w    d1
  764.         add.w    d1,d2        ;another D1 bytes unpacked
  765.         addq.w    #1,d2        ;+1
  766. .np_lus:    move.b    (a0)+,(a1)+    ;copy D1 bytes
  767.         dbf    d1,.np_lus
  768.         bra.s    .initlus    ;get next command
  769.  
  770. .done:        moveq    #0,d0        ;all okay, no errors
  771.         rts
  772.  
  773.  
  774.  
  775.  
  776. convertPCX:    ;A0 = source PCX
  777.         ;A1 = Dest bitmap ILBM
  778.  
  779.  
  780.         ;D0 <=  0 okay
  781.         ;      -1 error
  782.  
  783.         lea    128(a0),a3
  784.         cmp.b    #$0a,(a0)+
  785.         bne.w    .err            ;geen PCX
  786.         move.b    (a0)+,d0        ;versie nr
  787.         move.b    d0,.version+1
  788.         cmp.b    #0,d0            ;2.5
  789.         cmp.b    #2,d0            ;2.8 met color palette
  790.         cmp.b    #3,d0            ;3.0 zonder color palette
  791.  
  792.         move.b    (a0)+,.compression    ;compression mode
  793.         move.b    (a0)+,.bits+1        ;aantal bits per pixel
  794.                         ;wordt door PC meestal
  795.                         ;verwaarloost (niet gebruiken)
  796.         movem.w    (a0)+,d0-d5        ;pos info (XMIN/YMIN XMAX/YMAX)
  797.  
  798.     **** convert shitty INTEL to beautiful MOTOROLA ****
  799.  
  800.         ror.w    #8,d0
  801.         ror.w    #8,d1
  802.         ror.w    #8,d2
  803.         ror.w    #8,d3
  804.         ror.w    #8,d4
  805.         ror.w    #8,d5
  806.         movem.w    d0-d5,.xmin
  807.         bsr.w    .docolors
  808.  
  809.         addq.w    #1,a0            ;byte reserved
  810.         move.b    (a0)+,PCX_nrplanes+1
  811.         
  812.         move.w    (a0)+,d0        ;aantal bytes per lijn
  813.         ror.w    #8,d0
  814.         move.w    d0,PCX_byteperrow
  815.  
  816.         move.w    (a0),d0            ;soort graphics
  817.         ror.w    #8,d0            ;1 = Kleur !?!
  818.                         ;2 = Grijswaardes . . .
  819.  
  820.         move.l    a1,a4
  821.         tst.b    .compression
  822.         beq.s    .nocomp
  823.  
  824.         move.w    PCX_byteperrow(pc),d2
  825.         mulu    PCX_nrplanes(pc),d2
  826.         mulu    PCX_hoogte(pc),d2
  827.  
  828. .main_depack:    move.b    (a3)+,d0        ;cmpbyte
  829.         move.b    d0,d1
  830.         and.b    #$c0,d0
  831.         cmp.b    #$c0,d0
  832.         bne.s    .normal
  833.         move.b    (a3)+,d0
  834.         and.l    #$3f,d1
  835.         sub.l    d1,d2
  836.         subq.w    #1,d1
  837.     .rle:    move.b    d0,(a1)+
  838.         dbf    d1,.rle
  839.         tst.l    d2
  840.         bgt    .main_depack
  841.         bra.s    .done
  842.  
  843.     .normal:move.b    d1,(a1)+
  844.         subq.l    #1,d2
  845.         bgt.s    .main_depack
  846.         bra.s    .done
  847.  
  848. .nocomp:    move.w    PCX_hoogte(pc),d1
  849.         subq.w    #1,d1
  850.         move.w    PCX_byteperrow(pc),d2
  851.         subq.w    #1,d2
  852.     .cp:    move.b    (a3)+,(a1)+
  853.         dbf    d2,.cp
  854.         dbf    d1,.cp
  855. .done:        moveq    #0,d0
  856.         rts
  857.  
  858. .err:        moveq    #-1,d0
  859.         rts
  860.  
  861. .docolors:    lea    colormap,a2
  862.         moveq    #16-1,d0
  863. .colorlus:    move.b    (a0)+,d1    ;rood
  864.         move.b    (a0)+,d2    ;groen
  865.         move.b    (a0)+,d3    ;blauw
  866.         and.w    #$00f0,d1
  867.         and.w    #$00f0,d2
  868.         and.w    #$00f0,d3
  869.         lsl.w    #4,d1
  870.         lsr.w    #4,d3
  871.         or.b    d3,d1
  872.         or.b    d2,d1
  873.         move.w    d1,(a2)+
  874.         dbf    d0,.colorlus
  875.         rts
  876.         CNOP    0,4
  877. .version:    dc.w    0
  878. .compression:    dc.w    0        ;0 = 1:1 1 = RLE
  879. .bits:        dc.w    0
  880. .xmin:        dc.w    0
  881. .ymin:        dc.w    0
  882. .xmax:        dc.w    0
  883. .ymax:        dc.w    0
  884. ;---------------------------
  885. PCX_breedte:    dc.w    0
  886. PCX_hoogte:    dc.w    0
  887. PCX_nrplanes:    dc.w    0
  888. ;---------------------------
  889. PCX_byteperrow:    dc.w    0
  890.