; LAST UPDATE: 20.03.2025 savelij ;[]==========================================================[] FEPrintFile CALL FEResCursor MAKEWINDOW WINSUBOBJ.STORE W_MAIN 168,96,304,50 W_FILL 4,2,296,10,COLORI.BLACK W_TEXT 132,3,COLORI.WHITE,"Print file" W_BORDER 16,16,272,12 W_FILL 18,17,268,10,COLORI.WHITE W_BUTTON 116,32,72,14 W_TEXT 140,35,COLORP.HIGHGRAY,"Stop" W_END LD IX,FEPrintTab CALL JUMPS.TestCoords LD IX,FEProcessPrn LD HL,(FEFileLenght) LD A,L LD L,H LD H,0x00 OR A JR Z,.InitPrn INC HL .InitPrn LD (IX+PROC.MAXL1),L LD (IX+PROC.MAXH1),H LD (IX+PROC.MAXL2),0X00 LD (IX+PROC.MAXH2),0x00 CALL JUMPS.InitProcess LD A,(EditMode) OR A JP NZ,FEPrintHEX FEPrintASCII LD HL,0x0000 LD (FETempShift),HL LD HL,(FEFileLenght) GETPORT WINSP.CPU1 PUSH AF LD DE,(FETempShift) LD A,D ;Выделяем номер страницы AND 0xC0 RLCA RLCA EXX LD E,A ;DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX RES 7,D ;Вкл.с 0x4000 SET 6,D FEPrnASCII BIT 7,D JR Z,PrnASC RES 7,D SET 6,D EXX INC E ;DE - Адрес страницы в списке LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX PrnASC LD A,(DE) INC DE CALL FEPrintCHAR JR C,FEPrnASCIIext CALL FENxtPrnProc DEC HL LD A,H OR L JR NZ,FEPrnASCII CALL FEEndJob jr c,FEPrnASCIIext LD DE,0x0000 CALL FENxtPrnProc HALT HALT FEPrnASCIIext POP AF SETPORT WINSP.CPU1,,0 WINDOWCLOSE RET FEPrintHEX LD HL,0x0000 LD (FETempShift),HL LD HL,LineBuffer LD BC,0x4E20 .L1 LD (HL),C INC L DJNZ .L1 FEPrintHEXlp CALL FEPrnHEXline JR C,FEPrintHEXext LD HL,(FETempShift) LD DE,0x0010 ;Адрес дампа+16 ADD HL,DE LD (FETempShift),HL JR FEPrintHEXlp FEPrintHEXext CALL FEEndJob OR A JR NZ,.PrnHEXe LD DE,0x0000 CALL FENxtPrnProc HALT HALT .PrnHEXe WINDOWCLOSE RET FEPrnHEXline LD IXL,0x00 LD IXH,B LD HL,(FEFileLenght) LD BC,(FETempShift) OR A SBC HL,BC LD A,0x00 RET C LD B,0x10 LD A,H OR A JR NZ,.PrnHLn LD A,L CP B JR NC,.PrnHLn LD B,L .PrnHLn GETPORT WINSP.CPU1 PUSH AF LD DE,(FETempShift) LD A,D ;Выделяем номер страницы AND 0xC0 RLCA RLCA EXX LD E,A ;DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX RES 7,D ;Вкл.с 0x4000 SET 6,D LD HL,LineBuffer+1 ;буфер строки EXX LD HL,LineBuffer+0x3D ;место для ASCII кодов EXX LD (HL),'0' INC L LD A,(FETempShift+1) CALL FEPutHexNumb LD A,(FETempShift) CALL FEPutHexNumb LD (HL),':' INC L INC L INC L LD A,B OR A JR Z,PrnHLp2 FEPrnHLoop BIT 7,D JR Z,PrnHLp1 RES 7,D SET 6,D EXX INC E ;DE - Адрес страницы в списке LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX PrnHLp1 LD A,(DE) INC DE EXX CP 0x20 JR NC,.L1 LD A,'.' .L1 LD (HL),A INC L EXX CALL FEPutHexNumb ;Процедура конверта INC L INC IXL ;Увелич.кол-во введенных байтов LD A,IXL AND 0x03 JR NZ,.L2 INC L .L2 DJNZ FEPrnHLoop PrnHLp2 POP AF SETPORT WINSP.CPU1,,0 ;Процедура отчистки закончившихся байтов FillHeP LD A,0x10 ;Макс.байтов SUB IXL ;Тек.кол-во байтов JR Z,FEFillP2 LD B,A LD C,0x20 FEFillP1 LD (HL),C INC L LD (HL),C INC L INC L EXX LD (HL),0x20 INC L EXX INC IXL LD A,IXL ;В центре 2 пробела AND 0x03 JR NZ,.L1 INC L .L1 DJNZ FEFillP1 FEFillP2 LD HL,LineBuffer LD B,0x4E FEPrnHEX LD A,(HL) INC HL CALL FEPrintCHAR LD A,0x01 RET C DJNZ FEPrnHEX LD A,0x0D CALL FEPrintCHAR RET C LD A,0x0A CALL FEPrintCHAR RET FEPrintCHAR LD IXL,A PUSH IX PUSH HL PUSH DE PUSH BC EXX PUSH DE SPMOUSE MOUSEF.READ_STATE BIT 0,A JR Z,.PrnCH1 LD IX,FEPrintTab CALL JUMPS.TestCoords JR C,.PrnCH2 .PrnCH1 SPDSS DSSF.SCANKEY LD A,E .PrnCH2 POP DE EXX POP BC POP DE POP HL POP IX RET C JR Z,FEPrnCHAR CP 0x1B SCF RET Z RES 5,A CP 'S' JR NZ,FEPrnCHAR FEStopPrint SCF RET FEPrnCHAR PUSH HL PUSH DE PUSH BC EXX PUSH DE LD A,IXL SPDSS DSSF.PRINT POP DE LD A,B EXX POP BC POP DE POP HL RET NC HALT JR FEPrintCHAR FEPrintTab DEFW 0x011C,0x0164,0x0080,0x008E,0x01,0x0000,FEStopPrint,0x0000 DEFW 0x8000 FENxtPrnProc LD A,E OR A RET NZ PUSH HL PUSH DE PUSH BC EXX PUSH DE LD IX,FEProcessPrn LD L,(IX+PROC.CURL1) LD H,(IX+PROC.CURH1) INC HL LD (IX+PROC.CURL1),L LD (IX+PROC.CURH1),H LD A,H OR L JR NZ,.NxtProc LD L,(IX+PROC.CURL2) LD H,(IX+PROC.CURH2) INC HL LD (IX+PROC.CURL2),L LD (IX+PROC.CURH2),H .NxtProc CALL JUMPS.PrnProcess POP DE EXX POP BC POP DE POP HL RET FEEndJob: PUSH AF PUSH HL PUSH BC EXX PUSH DE ld a,0x0C CALL FEPrintCHAR jr c,.print_cancel ld a,0x1B CALL FEPrintCHAR jr c,.print_cancel ld a,0x40 CALL FEPrintCHAR jr c,.print_cancel POP DE EXX POP BC POP HL POP AF ret .print_cancel: POP DE EXX POP BC POP HL POP AF SCF RET FEProcessPrn DEFW 0x00BA DEFW 0x0071 DEFW 0x010C DEFW 0x0000 DEFW 0x0000 DEFW 0x0000 DEFW 0x0000 DEFW 0x0000 DEFW 0x0000 DEFB 0x4F