90 lines
3.2 KiB
C
90 lines
3.2 KiB
C
|
/*
|
||
|
* TilEm II
|
||
|
*
|
||
|
* Copyright (c) 2011 Benjamin Moody
|
||
|
*
|
||
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
enum {
|
||
|
TI81_SLOT_AUTO = -1,
|
||
|
TI81_SLOT_0, TI81_SLOT_1, TI81_SLOT_2, TI81_SLOT_3, TI81_SLOT_4,
|
||
|
TI81_SLOT_5, TI81_SLOT_6, TI81_SLOT_7, TI81_SLOT_8, TI81_SLOT_9,
|
||
|
TI81_SLOT_A, TI81_SLOT_B, TI81_SLOT_C, TI81_SLOT_D, TI81_SLOT_E,
|
||
|
TI81_SLOT_F, TI81_SLOT_G, TI81_SLOT_H, TI81_SLOT_I, TI81_SLOT_J,
|
||
|
TI81_SLOT_K, TI81_SLOT_L, TI81_SLOT_M, TI81_SLOT_N, TI81_SLOT_O,
|
||
|
TI81_SLOT_P, TI81_SLOT_Q, TI81_SLOT_R, TI81_SLOT_S, TI81_SLOT_T,
|
||
|
TI81_SLOT_U, TI81_SLOT_V, TI81_SLOT_W, TI81_SLOT_X, TI81_SLOT_Y,
|
||
|
TI81_SLOT_Z, TI81_SLOT_THETA
|
||
|
};
|
||
|
|
||
|
#define TI81_SLOT_MAX TI81_SLOT_THETA
|
||
|
|
||
|
typedef struct _TI81ProgInfo {
|
||
|
int slot; /* program slot number */
|
||
|
int size; /* size of program contents */
|
||
|
dword addr; /* address of program contents */
|
||
|
byte name[8]; /* program name, tokens */
|
||
|
} TI81ProgInfo;
|
||
|
|
||
|
typedef struct _TI81Program {
|
||
|
TI81ProgInfo info;
|
||
|
byte *data;
|
||
|
} TI81Program;
|
||
|
|
||
|
/* Error codes */
|
||
|
enum {
|
||
|
TI81_ERR_FILE_IO = 1, /* File I/O error */
|
||
|
TI81_ERR_INVALID_FILE, /* PRG file is invalid */
|
||
|
TI81_ERR_MEMORY, /* Not enough memory to load program */
|
||
|
TI81_ERR_SLOTS_FULL, /* No free program slots */
|
||
|
TI81_ERR_BUSY, /* Calculator is busy and unable
|
||
|
to load/save programs */
|
||
|
TI81_ERR_INTERNAL
|
||
|
};
|
||
|
|
||
|
/* Create a new TI81Program with the given size. */
|
||
|
TI81Program * ti81_program_new(int size)
|
||
|
TILEM_ATTR_MALLOC;
|
||
|
|
||
|
/* Free a TI81Program. */
|
||
|
void ti81_program_free(TI81Program *prgm);
|
||
|
|
||
|
/* Get information about the program in the given slot. */
|
||
|
int ti81_get_program_info(const TilemCalc *calc, int slot, TI81ProgInfo *info);
|
||
|
|
||
|
/* Retrieve a program from calculator memory. Free the resulting
|
||
|
program with ti81_program_free() when you're done with it. */
|
||
|
int ti81_get_program(const TilemCalc *calc, int slot, TI81Program **prgm);
|
||
|
|
||
|
/* Load a program into calculator memory. */
|
||
|
int ti81_load_program(TilemCalc *calc, const TI81Program *prgm);
|
||
|
|
||
|
/* Read a program from a PRG file. Free the resulting program with
|
||
|
ti81_program_free() when you're done with it. */
|
||
|
int ti81_read_prg_file(FILE *f, TI81Program **prgm);
|
||
|
|
||
|
/* Write a program to a PRG file. */
|
||
|
int ti81_write_prg_file(FILE *f, const TI81Program *prgm);
|
||
|
|
||
|
/* Convert program slot number into a UTF-8 string. Free the result
|
||
|
with tilem_free() when you're done with it. */
|
||
|
char * ti81_program_slot_to_string(int slot)
|
||
|
TILEM_ATTR_MALLOC;
|
||
|
|
||
|
/* Convert program name to a UTF-8 string. Free the result with
|
||
|
tilem_free() when you're done with it. */
|
||
|
char * ti81_program_name_to_string(const byte *prgname)
|
||
|
TILEM_ATTR_MALLOC;
|