#include <stdio.h>
#include <stdlib.h>

#include "internalfile.h"

void _imp_readbyte(unsigned char *dest) {
  int num;
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%d", &num);
  // if (rc != 1) _imp_signal(3,1,0,"");
  // first do a range check for 0:255 (or possibly -128:127 or even -128:255)
  *dest = num;
  (void)rc;
}

void _imp_readshort(short int *dest) {
  int num;
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%hd", dest);
  // if (rc != 1) _imp_signal(3,1,0,"");
  // first do a range check for 0x8000 to 0x7FFF
  (void)rc;
}

void _imp_readint(int *dest) {
  int num;
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%d", dest);
  // if (rc != 1) _imp_signal(3,1,0,"");
  // first do a range check for 0x80000000 to 0x7FFFFFFF
  (void)rc;
}

void _imp_readlong(long long int *dest) {
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%lld", dest);
  // if (rc != 1) _imp_signal(3,1,0,"");
  (void)rc;
}

void _imp_readfloat(float *dest) {
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%f", dest);
  // if (rc != 1) _imp_signal(3,1,0,"");
  // possible warning for loss of precision?
  (void)rc;
}

void _imp_readdouble(double *dest) {
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  int rc = fscanf(_imp_INFILE, "%lf", dest);
  // if (rc != 1) _imp_signal(3,1,0,"");
  (void)rc;
}

void _imp_readitem(_imp_string *S) {
  // tostring(readsymbol)
  check_instream(__PRETTY_FUNCTION__);
  _imp_issue_prompt();
  fprintf(stderr, "* READITEM not implemented\n");
  exit(1);
}
