UINT32 LsWriteOneSourceLine ( UINT32 FileId) { UINT8 FileByte; UINT32 Column = 0; UINT32 Index = 16; BOOLEAN StartOfLine = FALSE; BOOLEAN ProcessLongLine = FALSE; Gbl_SourceLine++; Gbl_ListingNode->LineNumber++; /* Ignore lines that are completely blank (but count the line above) */ if (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) != AE_OK) { return (0); } if (FileByte == '\n') { return (1); } /* * This is a non-empty line, we will print the entire line with * the line number and possibly other prefixes and transforms. */ /* Line prefixes for special files, C and ASM output */ if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " *"); } if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT) { FlPrintFile (FileId, "; "); } if (Gbl_HasIncludeFiles) { /* * This file contains "include" statements, print the current * filename and line number within the current file */ FlPrintFile (FileId, "%12s %5d%s", Gbl_ListingNode->Filename, Gbl_ListingNode->LineNumber, ASL_LISTING_LINE_PREFIX); } else { /* No include files, just print the line number */ FlPrintFile (FileId, "%8u%s", Gbl_SourceLine, ASL_LISTING_LINE_PREFIX); } /* Read the rest of this line (up to a newline or EOF) */ do { if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { if (FileByte == '/') { FileByte = '*'; } } /* Split long input lines for readability in the listing */ Column++; if (Column >= 128) { if (!ProcessLongLine) { if ((FileByte != '}') && (FileByte != '{')) { goto WriteByte; } ProcessLongLine = TRUE; } if (FileByte == '{') { FlPrintFile (FileId, "\n%*s{\n", Index, " "); StartOfLine = TRUE; Index += 4; continue; } else if (FileByte == '}') { if (!StartOfLine) { FlPrintFile (FileId, "\n"); } StartOfLine = TRUE; Index -= 4; FlPrintFile (FileId, "%*s}\n", Index, " "); continue; } /* Ignore spaces/tabs at the start of line */ else if ((FileByte == ' ') && StartOfLine) { continue; } else if (StartOfLine) { StartOfLine = FALSE; FlPrintFile (FileId, "%*s", Index, " "); } WriteByte: FlWriteFile (FileId, &FileByte, 1); if (FileByte == '\n') { /* * This line has been completed. * Check if an error occurred on this source line during the compile. * If so, we print the error message after the source line. */ LsCheckException (Gbl_SourceLine, FileId); return (1); } } else { FlWriteFile (FileId, &FileByte, 1); if (FileByte == '\n') { /* * This line has been completed. * Check if an error occurred on this source line during the compile. * If so, we print the error message after the source line. */ LsCheckException (Gbl_SourceLine, FileId); return (1); } } } while (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) == AE_OK); /* EOF on the input file was reached */ return (0); }
static UINT32 LsWriteOneSourceLine ( UINT32 FileId) { UINT8 FileByte; Gbl_SourceLine++; Gbl_ListingNode->LineNumber++; if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { FlPrintFile (FileId, " *"); } if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT) { FlPrintFile (FileId, "; "); } if (Gbl_HasIncludeFiles) { /* * This file contains "include" statements, print the current * filename and line number within the current file */ FlPrintFile (FileId, "%12s %5d....", Gbl_ListingNode->Filename, Gbl_ListingNode->LineNumber); } else { /* No include files, just print the line number */ FlPrintFile (FileId, "%8d....", Gbl_SourceLine); } /* Read one line (up to a newline or EOF) */ while (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) == AE_OK) { if (FileId == ASL_FILE_C_SOURCE_OUTPUT) { if (FileByte == '/') { FileByte = '*'; } } FlWriteFile (FileId, &FileByte, 1); if (FileByte == '\n') { /* * Check if an error occurred on this source line during the compile. * If so, we print the error message after the source line. */ LsCheckException (Gbl_SourceLine, FileId); return (1); } } /* EOF on the input file was reached */ return (0); }