exp_def.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. }