home *** CD-ROM | disk | FTP | other *** search
- ILABEL TOS\TOS.L
- GEM_INIT
- FSEL_INPUT PFAD_NAME,DATEI_NAME,D0,D1
- TST D0
- BEQ ERROR ;if D0 = 0 => Error
- TST D1
- BEQ ENDE ;if D1 = 0 => 'Cancel' selected
- LEA PFAD_NAME,A0
- MOVEQ #-1,D0
- \L1:ADDQ #1,D0
- TST.B (A0,D0) ;Search end of path name
- BNE.S \L1
- MOVEQ #1,D1 ;clear zeroflag
- BRA.S \IN
- \L2:CMPI.B #'\',(A0,D0) ;Search last '\'
- \IN:DBEQ D0,\L2
- BNE.S \KEIN_BACKSLASH
- CLR.B 1(A0,D0) ;cut '*.NEO'
- \KEIN_BACKSLASH:
- CHDIR PFAD_NAME
- TST D0
- BMI ERROR
- OPEN #0,DATEI_NAME
- TST D0
- BMI ERROR
- MOVE D0,-(SP) ;Handle
- FORM_ALERT #1,\STRING,D0
- MOVE (SP)+,D7
- CMPI #1,D0
- BEQ \VOREINST_OK
- DATA
- \STRING:DC.B '[1][Which format ?][normal|NEOCHROME]',0
- ALIGN
- TEXT
- ;If filename = *.NEO =>load palette
- READ PUFFER,#128,D7
- TST.L D0
- BMI ERROR
- MOVEQ #0,D0
- LEA PUFFER+4,A0 ;Start of palette
- LEA 136(A0),A1
- \SET_PALETTE:
- MOVE (A0)+,D1
- MOVEM.L D0/D7/A0/A1,-(SP)
- MOVEQ #2,D3
- \SP_LOOP:MOVE D1,D2
- ANDI #7,D2
- MULU #125,D2
- ADD #62,D2 ;Color values in GEM : 62,187,312,437,562,687,812,937
- MOVE D2,-(A1)
- LSR #4,D1
- DBRA D3,\SP_LOOP
- VS_COLOR GR_HANDLE,D0,(A1)
- MOVEM.L (SP)+,D0/D7/A0/A1
- ADDQ #1,D0
- CMPI #15,D0
- BLS \SET_PALETTE
- ;Other formats need another program
- \VOREINST_OK:
- MOVE D7,-(SP)
- V_HIDE_C GR_HANDLE
- MOVE (SP)+,D7
- PHYSBASE
- MOVE.L D0,A6 ;Address of screen memory
- READ (A6),#32000,D7
- TST.L D0
- BMI ERROR
- CLOSE D7
- ;Output to printer :
- DRUCKER_BREITE=864 ;Height ( => vertical output)
- DRUCKER_HÖHE =1920
- DRUCKER_HANDLE=3 ;Centronics
- ANZAHL_FÜLLMUSTER=20
- MOVEQ #0,D0 ;Farbe
- LEA INDEX,A0
- \GET_COLOR;calculate all brightness values
- MOVEM.L D0/A0,-(SP)
- VQ_COLOR GR_HANDLE,D0,#0,PUFFER
- MOVEM.L (SP)+,D0/A0
- LEA PUFFER,A1
- MOVE (A1)+,D1
- ADD (A1)+,D1
- ADD (A1),D1 ; red ~ green ~ blue <=> 1 ~ 1 ~ 1
- MOVE D1,(A0)+
- ADDQ #1,D0
- CMP WORK_OUT+26,D0 ;number of colors
- BLO.S \GET_COLOR
- MOVEQ #-1,D7 ;Min.
- MOVEQ #0,D6 ;Max.
- MOVE WORK_OUT+26,D0
- LEA INDEX,A0
- BRA.S \MIN_MAX_IN ;Calculate min. and max.
- \MIN_MAX_LP:
- CMP (A0),D7
- BLS.S \MIN
- MOVE (A0),D7
- \MIN:CMP (A0),D6
- BHS.S \MAX
- MOVE (A0),D6
- \MAX:ADDQ.L #2,A0
- \MIN_MAX_IN:
- DBRA D0,\MIN_MAX_LP
- MOVE D6,D5
- SUB D7,D5
- MOVE D5,D6
- ADDQ #1,D6
- LSR #1,D6 ;D6 = D5 / 2 (rounded)
- EXT.L D6
- MOVE WORK_OUT+26,D0
- LEA INDEX,A0
- BRA.S \INDEX_IN
- \INDEX_LP; Calculate index for fill pattern
- MOVE (A0),D1
- SUB D7,D1
- MULU #ANZAHL_FÜLLMUSTER,D1
- ADD.L D6,D1
- DIVU D5,D1 ; D1 = 0 ... ANZAHL_FÜLLMUSTER
- LSL #3,D1 ; *8 (each fill pattern is eight bytes long)
- MOVE D1,(A0)+
- \INDEX_IN:
- DBRA D0,\INDEX_LP
- LEA DRUCKER_INIT,A0
- WRITE 4(A0),(A0),#DRUCKER_HANDLE
- TST.L D0
- BMI ERROR
- MOVE WORK_OUT+2,D0
- ADDQ #1,D0 ;Height of screen in pixel
- MOVE D0,BILD_HÖHE
- MOVE WORK_OUT,D0
- ADDQ #1,D0 ;Width of screen in Pixel
- MOVE D0,BILD_BREITE
- LEA FÜLLMUSTER,A5
- MOVE #DRUCKER_BREITE/8-1,D7 ;number of lines
- \SCHLEIFE:
- KBSHIFT #-1 ;Both SHIFT-keys => cancel
- ANDI #3,D0
- CMPI #3,D0
- BEQ ENDE
- LEA ZEILENANFANG,A0
- WRITE 4(A0),(A0),#DRUCKER_HANDLE
- TST.L D0
- BMI ERROR
- MOVEQ #0,D6
- LEA PUFFER,A6
- \INNERE_SCHLEIFE:
- MOVEQ #0,D5
- \INNERSTE_SCHLEIFE:
- MOVE BILD_HÖHE,D0
- MULU D6,D0
- DIVU #DRUCKER_HÖHE,D0 ;Y-pixelposition
- MOVEM.L D5-D7/A5/A6,-(SP)
- LSL #3,D7
- ADD D5,D7 ;Absolute X-point position for printer
- MOVE BILD_BREITE,D1
- MULU D7,D1
- DIVU #DRUCKER_BREITE,D1 ;X-pixelposition
- V_GET_PIXEL GR_HANDLE,D1,D0,D6,D7
- ;D7 = color index
- LEA INDEX,A0
- LSL #1,D7 ; INDEX = word
- MOVE (A0,D7),D0
- MOVEM.L (SP)+,D5-D7/A5/A6
- ;(A5,D0) points to the fill pattern
- LEA (A5,D0),A0
- BTST D6,(A0,D5)
- BNE.S \SET
- BCLR D5,(A6)
- BRA.S \OK
- \SET:BSET D5,(A6)
- \OK:ADDQ #1,D5
- CMPI #8,D5
- BLO \INNERSTE_SCHLEIFE
- ADDQ.L #1,A6
- ADDQ #1,D6
- CMPI #DRUCKER_HÖHE,D6
- BLO \INNERE_SCHLEIFE
- WRITE PUFFER,#DRUCKER_HÖHE,#DRUCKER_HANDLE
- TST.L D0
- BMI ERROR
- LEA ZEILENENDE,A0
- WRITE 4(A0),(A0),#DRUCKER_HANDLE
- TST.L D0
- BMI ERROR
- DBRA D7,\SCHLEIFE
- ENDE:
- V_SHOW_C GR_HANDLE,#0
- GEM_EXIT
- ERROR:
- FORM_ALERT #1,\NACHRICHT,D0
- BRA ENDE
- DATA
- \NACHRICHT:DC.B '[3][Error !][Cancel]',0
- ALIGN
- BSS
- BILD_BREITE:DS.W 1
- BILD_HÖHE:DS.W 1
- RGB:DS.W 3
- DATEI_NAME:DS.B 20
- INDEX:DS.W 32
- PUFFER:DS.B DRUCKER_HÖHE
- DATA
- PFAD_NAME:DC.B '\*.NEO'
- DS.B 40
- ALIGN
- DRUCKER_INIT:DC.L 3 ; length = 3 Bytes
- DC.B 27,51,23
- ALIGN
- ZEILENANFANG:DC.L 4
- DC.B 27,90,DRUCKER_HÖHE & 255,DRUCKER_HÖHE / 256
- ALIGN
- ZEILENENDE:DC.L 2
- DC.B 13,10
- ALIGN
- FÜLLMUSTER:
- ;density 20
- DS.B 8,-1
- ;density 19
- DC.B %01111111
- DS.B 7,-1
- ;density 18
- DC.B %01111111
- DC.B -1
- DC.B -1
- DC.B -1
- DC.B %11101111
- DC.B -1
- DC.B -1
- DC.B -1
- ;density 17
- DC.B %01110111
- DC.B -1
- DC.B -1
- DC.B -1
- DC.B %01110111
- DC.B -1
- DC.B -1
- DC.B -1
- ;density 16
- DC.B %01111111
- DC.B -1
- DC.B %11011101
- DC.B -1
- DC.B %11110111
- DC.B -1
- DC.B %11011101
- DC.B -1
- ;density 15
- DC.B %01110111
- DC.B -1
- DC.B %11011101
- DC.B -1
- DC.B %01110111
- DC.B -1
- DC.B %11011101
- DC.B -1
- ;density 14
- DC.B %01111101
- DC.B %10111011
- DC.B %11010111
- DC.B %11101111
- DC.B %11010111
- DC.B %10111011
- DC.B %01111101
- DC.B %11111110
- ;density 13
- DC.B %01101101
- DC.B %10111011
- DC.B %11010111
- DC.B %01101110
- DC.B %11010111
- DC.B %10111011
- DC.B %01111101
- DC.B %11101110
- ;density 12
- DC.B %01010101
- DC.B %10111011
- DC.B %01010100
- DC.B %11111111
- DC.B %01010100
- DC.B %10111011
- DC.B %01010101
- DC.B %11010110
- ;density 11
- DC.B %01010101
- DC.B %10101011
- DC.B %01010100
- DC.B %10111011
- DC.B %01010100
- DC.B %10101011
- DC.B %01010101
- DC.B %11010110
- ;density 10
- DC.B %10101010
- DC.B %01010101
- DC.B %10101010
- DC.B %01010101
- DC.B %10101010
- DC.B %01010101
- DC.B %10101010
- DC.B %01010101
- ;density 9
- DC.B %10101010
- DC.B %01010100
- DC.B %10101011
- DC.B %01000100
- DC.B %10101011
- DC.B %01010100
- DC.B %10101010
- DC.B %00101001
- ;density 8
- DC.B %10101010
- DC.B %01000100
- DC.B %10101011
- DC.B %00000000
- DC.B %10101011
- DC.B %01000100
- DC.B %10101010
- DC.B %00101001
- ;density 7
- DC.B %10010010
- DC.B %01000100
- DC.B %00101000
- DC.B %10010001
- DC.B %00101000
- DC.B %01000100
- DC.B %10000010
- DC.B %00010001
- ;density 6
- DC.B %10000010
- DC.B %01000100
- DC.B %00101000
- DC.B %00010000
- DC.B %00101000
- DC.B %01000100
- DC.B %10000010
- ;density 5
- DC.B %10001000
- DC.B 0
- DC.B %00100010
- DC.B 0
- DC.B %10001000
- DC.B 0
- DC.B %00100010
- DC.B 0
- ;density 4
- DC.B %10000000
- DC.B 0
- DC.B %00100010
- DC.B 0
- DC.B %00001000
- DC.B 0
- DC.B %00100010
- DC.B 0
- ;density 3
- DC.B %10001000
- DS.B 3
- DC.B %10001000
- DS.B 3
- ;density 2
- DC.B %10000000
- DS.B 3
- DC.B %00001000
- DS.B 3
- ;density 1
- DC.B %10000000
- DS.B 7
- ;density 0
- DS.B 8
- END