********************************************************************************************** * DBG187R4: Transfer from spoolfile (maintain formatting) * Copyright (C) 2000 Martin Rowe <martin@dbg400.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ********************************************************************************************** H DATEDIT(*YMD) DEBUG(*YES) OPTION(*NODEBUGIO : *SRCSTMT) ********************************************************************************************** FDBG1871W IF F 259 DISK INFDS(SPL_DS) FDBG1872W O F 255 DISK ********************************************************************************************** * DATA STRUCTURES: ********************************************************************************************** * Information Data Structure D Spl_DS DS D NbrOfRcds 10I 0 OVERLAY(Spl_DS:156) * Standard error code DS for API error handling D Error_Code DS D BytesProvd 1 4B 0 INZ(16) D BytesAvail 5 8B 0 INZ(0) D Except_ID 9 15 D Reserved 16 16 D Exception 17 272 * QUSRSPLA format SPLA0100 structure D RcvrVarDS DS D SplA0100 1000A D PageLength 9B 0 OVERLAY( SplA0100 : 425 ) ********************************************************************************************** * WORK FIELDS: ********************************************************************************************** D CurrentLine S 3 0 INZ(1) D FirstLine S 1 INZ('1') D OnePercent S 11 2 D P_Marker S 1 INZ(X'33') D P_Percent S 3 0 D P_Text S 20 D PageBreak S 1 INZ(X'0C') D RcdsRead S 9 0 D Record S 255 D Remainder S 9 0 D ResultLine S 256 D Skip S 3 0 D SourceLine S 256 D Space S 1 0 D TargetLine S 256 D IntJobID S 16 INZ(' ') D IntSpoolID S 16 INZ(' ') D ListFormat S 8 INZ('SPLA0100') D RcvrVarLen S 9B 0 INZ(1000) D QualifyJob S 26 D P#Job S 10 D P#JobNbr S 6 D P#User S 10 D P#SpoolName S 10 D SpoolName S 10 D P#SpoolNbr S 4 0 D SpoolNbr S 9B 0 ********************************************************************************************** IDBG1871W NS 01 I 1 3 SKIPVALUE I 4 4 SPACEVALUE I 5 259 SPOOLDATA ********************************************************************************************** * ENTRY PARAMETERS ********************************************************************************************** C *ENTRY PLIST C PARM P#Job C PARM P#User C PARM P#JobNbr C PARM P#SpoolName C PARM P#SpoolNbr ********************************************************************************************** * MAINLINE: ********************************************************************************************** C EVAL QualifyJob = P#Job + P#User + P#JobNbr C CALL 'QUSRSPLA' C PARM RcvrVarDS C PARM RcvrVarLen C PARM ListFormat C PARM QualifyJob C PARM IntJobID C PARM IntSpoolID C PARM P#SpoolName SpoolName C PARM P#SpoolNbr SpoolNbr C PARM Error_Code * If error, set to default length of 66 (in case it's just been deleted?) B001 C IF BytesAvail > 0 C EVAL PageLength = 66 E001 C ENDIF * C EVAL OnePercent = NbrOfRcds / 100 C EVAL P_Text = 'Loading ' + C %TRIM(P#SpoolName) + ':' * C 1 SETLL DBG1871W C READ DBG1871W 80 * B001 C DOW NOT *IN80 * C EVAL RcdsRead = RcdsRead + 1 C RcdsRead DIV OnePercent P_Percent C MVR Remainder B002 C IF Remainder = 0 C CALL 'DBG202R4' C PARM P_Percent C PARM P_Text C PARM P_Marker E002 C ENDIF * B002 C SELECT * If not overprinting S002 C WHEN SKIPVALUE <> ' ' * Write out what's in the buffer before continuing B003 C IF FirstLine = *OFF C EXSR WRITERECORD E003 C ENDIF C MOVE SKIPVALUE Skip B003 C DOW CurrentLine <> Skip C EVAL Record = *BLANKS C EXSR WRITERECORD E003 C ENDDO C EVAL Record = SPOOLDATA * If overprinting S002 C WHEN SPACEVALUE = '0' * Merge the current line with what's left from the last record C CALL 'DBG042R3' C PARM SPOOLDATA SourceLine C PARM Record TargetLine C PARM *BLANKS ResultLine * C EVAL Record = ResultLine * If not overprinting, write out what's in the buffer before continuing S002 C WHEN SPACEVALUE <> ' ' * Write out what's in the buffer before continuing C EXSR WRITERECORD C MOVE SPACEVALUE Space C EVAL Space = Space - 1 B003 C IF Space > 0 B004 C DO Space C EVAL Record = *BLANKS C EXSR WRITERECORD E004 C ENDDO E003 C ENDIF C EVAL Record = SPOOLDATA E002 C ENDSL * C READ DBG1871W 80 E001 C ENDDO * C EVAL Record = SPOOLDATA C EXSR WRITERECORD * C EVAL *INLR = *ON C RETURN ********************************************************************************************** * WRITERECORD: Write a record to the file ********************************************************************************************** C WRITERECORD BEGSR * If not the first line in the file, but the first line of a 'new page' B001 C IF FirstLine = *OFF C AND CurrentLine = 1 * Insert page break at the start of the line * If the first character is empty, use that B002 C IF %SUBST(Record:1:1) = ' ' C EVAL %SUBST(Record:1:1) = PageBreak * Otherwise push line along one so page break character can be at the start X002 C ELSE C EVAL Record = PageBreak + %TRIMR(Record) E002 C ENDIF E001 C ENDIF * Write out the current line C EXCEPT TFRFORMAT * Keep CurrentLine counter correct C EVAL CurrentLine = CurrentLine + 1 B001 C IF CurrentLine > PageLength C EVAL CurrentLine = 1 E001 C ENDIF C EVAL FirstLine = *OFF * C ENDSR ********************************************************************************************** ODBG1872W E TFRFORMAT O Record 255