exp_def.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /* exp_def.c: File export utilities
  2. Copyright (C) 2003 Sebastian Reichelt
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2, or (at your option)
  6. any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software Foundation,
  13. Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  14. #include "exp_def.h"
  15. #include "../special.h"
  16. // If the reloc can be resolved to a calculator-dependent builtin value,
  17. // write the value into the data segment in the file which starts at
  18. // DataStart.
  19. BOOLEAN EmitCalcBuiltinValue (const RELOC *Reloc, ProgramCalcs DestCalc, EXP_FILE *File, SIZE FileSize, OFFSET DataStart)
  20. {
  21. IMAX Value;
  22. if (GetCalcBuiltinValue (Reloc, DestCalc, &Value) && (Reloc->Location >= 0) && (Reloc->Location + Reloc->Size <= FileSize))
  23. {
  24. OFFSET CurPos = ExportTell (File);
  25. ExportSeek (File, DataStart + Reloc->Location);
  26. ExportWriteTI (File, Value, Reloc->Size, FALSE, TRUE);
  27. ExportSeek (File, CurPos);
  28. return TRUE;
  29. }
  30. return FALSE;
  31. }
  32. #ifdef PUCRUNCH_SUPPORT
  33. // If the reloc can be resolved to a calculator-dependent builtin value,
  34. // write the value into the data segment in the buffer which starts at
  35. // DataStart. This function is only needed with pucrunch compression.
  36. BOOLEAN EmitCalcBuiltinValueBuf (const RELOC *Reloc, ProgramCalcs DestCalc, I1 *Buffer, SIZE BufferSize, OFFSET DataStart)
  37. {
  38. IMAX Value;
  39. if (GetCalcBuiltinValue (Reloc, DestCalc, &Value) && (Reloc->Location >= 0) && (Reloc->Location + Reloc->Size <= BufferSize))
  40. {
  41. WriteTI (Buffer + DataStart + Reloc->Location, Reloc->Size, Value, FALSE, TRUE);
  42. return TRUE;
  43. }
  44. return FALSE;
  45. }
  46. #endif /* PUCRUNCH_SUPPORT */