/*

File: source_program_protos.h
Author: Neil Cafferkey
Copyright (C) 1999-2001 Neil Cafferkey

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.

*/

#ifndef _source_program_protos_h
#define _source_program_protos_h


#include "source_program.h"
#include "address_set.h"
#include "target_program.h"


/* Function: CreateSourceProgram
 * =============================
 * Possibly private.
 */

SourceProgram CreateSourceProgram(TEXT *name,UWORD year,TEXT *owner,
   Machine machine,InstructionSet instructions);


/* Function: ReadSourceProgram
 * ===========================
 */

SourceProgram ReadSourceProgram(TEXT *file_name);


/* Function: PutSegmentInSourceProgram
 * ===================================
 */

VOID PutSegmentInSourceProgram(SourceProgram src_prog,Segment segment);


/* Function: GetEntryPoints
 * ========================
 */

AddressSet GetEntryPoints(SourceProgram src_prog);


/* Function: GetInterruptPoints
 * ============================
 */

AddressSet GetInterruptPoints(SourceProgram src_prog);


/* Function: FindInstructions
 * ==========================
 */

VOID FindInstructions(SourceProgram src_prog);


/* Function: DisassembleSourceProgram
 * ==================================
 * Disassembles all known source program code.
 */

VOID DisassembleSourceProgram(SourceProgram src_prog);


/* Function: TranslateSourceProgram
 * ================================
 */

VOID TranslateSourceProgram(SourceProgram src_prog);



/* Function: GetSourceProgramName
 * ==============================
 */

TEXT *GetSourceProgramName(SourceProgram src_prog);


/* Function: GetSourceProgramMachine
 * =================================
 */

Machine GetSourceProgramMachine(SourceProgram src_prog);


/* Function: GetSourceProgramClosure
 * =================================
 */

AddressSet GetSourceProgramClosure(SourceProgram src_prog);


/* Function: GetSourceProgramRevisitAgenda
 * =======================================
 * Returns a source program's set of revisitable addresses.
 */

AddressSet GetSourceProgramRevisitAgenda(SourceProgram src_prog);


/* Function: GetSourceProgramReverseGraph
 * ======================================
 */

ReverseGraph GetSourceProgramReverseGraph(SourceProgram src_prog);


/* Function: GetSourceProgramInstruction
 * =====================================
 */

Instruction GetSourceProgramInstruction(SourceProgram src_prog,
   Address address);


/* Function: GetSourceProgramBank
 * ==============================
 */

Bank GetSourceProgramBank(SourceProgram src_prog,ULONG offset,
   UWORD bank_no);


/* Function: GetSourceProgramBanks
 * ===============================
 */

Set GetSourceProgramBanks(SourceProgram src_prog);


/* Function: GetSourceProgramAddressMask
 * =====================================
 */

LONGBITS GetSourceProgramAddressMask(SourceProgram src_prog);


/* Function: KillSourceProgram
 * ===========================
 */

VOID KillSourceProgram(SourceProgram src_prog);


#endif


