home *** CD-ROM | disk | FTP | other *** search
/ Dave Lowe: Assempro 1987.07.12 / Lowe_Assempro_1987_07_12.img / DEMO / HARDCOPY.S < prev    next >
Encoding:
Text File  |  1985-11-20  |  6.7 KB  |  370 lines

  1.  ILABEL TOS\TOS.L
  2.  GEM_INIT
  3.  FSEL_INPUT PFAD_NAME,DATEI_NAME,D0,D1
  4.  TST D0
  5.  BEQ ERROR ;if D0 = 0 => Error
  6.  TST D1
  7.  BEQ ENDE  ;if D1 = 0 => 'Cancel' selected
  8.  LEA PFAD_NAME,A0
  9.  MOVEQ #-1,D0
  10. \L1:ADDQ #1,D0
  11.  TST.B (A0,D0) ;Search end of path name
  12.  BNE.S \L1
  13.  MOVEQ #1,D1 ;clear zeroflag
  14.  BRA.S \IN
  15. \L2:CMPI.B #'\',(A0,D0) ;Search last '\'
  16. \IN:DBEQ D0,\L2
  17.  BNE.S \KEIN_BACKSLASH
  18.  CLR.B 1(A0,D0) ;cut '*.NEO'
  19. \KEIN_BACKSLASH:
  20.  CHDIR PFAD_NAME
  21.  TST D0
  22.  BMI ERROR
  23.  OPEN #0,DATEI_NAME
  24.  TST D0
  25.  BMI ERROR
  26.  MOVE D0,-(SP) ;Handle
  27.  FORM_ALERT #1,\STRING,D0
  28.  MOVE (SP)+,D7
  29.  CMPI #1,D0
  30.  BEQ \VOREINST_OK
  31.  DATA
  32. \STRING:DC.B '[1][Which format ?][normal|NEOCHROME]',0
  33.  ALIGN
  34.  TEXT
  35. ;If filename = *.NEO =>load palette
  36.  READ PUFFER,#128,D7
  37.  TST.L D0
  38.  BMI ERROR
  39.  MOVEQ #0,D0
  40.  LEA PUFFER+4,A0 ;Start of palette
  41.  LEA 136(A0),A1
  42. \SET_PALETTE:
  43.   MOVE (A0)+,D1
  44.   MOVEM.L D0/D7/A0/A1,-(SP)
  45.   MOVEQ #2,D3
  46. \SP_LOOP:MOVE D1,D2
  47.   ANDI #7,D2
  48.   MULU #125,D2
  49.   ADD #62,D2 ;Color values in GEM : 62,187,312,437,562,687,812,937
  50.   MOVE D2,-(A1)
  51.   LSR #4,D1
  52.   DBRA D3,\SP_LOOP
  53.   VS_COLOR GR_HANDLE,D0,(A1)
  54.   MOVEM.L (SP)+,D0/D7/A0/A1
  55.  ADDQ #1,D0
  56.  CMPI #15,D0
  57.  BLS \SET_PALETTE
  58. ;Other formats need another program
  59. \VOREINST_OK:
  60.  MOVE D7,-(SP)
  61.  V_HIDE_C GR_HANDLE
  62.  MOVE (SP)+,D7
  63.  PHYSBASE
  64.  MOVE.L D0,A6 ;Address of screen memory
  65.  READ (A6),#32000,D7
  66.  TST.L D0
  67.  BMI ERROR
  68.  CLOSE D7
  69. ;Output to printer :
  70. DRUCKER_BREITE=864 ;Height ( => vertical output)
  71. DRUCKER_HÖHE  =1920
  72. DRUCKER_HANDLE=3    ;Centronics
  73. ANZAHL_FÜLLMUSTER=20
  74.  MOVEQ #0,D0 ;Farbe
  75.  LEA INDEX,A0
  76. \GET_COLOR;calculate all brightness values
  77.   MOVEM.L D0/A0,-(SP)
  78.   VQ_COLOR GR_HANDLE,D0,#0,PUFFER
  79.   MOVEM.L (SP)+,D0/A0
  80.   LEA PUFFER,A1
  81.   MOVE (A1)+,D1
  82.   ADD (A1)+,D1
  83.   ADD (A1),D1 ; red ~ green ~ blue <=> 1 ~ 1 ~ 1
  84.   MOVE D1,(A0)+
  85.  ADDQ #1,D0
  86.  CMP WORK_OUT+26,D0 ;number of colors
  87.  BLO.S \GET_COLOR
  88.  MOVEQ #-1,D7 ;Min.
  89.  MOVEQ #0,D6  ;Max.
  90.  MOVE WORK_OUT+26,D0
  91.  LEA INDEX,A0
  92.  BRA.S \MIN_MAX_IN ;Calculate min. and max.
  93. \MIN_MAX_LP:
  94.   CMP (A0),D7
  95.   BLS.S \MIN
  96.   MOVE (A0),D7
  97. \MIN:CMP (A0),D6
  98.   BHS.S \MAX
  99.   MOVE (A0),D6
  100. \MAX:ADDQ.L #2,A0
  101. \MIN_MAX_IN:
  102.  DBRA D0,\MIN_MAX_LP
  103.  MOVE D6,D5
  104.  SUB D7,D5
  105.  MOVE D5,D6
  106.  ADDQ #1,D6
  107.  LSR #1,D6 ;D6 = D5 / 2 (rounded)
  108.  EXT.L D6
  109.  MOVE WORK_OUT+26,D0
  110.  LEA INDEX,A0
  111.  BRA.S \INDEX_IN
  112. \INDEX_LP; Calculate index for fill pattern
  113.   MOVE (A0),D1
  114.   SUB D7,D1
  115.   MULU #ANZAHL_FÜLLMUSTER,D1
  116.   ADD.L D6,D1
  117.   DIVU D5,D1 ; D1 = 0 ... ANZAHL_FÜLLMUSTER
  118.   LSL #3,D1 ; *8 (each fill pattern is eight bytes long)
  119.   MOVE D1,(A0)+
  120. \INDEX_IN:
  121.  DBRA D0,\INDEX_LP
  122.  LEA DRUCKER_INIT,A0
  123.  WRITE 4(A0),(A0),#DRUCKER_HANDLE
  124.  TST.L D0
  125.  BMI ERROR
  126.  MOVE WORK_OUT+2,D0
  127.  ADDQ #1,D0 ;Height of screen in pixel
  128.  MOVE D0,BILD_HÖHE
  129.  MOVE WORK_OUT,D0
  130.  ADDQ #1,D0 ;Width of screen in Pixel
  131.  MOVE D0,BILD_BREITE
  132.  LEA FÜLLMUSTER,A5
  133.  MOVE #DRUCKER_BREITE/8-1,D7 ;number of lines
  134. \SCHLEIFE:
  135.   KBSHIFT #-1  ;Both SHIFT-keys => cancel
  136.   ANDI #3,D0
  137.   CMPI #3,D0
  138.   BEQ ENDE
  139.   LEA ZEILENANFANG,A0
  140.   WRITE 4(A0),(A0),#DRUCKER_HANDLE
  141.   TST.L D0
  142.   BMI ERROR
  143.   MOVEQ #0,D6
  144.   LEA PUFFER,A6
  145. \INNERE_SCHLEIFE:
  146.    MOVEQ #0,D5
  147. \INNERSTE_SCHLEIFE:
  148.     MOVE BILD_HÖHE,D0
  149.     MULU D6,D0
  150.     DIVU #DRUCKER_HÖHE,D0 ;Y-pixelposition
  151.     MOVEM.L D5-D7/A5/A6,-(SP)
  152.     LSL #3,D7
  153.     ADD D5,D7 ;Absolute X-point position for printer
  154.     MOVE BILD_BREITE,D1
  155.     MULU D7,D1
  156.     DIVU #DRUCKER_BREITE,D1 ;X-pixelposition
  157.     V_GET_PIXEL GR_HANDLE,D1,D0,D6,D7
  158.     ;D7 = color index
  159.     LEA INDEX,A0
  160.     LSL #1,D7 ; INDEX = word
  161.     MOVE (A0,D7),D0
  162.     MOVEM.L (SP)+,D5-D7/A5/A6
  163.     ;(A5,D0) points to the fill pattern
  164.     LEA (A5,D0),A0
  165.     BTST D6,(A0,D5)
  166.     BNE.S \SET
  167.     BCLR D5,(A6)
  168.     BRA.S \OK
  169. \SET:BSET D5,(A6)
  170. \OK:ADDQ #1,D5
  171.    CMPI #8,D5
  172.    BLO \INNERSTE_SCHLEIFE
  173.   ADDQ.L #1,A6
  174.   ADDQ #1,D6
  175.   CMPI #DRUCKER_HÖHE,D6
  176.   BLO \INNERE_SCHLEIFE
  177.   WRITE PUFFER,#DRUCKER_HÖHE,#DRUCKER_HANDLE
  178.   TST.L D0
  179.   BMI ERROR
  180.   LEA ZEILENENDE,A0
  181.   WRITE 4(A0),(A0),#DRUCKER_HANDLE
  182.   TST.L D0
  183.   BMI ERROR
  184.  DBRA D7,\SCHLEIFE
  185. ENDE:
  186.  V_SHOW_C GR_HANDLE,#0
  187.  GEM_EXIT
  188. ERROR:
  189.  FORM_ALERT #1,\NACHRICHT,D0
  190.  BRA ENDE
  191.  DATA
  192. \NACHRICHT:DC.B '[3][Error !][Cancel]',0
  193.  ALIGN
  194.  BSS
  195. BILD_BREITE:DS.W 1
  196. BILD_HÖHE:DS.W 1
  197. RGB:DS.W 3
  198. DATEI_NAME:DS.B 20
  199. INDEX:DS.W 32
  200. PUFFER:DS.B DRUCKER_HÖHE
  201.  DATA
  202. PFAD_NAME:DC.B '\*.NEO'
  203.  DS.B 40
  204.  ALIGN
  205. DRUCKER_INIT:DC.L 3 ; length = 3 Bytes
  206.  DC.B 27,51,23
  207.  ALIGN
  208. ZEILENANFANG:DC.L 4
  209.  DC.B 27,90,DRUCKER_HÖHE & 255,DRUCKER_HÖHE / 256
  210.  ALIGN
  211. ZEILENENDE:DC.L 2
  212.  DC.B 13,10
  213.  ALIGN
  214. FÜLLMUSTER:
  215. ;density 20
  216.  DS.B 8,-1
  217. ;density 19
  218.  DC.B %01111111
  219.  DS.B 7,-1
  220. ;density 18
  221.  DC.B %01111111
  222.  DC.B -1
  223.  DC.B -1
  224.  DC.B -1
  225.  DC.B %11101111
  226.  DC.B -1
  227.  DC.B -1
  228.  DC.B -1
  229. ;density 17
  230.  DC.B %01110111
  231.  DC.B -1
  232.  DC.B -1
  233.  DC.B -1
  234.  DC.B %01110111
  235.  DC.B -1
  236.  DC.B -1
  237.  DC.B -1
  238. ;density 16
  239.  DC.B %01111111
  240.  DC.B -1
  241.  DC.B %11011101
  242.  DC.B -1
  243.  DC.B %11110111
  244.  DC.B -1
  245.  DC.B %11011101
  246.  DC.B -1
  247. ;density 15
  248.  DC.B %01110111
  249.  DC.B -1
  250.  DC.B %11011101
  251.  DC.B -1
  252.  DC.B %01110111
  253.  DC.B -1
  254.  DC.B %11011101
  255.  DC.B -1
  256. ;density 14
  257.  DC.B %01111101
  258.  DC.B %10111011
  259.  DC.B %11010111
  260.  DC.B %11101111
  261.  DC.B %11010111
  262.  DC.B %10111011
  263.  DC.B %01111101
  264.  DC.B %11111110
  265. ;density 13
  266.  DC.B %01101101
  267.  DC.B %10111011
  268.  DC.B %11010111
  269.  DC.B %01101110
  270.  DC.B %11010111
  271.  DC.B %10111011
  272.  DC.B %01111101
  273.  DC.B %11101110
  274. ;density 12
  275.  DC.B %01010101
  276.  DC.B %10111011
  277.  DC.B %01010100
  278.  DC.B %11111111
  279.  DC.B %01010100
  280.  DC.B %10111011
  281.  DC.B %01010101
  282.  DC.B %11010110
  283. ;density 11
  284.  DC.B %01010101
  285.  DC.B %10101011
  286.  DC.B %01010100
  287.  DC.B %10111011
  288.  DC.B %01010100
  289.  DC.B %10101011
  290.  DC.B %01010101
  291.  DC.B %11010110
  292. ;density 10
  293.  DC.B %10101010
  294.  DC.B %01010101
  295.  DC.B %10101010
  296.  DC.B %01010101
  297.  DC.B %10101010
  298.  DC.B %01010101
  299.  DC.B %10101010
  300.  DC.B %01010101
  301. ;density 9
  302.  DC.B %10101010
  303.  DC.B %01010100
  304.  DC.B %10101011
  305.  DC.B %01000100
  306.  DC.B %10101011
  307.  DC.B %01010100
  308.  DC.B %10101010
  309.  DC.B %00101001
  310. ;density 8
  311.  DC.B %10101010
  312.  DC.B %01000100
  313.  DC.B %10101011
  314.  DC.B %00000000
  315.  DC.B %10101011
  316.  DC.B %01000100
  317.  DC.B %10101010
  318.  DC.B %00101001
  319. ;density 7
  320.  DC.B %10010010
  321.  DC.B %01000100
  322.  DC.B %00101000
  323.  DC.B %10010001
  324.  DC.B %00101000
  325.  DC.B %01000100
  326.  DC.B %10000010
  327.  DC.B %00010001
  328. ;density 6
  329.  DC.B %10000010
  330.  DC.B %01000100
  331.  DC.B %00101000
  332.  DC.B %00010000
  333.  DC.B %00101000
  334.  DC.B %01000100
  335.  DC.B %10000010
  336. ;density 5
  337.  DC.B %10001000
  338.  DC.B 0
  339.  DC.B %00100010
  340.  DC.B 0
  341.  DC.B %10001000
  342.  DC.B 0
  343.  DC.B %00100010
  344.  DC.B 0
  345. ;density 4
  346.  DC.B %10000000
  347.  DC.B 0
  348.  DC.B %00100010
  349.  DC.B 0
  350.  DC.B %00001000
  351.  DC.B 0
  352.  DC.B %00100010
  353.  DC.B 0
  354. ;density 3
  355.  DC.B %10001000
  356.  DS.B 3
  357.  DC.B %10001000
  358.  DS.B 3
  359. ;density 2
  360.  DC.B %10000000
  361.  DS.B 3
  362.  DC.B %00001000
  363.  DS.B 3
  364. ;density 1
  365.  DC.B %10000000
  366.  DS.B 7
  367. ;density 0
  368.  DS.B 8
  369.  END