diff options
| -rw-r--r-- | engines/glk/alan2/acode.h | 19 | ||||
| -rw-r--r-- | engines/glk/alan2/args.cpp | 234 | ||||
| -rw-r--r-- | engines/glk/alan2/args.h | 2 | ||||
| -rw-r--r-- | engines/glk/alan2/debug.cpp | 32 | ||||
| -rw-r--r-- | engines/glk/alan2/exe.cpp | 204 | ||||
| -rw-r--r-- | engines/glk/alan2/inter.cpp | 10 | ||||
| -rw-r--r-- | engines/glk/alan2/main.cpp | 254 | ||||
| -rw-r--r-- | engines/glk/alan2/parse.cpp | 46 | ||||
| -rw-r--r-- | engines/glk/alan2/readline.cpp | 506 | ||||
| -rw-r--r-- | engines/glk/alan2/rules.cpp | 12 | ||||
| -rw-r--r-- | engines/glk/alan2/sysdep.cpp | 183 | ||||
| -rw-r--r-- | engines/glk/alan2/sysdep.h | 288 | ||||
| -rw-r--r-- | engines/glk/alan2/term.cpp | 75 | ||||
| -rw-r--r-- | engines/glk/alan2/types.h | 4 | 
14 files changed, 48 insertions, 1821 deletions
| diff --git a/engines/glk/alan2/acode.h b/engines/glk/alan2/acode.h index ef218dd3a6..8cb3c8149b 100644 --- a/engines/glk/alan2/acode.h +++ b/engines/glk/alan2/acode.h @@ -36,29 +36,10 @@ typedef uint32 Abool;           /* Type for an ACODE Boolean value */  typedef int32 Aint;             /* Type for an ACODE Integer value */  typedef int CodeValue;          /* Definition for the packing process */ -#ifdef UNUSED -#if INT_MAX==0x7fffffff -typedef unsigned int Aword;     /* Type for an ACODE word */ -typedef unsigned int Aaddr;     /* Type for an ACODE address */ -typedef unsigned int Abool;     /* Type for an ACODE Boolean value */ -typedef signed   int Aint;      /* Type for an ACODE Integer value */ -typedef int CodeValue;          /* Definition for the packing process */ -#elif LONG_MAX==0x7fffffff -typedef unsigned long Aword;    /* Type for an ACODE word */ -typedef unsigned long Aaddr;    /* Type for an ACODE address */ -typedef unsigned long Abool;    /* Type for an ACODE Boolean value */ -typedef signed   long Aint;     /* Type for an ACODE Integer value */ -typedef long CodeValue;         /* Definition for the packing process */ -#else -#error "Can't find a 32-bit integer type" -#endif -#endif -  /* Constants for the Acode file, words/block & bytes/block */  #define BLOCKLEN 256L  #define BLOCKSIZE (BLOCKLEN*sizeof(Aword)) -  /* Definitions for the packing process */  #define VALUEBITS 16 diff --git a/engines/glk/alan2/args.cpp b/engines/glk/alan2/args.cpp index caf32c1bec..2f760aedbb 100644 --- a/engines/glk/alan2/args.cpp +++ b/engines/glk/alan2/args.cpp @@ -21,208 +21,21 @@   */  #include <string> -#ifndef __PACIFIC__ -#include "glk/alan2/args.h" -#else -/* I have no idea at all why the include does not work in Pacific C ... */ -extern void args(int argc, char* argv[]); -#endif - -#include "glk/alan2/main.h" - -#ifdef __mac__ -#include "glk/alan2/macArgs.h" -#endif - -#ifdef __amiga__ -#include <libraries/dosextens.h> -#ifdef AZTEC_C -struct FileHandle *con = NULL; -#else -/* Geek Gadgets GCC */ -BPTR window; -BPTR cd; -#endif -#endif - -#ifdef GLK  #include "glk/alan2/alan2.h" +#include "glk/alan2/args.h"  #include "glk/alan2/glkio.h" +#include "glk/alan2/main.h"  #include "glk/alan2/sysdep.h" -#endif  namespace Glk {  namespace Alan2 {  static void switches(unsigned argc, char *argv[]) { -#ifndef GLK -  uint i; -   -  advnam = ""; -  for (i = 1; i < argc; i++) { -    if (argv[i][0] == '-') { -#ifdef GLK -      switch (g_vm->glk_char_to_lower(argv[i][1])) { -#else -      switch (tolower(argv[i][1])) { -#endif -      case 'i': -	errflg = FALSE; -	break; -      case 't': -	trcflg = TRUE; -	break; -      case 'd': -	dbgflg = TRUE; -	break; -      case 's': -	trcflg = TRUE; -	stpflg = TRUE; -	break; -      case 'l': -	logflg = TRUE; -	break; -      case 'v': -	verbose = TRUE; -	break; -      case 'n': -	statusflg = FALSE; -	break; -      default: -	printf("Unrecognized switch, -%c\n", argv[i][1]); -	usage(); -	terminate(0); -      } -    } else { -      advnam = argv[i]; -      if (strcmp(&advnam[strlen(advnam)-4], ".acd") == 0 -	  || strcmp(&advnam[strlen(advnam)-4], ".ACD") == 0 -	  || strcmp(&advnam[strlen(advnam)-4], ".dat") == 0 -	  || strcmp(&advnam[strlen(advnam)-4], ".DAT") == 0) -		advnam[strlen(advnam)-4] = '\0'; -    } -  } -#endif -} - - - -#ifdef __amiga__ - -#include <intuition/intuition.h> -#include <workbench/workbench.h> - -#include <clib/exec_protos.h> -#include <clib/dos_protos.h> -#include <clib/icon_protos.h> - -#include <fcntl.h> - -extern struct Library *IconBase; - -#ifndef AZTEC_C -/* Actually Geek Gadgets GCC with libnix */ - -/* Aztec C has its own pre-main wbparse which was used in Arun 2.7, with GCC we -   need to do it ourselves. */ - -#include <clib/intuition_protos.h> - -extern unsigned long *__stdfiledes; /* The libnix standard I/O file descriptors */ - -void -wb_parse(void) -{ -  char *cp; -  struct DiskObject *dop; -  struct FileHandle *fhp; - -  if (_WBenchMsg->sm_NumArgs == 1) /* If no argument use program icon/info */ -    dop = GetDiskObject((UBYTE *)_WBenchMsg->sm_ArgList[0].wa_Name); -  else { -    BPTR olddir = CurrentDir(_WBenchMsg->sm_ArgList[1].wa_Lock); -    dop = GetDiskObject((UBYTE *)_WBenchMsg->sm_ArgList[1].wa_Name); -    CurrentDir(olddir); -  } -  if (dop != 0 && (cp = (char *)FindToolType((UBYTE **)dop->do_ToolTypes,  -					     (UBYTE *)"WINDOW")) != NULL) -    ; -  else /* Could not find a WINDOW tool type */ -    cp = "CON:10/10/480/160/Arun:Default Window/CLOSE"; -  if ((window = Open((UBYTE *)cp, (long)MODE_OLDFILE))) { -    fhp = (struct FileHandle *) ((long)window << 2); -    SetConsoleTask(fhp->fh_Type); -    SelectInput(window); -    SelectOutput(window); -    __stdfiledes[0] = Input(); -    __stdfiledes[1] = Output(); -  } else -    exit(-1L); -  FreeDiskObject(dop);  } -#endif -#endif  void args(int argc, char * argv[]) {    char *prgnam; -#ifdef __mac__ -#include <console.h> -#ifdef __MWERKS__ -#include <SIOUX.h> -#endif -  short msg, files; -  static char advbuf[256], prgbuf[256]; -  /*AppFile af;*/ -  OSErr oe; - -#ifdef __MWERKS__ -  /*SIOUXSettings.setupmenus = FALSE;*/ -  SIOUXSettings.autocloseonquit = FALSE; -  SIOUXSettings.asktosaveonclose = FALSE; -  SIOUXSettings.showstatusline = FALSE; -#endif - -	GetMacArgs(advbuf); -	advnam = advbuf; - -#else -#ifdef __amiga__ - -  if (argc == 0) { /* If started from Workbench get WbArgs : Aztec C & GG GCC */ -    struct WBStartup *WBstart; - -    if ((IconBase = OpenLibrary("icon.library", 0)) == NULL) -      syserr("Could not open 'icon.library'"); -    /* If started from WB normal main is called with argc == 0 and argv = WBstartup message */ -    WBstart = (struct WBStartup *)argv; -#ifndef AZTEC_C -    /* Geek Gadgets GCC */ -    wb_parse(); -#endif -    advnam = prgnam = WBstart->sm_ArgList[0].wa_Name; -    if (WBstart->sm_NumArgs > 0) { -      cd = CurrentDir(DupLock(WBstart->sm_ArgList[1].wa_Lock)); -      advnam = WBstart->sm_ArgList[1].wa_Name; -    } -    /* Possibly other tooltypes ... */ -  } else { -    /* Started from a CLI */ -    if ((prgnam = strrchr(argv[0], '/')) == NULL -	&& (prgnam = strrchr(argv[0], ':')) == NULL) -      prgnam = argv[0]; -    else -      prgnam++; -    /* Now look at the switches and arguments */ -    switches(argc, argv); -    if (advnam[0] == '\0') -      /* No game given, try program name */ -      if (stricmp(prgnam, PROGNAME) != 0 -          && strstr(prgnam, PROGNAME) == 0) -	advnam = strdup(argv[0]); -  } -#else -#if defined(__dos__) || defined(__win__)    if ((prgnam = strrchr(argv[0], '\\')) == NULL        && (prgnam = strrchr(argv[0], '/')) == NULL        && (prgnam = strrchr(argv[0], ':')) == NULL) @@ -240,49 +53,6 @@ void args(int argc, char * argv[]) {      if (stricmp(prgnam, PROGNAME) != 0          && strstr(prgnam, PROGNAME) == 0)        advnam = strdup(argv[0]); -#else -#if defined __vms__ -  if ((prgnam = strrchr(argv[0], ']')) == NULL -      && (prgnam = strrchr(argv[0], '>')) == NULL -      && (prgnam = strrchr(argv[0], ':')) == NULL) -    prgnam = argv[0]; -  else -    prgnam++; -  if (strrchr(prgnam, ';') != NULL) -    *strrchr(prgnam, ';') = '\0'; -  if (strlen(prgnam) > 4 -      && (strcmp(&prgnam[strlen(prgnam)-4], ".EXE") == 0 -	  || strcmp(&prgnam[strlen(prgnam)-4], ".exe") == 0)) -    prgnam[strlen(prgnam)-4] = '\0'; -  /* Now look at the switches and arguments */ -  switches(argc, argv); -  if (advnam[0] == '\0') -    /* No game given, try program name */ -    if (strcmp(prgnam, PROGNAME) != 0 -        && strstr(prgnam, PROGNAME) == 0) -      advnam = strdup(argv[0]); -#else -#if defined(__unix__) || defined(__APPLE__) -  if ((prgnam = strrchr(argv[0], '/')) == NULL) -    prgnam = strdup(argv[0]); -  else -    prgnam = strdup(&prgnam[1]); -  if (strrchr(prgnam, ';') != NULL) -    *strrchr(prgnam, ';') = '\0'; -  /* Now look at the switches and arguments */ -  switches(argc, argv); -  if (advnam[0] == '\0') -    /* No game given, try program name */ -    if (strcmp(prgnam, PROGNAME) != 0 -        && strstr(prgnam, PROGNAME) == 0) -      advnam = strdup(argv[0]); -#else -  Unimplemented OS! -#endif -#endif -#endif -#endif -#endif  }  } // End of namespace Alan2 diff --git a/engines/glk/alan2/args.h b/engines/glk/alan2/args.h index dc2f0883a5..6eb32459c9 100644 --- a/engines/glk/alan2/args.h +++ b/engines/glk/alan2/args.h @@ -34,9 +34,7 @@  namespace Glk {  namespace Alan2 { -#ifndef PROGNAME  #define PROGNAME "alan2" -#endif  extern void args(int argc, char *argv[]); diff --git a/engines/glk/alan2/debug.cpp b/engines/glk/alan2/debug.cpp index 785cd54cbc..3c67fbe109 100644 --- a/engines/glk/alan2/debug.cpp +++ b/engines/glk/alan2/debug.cpp @@ -21,26 +21,15 @@   */  #include "glk/alan2/types.h" -#ifdef HAVE_SHORT_FILENAMES -#include "glk/alan2/av.h" -#else  #include "glk/alan2/alan_version.h" -#endif - -#ifdef USE_READLINE -#include "glk/alan2/readline.h" -#endif - +#include "glk/alan2/debug.h" +#include "glk/alan2/exe.h" +#include "glk/alan2/glkio.h"  #include "glk/alan2/inter.h"  #include "glk/alan2/main.h"  #include "glk/alan2/parse.h" -#include "glk/alan2/exe.h" - -#include "glk/alan2/debug.h" +#include "glk/alan2/readline.h" -#ifdef GLK -#include "glk/alan2/glkio.h" -#endif  namespace Glk {  namespace Alan2 { @@ -55,9 +44,6 @@ static void showatrs(Aword atradr) {    i = 1;    for (at = (AtrElem *) addrTo(atradr); !endOfTable(at); at++) {      sprintf(str, "$i%3ld: %ld (%s)", (long) i, (unsigned long) at->val, (char *) addrTo(at->stradr)); -#if ISO == 0 -    fromIso(str, str); -#endif      output(str);      i++;    } @@ -258,9 +244,6 @@ static void showevts() {    output("EVENTS:");    for (evt = EVTMIN; evt <= EVTMAX; evt++) {      sprintf(str, "$i%d (%s):", evt, (char *)addrTo(evts[evt-EVTMIN].stradr)); -#if ISO == 0 -    fromIso(str, str); -#endif      output(str);      scheduled = FALSE;      for (i = 0; i < etop; i++) @@ -304,11 +287,8 @@ void debug() {        para();      do {        output("ABUG> "); -#ifdef USE_READLINE -      (void) readline(buf); -#else -      fgets(buf, 255, stdin); -#endif +      (void)readline(buf); +        lin = 1;        c = buf[0];        i = 0; diff --git a/engines/glk/alan2/exe.cpp b/engines/glk/alan2/exe.cpp index d91c3aafc7..3cd16d8721 100644 --- a/engines/glk/alan2/exe.cpp +++ b/engines/glk/alan2/exe.cpp @@ -20,21 +20,16 @@   *   */ -#include "glk/alan2/types.h"  #include "glk/alan2/alan2.h" - -#ifdef USE_READLINE -#include "glk/alan2/readline.h" -#endif - +#include "glk/alan2/types.h" +#include "glk/alan2/exe.h" +#include "glk/alan2/inter.h"  #include "glk/alan2/main.h"  #include "glk/alan2/parse.h" -#include "glk/alan2/inter.h" +#include "glk/alan2/readline.h"  #include "glk/alan2/stack.h"  #include "glk/alan2/decode.h" -#include "glk/alan2/exe.h" -  namespace Glk {  namespace Alan2 { @@ -97,9 +92,6 @@ void print(Aword fpos, Aword len) {  	str[i] = ch;        }        str[i] = '\0'; -#if ISO == 0 -      fromIso(str, str); -#endif        output(str);      }      /* And restore */ @@ -168,11 +160,7 @@ Boolean confirm(MsgKind msgno) {       it could be affirmative, but for now any input is NOT! */    prmsg(msgno); -#ifdef USE_READLINE    if (!readline(buf)) return TRUE; -#else -  if (gets(buf) == NULL) return TRUE; -#endif    col = 1;    return (buf[0] == '\0'); @@ -187,11 +175,8 @@ void quit() {      col = 1;      statusline();      prmsg(M_QUITACTION); -#ifdef USE_READLINE      if (!readline(buf)) terminate(0); -#else -    if (gets(buf) == NULL) terminate(0); -#endif +  	if (strcmp(buf, "restart") == 0)  		//longjmp(restart_label, TRUE);  		::error("TODO: restart"); @@ -1082,95 +1067,10 @@ static char savfnm[256];    */ -#ifdef GARGLK  void save() {  	g_vm->saveGame();  } -#else - -void save() { -  int i; -  char str[256]; -  AtrElem *atr; -  FILE *savfil; - -  /* First save ? */ -  if (savfnm[0] == '\0') { -    strcpy(savfnm, advnam); -    strcat(savfnm, ".sav"); -  } -  prmsg(M_SAVEWHERE); -  sprintf(str, "(%s) : ", savfnm); -  output(str); - -#ifdef USE_READLINE -  readline(str); -#else -  gets(str); -#endif - -frefid_t fref; -fref = g_vm->glk_fileref_create_by_prompt(fileusage_SavedGame, filemode_Write, 0); -if (fref == NULL) -	error(M_SAVEFAILED); -strcpy(str, g_vm->garglk_fileref_get_name(fref)); -g_vm->glk_fileref_destroy(fref); - -  if (str[0] == '\0') -    strcpy(str, savfnm); -  col = 1; -  if ((savfil = fopen(str, READ_MODE)) != NULL) -    /* It already existed */ -    if (!confirm(M_SAVEOVERWRITE)) -      error(MSGMAX);            /* Return to player without saying anything */ -  if ((savfil = fopen(str, WRITE_MODE)) == NULL) -    error(M_SAVEFAILED); -  strcpy(savfnm, str); - -  /* Save version of interpreter and name of game */ -  fwrite((void *)&header->vers, sizeof(Aword), 1, savfil); -  fwrite((void *)advnam, strlen(advnam)+1, 1, savfil); -  /* Save current values */ -  fwrite((void *)&cur, sizeof(cur), 1, savfil); -  /* Save actors */ -  for (i = ACTMIN; i <= ACTMAX; i++) { -    fwrite((void *)&acts[i-ACTMIN].loc, sizeof(Aword), 1, savfil); -    fwrite((void *)&acts[i-ACTMIN].script, sizeof(Aword), 1, savfil); -    fwrite((void *)&acts[i-ACTMIN].step, sizeof(Aword), 1, savfil); -    fwrite((void *)&acts[i-ACTMIN].count, sizeof(Aword), 1, savfil); -    if (acts[i-ACTMIN].atrs) -      for (atr = (AtrElem *) addrTo(acts[i-ACTMIN].atrs); !endOfTable(atr); atr++) -	fwrite((void *)&atr->val, sizeof(Aword), 1, savfil); -  } - -  /* Save locations */ -  for (i = LOCMIN; i <= LOCMAX; i++) { -    fwrite((void *)&locs[i-LOCMIN].describe, sizeof(Aword), 1, savfil); -    if (locs[i-LOCMIN].atrs) -      for (atr = (AtrElem *) addrTo(locs[i-LOCMIN].atrs); !endOfTable(atr); atr++) -	fwrite((void *)&atr->val, sizeof(Aword), 1, savfil); -  } - -  /* Save objects */ -  for (i = OBJMIN; i <= OBJMAX; i++) { -    fwrite((void *)&objs[i-OBJMIN].loc, sizeof(Aword), 1, savfil); -    if (objs[i-OBJMIN].atrs) -      for (atr = (AtrElem *) addrTo(objs[i-OBJMIN].atrs); !endOfTable(atr); atr++) -	fwrite((void *)&atr->val, sizeof(atr->val), 1, savfil); -  } - -  /* Save the event queue */ -  eventq[etop].time = 0;        /* Mark the top */ -  fwrite((void *)&eventq[0], sizeof(eventq[0]), etop+1, savfil); - -  /* Save scores */ -  for (i = 0; scores[i] != EOF; i++) -    fwrite((void *)&scores[i], sizeof(Aword), 1, savfil); - -  fclose(savfil); -} -#endif  /*---------------------------------------------------------------------- @@ -1178,104 +1078,10 @@ g_vm->glk_fileref_destroy(fref);    */ -#ifdef GARGLK  void restore() {  	g_vm->loadGame();  } -#else - -void restore() { -  int i,tmp; -  FILE *savfil; -  char str[256]; -  AtrElem *atr; -  char savedVersion[4]; -  char savedName[256]; - -  /* First save ? */ -  if (savfnm[0] == '\0') { -    strcpy(savfnm, advnam); -    strcat(savfnm, ".sav"); -  } -  prmsg(M_RESTOREFROM); -  sprintf(str, "(%s) : ", savfnm); -  output(str); -#ifdef USE_READLINE -  readline(str); -#else -  gets(str); -#endif - -  if (str[0] == '\0') -    strcpy(str, savfnm); -  col = 1; -  if (str[0] == '\0') -    strcpy(str, savfnm);        /* Use the name temporarily */ -  if ((savfil = fopen(str, READ_MODE)) == NULL) -    error(M_SAVEMISSING); -  strcpy(savfnm, str);          /* Save it for future use */ - -  tmp = fread((void *)&savedVersion, sizeof(Aword), 1, savfil); -  /* 4f - save file version check doesn't seem to work on PC's! */ -  if (strncmp(savedVersion, header->vers, 4)) { -    fclose(savfil); -    error(M_SAVEVERS); -    return; -  } -  i = 0; -  while ((savedName[i++] = fgetc(savfil)) != '\0'); -  if (strcmp(savedName, advnam) != 0) { -    fclose(savfil); -    error(M_SAVENAME); -    return; -  } - -  /* Restore current values */ -  tmp = fread((void *)&cur, sizeof(cur), 1, savfil); -  /* Restore actors */ -  for (i = ACTMIN; i <= ACTMAX; i++) { -    tmp = fread((void *)&acts[i-ACTMIN].loc, sizeof(Aword), 1, savfil); -    tmp = fread((void *)&acts[i-ACTMIN].script, sizeof(Aword), 1, savfil); -    tmp = fread((void *)&acts[i-ACTMIN].step, sizeof(Aword), 1, savfil); -    tmp = fread((void *)&acts[i-ACTMIN].count, sizeof(Aword), 1, savfil); -    if (acts[i-ACTMIN].atrs) -      for (atr = (AtrElem *) addrTo(acts[i-ACTMIN].atrs); !endOfTable(atr); atr++) -	tmp = fread((void *)&atr->val, sizeof(Aword), 1, savfil); -  } - -  /* Restore locations */ -  for (i = LOCMIN; i <= LOCMAX; i++) { -    tmp = fread((void *)&locs[i-LOCMIN].describe, sizeof(Aword), 1, savfil); -    if (locs[i-LOCMIN].atrs) -      for (atr = (AtrElem *) addrTo(locs[i-LOCMIN].atrs); !endOfTable(atr); atr++) -	tmp = fread((void *)&atr->val, sizeof(Aword), 1, savfil); -  } - -  /* Restore objects */ -  for (i = OBJMIN; i <= OBJMAX; i++) { -    tmp = fread((void *)&objs[i-OBJMIN].loc, sizeof(Aword), 1, savfil); -    if (objs[i-OBJMIN].atrs) -      for (atr = (AtrElem *) addrTo(objs[i-OBJMIN].atrs); !endOfTable(atr); atr++) -	tmp = fread((void *)&atr->val, sizeof(atr->val), 1, savfil); -  } - -  /* Restore the eventq */ -  etop = 0; -  do { -    tmp = fread((void *)&eventq[etop], sizeof(eventq[0]), 1, savfil); -    etop++; -  } while (eventq[etop-1].time != 0); -  etop--; - -  /* Restore scores */ -  for (i = 0; scores[i] != EOF; i++) -    tmp = fread((void *)&scores[i], sizeof(Aword), 1, savfil); - -  fclose(savfil); -} - -#endif  /*---------------------------------------------------------------------- diff --git a/engines/glk/alan2/inter.cpp b/engines/glk/alan2/inter.cpp index 1d52b74acc..5e2827f482 100644 --- a/engines/glk/alan2/inter.cpp +++ b/engines/glk/alan2/inter.cpp @@ -22,18 +22,14 @@  #include <string>  #include "glk/alan2/types.h" +#include "glk/alan2/exe.h" +#include "glk/alan2/inter.h" +#include "glk/alan2/glkio.h"  #include "glk/alan2/main.h"  #include "glk/alan2/parse.h" -#include "glk/alan2/exe.h"  #include "glk/alan2/stack.h"  #include "glk/alan2/sysdep.h" -#include "glk/alan2/inter.h" - -#ifdef GLK -#include "glk/alan2/glkio.h" -#endif -  namespace Glk {  namespace Alan2 { diff --git a/engines/glk/alan2/main.cpp b/engines/glk/alan2/main.cpp index 7f1aa8da05..6b06e0bd80 100644 --- a/engines/glk/alan2/main.cpp +++ b/engines/glk/alan2/main.cpp @@ -22,39 +22,22 @@  #define V27COMPATIBLE -#include "glk/alan2/sysdep.h" - -#include "glk/alan2/types.h" -#include "glk/alan2/main.h" - -//#include <time.h> -#ifdef USE_READLINE -#include "glk/alan2/readline.h" -#endif - -#ifdef HAVE_SHORT_FILENAMES -#include "glk/alan2/av.h" -#else +#include "glk/alan2/alan2.h"  #include "glk/alan2/alan_version.h" -#endif -  #include "glk/alan2/args.h" -#include "glk/alan2/parse.h" +#include "glk/alan2/debug.h" +#include "glk/alan2/exe.h" +#include "glk/alan2/glkio.h"  #include "glk/alan2/inter.h" -#include "glk/alan2/rules.h" -#ifdef REVERSED +#include "glk/alan2/main.h" +#include "glk/alan2/parse.h"  #include "glk/alan2/reverse.h" -#endif -#include "glk/alan2/debug.h" +#include "glk/alan2/rules.h"  #include "glk/alan2/stack.h" -#include "glk/alan2/exe.h" +#include "glk/alan2/sysdep.h" +#include "glk/alan2/types.h"  #include "glk/alan2/term.h" - -#ifdef GLK  #include "common/file.h" -#include "glk/alan2/alan2.h" -#include "glk/alan2/glkio.h" -#endif  namespace Glk {  namespace Alan2 { @@ -132,45 +115,12 @@ Boolean skipsp = FALSE;   */  void terminate(int code) { -#ifdef __amiga__ -#ifdef AZTEC_C -#include <fcntl.h> -  extern struct _dev *_devtab; -  char buf[85]; -   -  if (con) { /* Running from WB, created a console so kill it */ -    /* Running from WB, so we created a console and -       hacked the Aztec C device table to use it for all I/O -       so now we need to make it close it (once!) */ -    _devtab[1].fd = _devtab[2].fd = 0; -  } else -#else -  /* Geek Gadgets GCC */ -#include <workbench/startup.h> -#include <clib/dos_protos.h> -#include <clib/intuition_protos.h> - -  if (_WBenchMsg != NULL) { -    Close(window); -    if (_WBenchMsg->sm_ArgList != NULL) -      UnLock(CurrentDir(cd)); -  } else -#endif -#endif      newline();    free(memory);    if (logflg)      fclose(logfil); -#ifdef __MWERKS__ -  printf("Command-Q to close window."); -#endif - -#ifdef GLK    g_vm->glk_exit(); -#else -  exit(code); -#endif  }  /*====================================================================== @@ -182,9 +132,8 @@ void usage() {    printf("Usage:\n\n");    printf("    %s [<switches>] <adventure>\n\n", PROGNAME);    printf("where the possible optional switches are:\n"); -#ifdef GLK    g_vm->glk_set_style(style_Preformatted); -#endif +    printf("    -v    verbose mode\n");    printf("    -l    log player commands and game output to a file\n");    printf("    -i    ignore version and checksum errors\n"); @@ -192,9 +141,7 @@ void usage() {    printf("    -d    enter debug mode\n");    printf("    -t    trace game execution\n");    printf("    -s    single instruction trace\n"); -#ifdef GLK    g_vm->glk_set_style(style_Normal); -#endif  } @@ -206,34 +153,7 @@ void usage() {   */  void syserr(const char *str) { -#ifdef GLK  	::error("%s", str); -#else -  output("$n$nAs you enter the twilight zone of Adventures, you stumble \ -and fall to your knees. In front of you, you can vaguely see the outlines \ -of an Adventure that never was.$n$nSYSTEM ERROR: "); -  output(str); -  output("$n$n"); - -  if (logflg) -    fclose(logfil); -  newline(); - -#ifdef __amiga__ -#ifdef AZTEC_C -  { -    char buf[80]; - -    if (con) { /* Running from WB, wait for user ack. */ -      printf("press RETURN to quit"); -      gets(buf); -    } -  } -#endif -#endif - -  terminate(0); -#endif  } @@ -263,7 +183,6 @@ void error(MsgKind msgno /* IN - The error message number */) {    */  void statusline() { -#ifdef GLK    uint glkWidth;    char line[100];    int pcol = col; @@ -295,31 +214,6 @@ needsp = FALSE;    col = pcol;    g_vm->glk_set_window(glkMainWin); -#else -#ifdef HAVE_ANSI -  char line[100]; -  int i; -  int pcol = col; - -  if (!statusflg) return; -  /* ansi_position(1,1); ansi_bold_on(); */ -  printf("\x1b[1;1H"); -  printf("\x1b[7m"); -  col = 1; -  say(where(HERO)); -  if (header->maxscore > 0) -    sprintf(line, "Score %ld(%ld)/%ld moves", cur.score, (int)header->maxscore, cur.tick); -  else -    sprintf(line, "%ld moves", cur.tick); -  for (i=0; i < pagwidth - col - strlen(line); i++) putchar(' '); -  printf(line); -  printf("\x1b[m"); -  printf("\x1b[%d;1H", paglen); -  needsp = FALSE; - -  col = pcol; -#endif -#endif  } @@ -345,29 +239,7 @@ void logprint(char str[]) {   */  void newline() { -#ifdef GLK  	g_vm->glk_put_char('\n'); -#else -  char buf[256]; -   -  col = 1; -  if (lin >= paglen - 1) { -    logprint("\n"); -    needsp = FALSE; -    prmsg(M_MORE); -#ifdef USE_READLINE -    (void) readline(buf); -#else -    fgets(buf, 256, stdin); -#endif -    getPageSize(); -    lin = 0; -  } else -    logprint("\n"); -   -  lin++; -  needsp = FALSE; -#endif  } @@ -393,15 +265,7 @@ void para() {   */  void clear() { -#ifdef GLK  	g_vm->glk_window_clear(glkMainWin); -#else -#ifdef HAVE_ANSI -  if (!statusflg) return; -  printf("\x1b[2J"); -  printf("\x1b[%d;1H", paglen); -#endif -#endif  } @@ -430,37 +294,7 @@ void *allocate(unsigned long len /* IN - Length to allocate */) {   */  static void just(char str[]) { -#ifdef GLK    logprint(str); -#else -  int i; -  char ch; -   -  if (col >= pagwidth && !skipsp) -    newline(); - -  while (strlen(str) > pagwidth - col) { -    i = pagwidth - col - 1; -    while (!isSpace(str[i]) && i > 0) /* First find wrap point */ -      i--; -    if (i == 0 && col == 1)	/* If it doesn't fit at all */ -      /* Wrap immediately after this word */ -      while (!isSpace(str[i]) && str[i] != '\0') -	i++; -    if (i > 0) {		/* If it fits ... */ -      ch = str[i];		/* Save space or NULL */ -      str[i] = '\0';		/* Terminate string */ -      logprint(str);		/* and print it */ -      skipsp = FALSE;		/* If skipping, now we're done */ -      str[i] = ch;		/* Restore character */ -      /* Skip white after printed portion */ -      for (str = &str[i]; isSpace(str[0]) && str[0] != '\0'; str++); -    } -    newline();			/* Then start a new line */ -  } -  logprint(str);			/* Print tail */ -  col = col + strlen(str);	/* Update column */ -#endif  } @@ -712,46 +546,6 @@ Boolean exitto(int to, int from) {  } -#ifdef CHECKOBJ -/*====================================================================== - -  checkobj() - -  Check that the object given is valid, else print an error message -  or find out what he wanted. - -  This routine is not used any longer, kept for sentimental reasons ;-) - -  */ -void checkobj(obj) -     Aword *obj; -{ -  Aword oldobj; -   -  if (*obj != EOF) -    return; -   -  oldobj = EOF; -  for (cur.obj = OBJMIN; cur.obj <= OBJMAX; cur.obj++) { -    /* If an object is present and it is possible to perform his action */ -    if (isHere(cur.obj) && possible()) -      if (oldobj == EOF) -	oldobj = cur.obj; -      else -	error(WANT);          /* And we didn't find multiple objects */ -    } -   -  if (oldobj == EOF) -    error(WANT);              /* But we found ONE */ -   -  *obj = cur.obj = oldobj;     -  output("($o)");             /* Then he surely meant this object */ -} -#endif - - - -  /*----------------------------------------------------------------------    count() @@ -1326,9 +1120,6 @@ static void load() {      crc += (memory[i]>>8)&0xff;      crc += (memory[i]>>16)&0xff;      crc += (memory[i]>>24)&0xff; -#ifdef CRCLOG -    printf("%6x\t%6lx\t%6lx\n", i, crc, memory[i]); -#endif    }    if (crc != tmphdr.acdcrc) {      sprintf(err, "Checksum error in .ACD file (0x%lx instead of 0x%lx).", @@ -1379,13 +1170,6 @@ static void checkdebug() {      trcflg = FALSE;      stpflg = FALSE;    } - -#ifndef GLK -  if (dbgflg)			/* If debugging */ -    srand(0);			/* use no randomization */ -  else -    srand(time(0));		/* seed random generator */ -#endif  } @@ -1590,26 +1374,11 @@ static void openFiles() {    char *usr = "";    time_t tick; -#ifndef GLK -  /* Open Acode file */ -  strcpy(codfnm, advnam); -  strcat(codfnm, ".acd"); - -  if ((codfil = fopen(codfnm, READ_MODE)) == NULL) { -    strcpy(str, "Can't open adventure code file '"); -    strcat(str, codfnm); -    strcat(str, "'."); -    syserr(str); -  } -#endif - -#ifdef GARGLK  	{  		char *s = strrchr(codfnm, '\\');  		if (!s) s = strrchr(codfnm, '/');  		g_vm->garglk_set_story_name(s ? s + 1 : codfnm);  	} -#endif  	/* Open Text file */  	strcpy(txtfnm, advnam); @@ -1650,9 +1419,6 @@ void run() {  	init();			/* Load, initialise and start the adventure */  	while (TRUE) { -#ifdef MALLOC -		if (malloc_verify() == 0) syserr("Error in heap."); -#endif  		if (dbgflg)  			debug(); diff --git a/engines/glk/alan2/parse.cpp b/engines/glk/alan2/parse.cpp index a399605107..d83755bada 100644 --- a/engines/glk/alan2/parse.cpp +++ b/engines/glk/alan2/parse.cpp @@ -22,24 +22,16 @@  #include <string>  #include "glk/alan2/alan2.h" -#include "glk/alan2/types.h" - -#ifdef USE_READLINE -#include "glk/alan2/readline.h" -#endif - -#include "glk/alan2/main.h" -#include "glk/alan2/inter.h" -#include "glk/alan2/exe.h" -#include "glk/alan2/term.h"  #include "glk/alan2/debug.h" +#include "glk/alan2/exe.h" +#include "glk/alan2/glkio.h" +#include "glk/alan2/inter.h" +#include "glk/alan2/main.h"  #include "glk/alan2/params.h" -  #include "glk/alan2/parse.h" - -#ifdef GLK -#include "glk/alan2/glkio.h" -#endif +#include "glk/alan2/readline.h" +#include "glk/alan2/term.h" +#include "glk/alan2/types.h"  namespace Glk {  namespace Alan2 { @@ -103,9 +95,6 @@ static void unknown(char token[]) {    str[0] = '\'';    strcpy(&str[1], token);    strcat(str, "'?"); -#if ISO == 0 -  fromIso(str, str); -#endif    output(str);    free(str);    eol = TRUE; @@ -164,13 +153,12 @@ static char *gettoken(char *buf) {  static void agetline() {    para();    do { -#if defined(HAVE_ANSI) || defined(GLK)      statusline(); -#endif +      printf("> ");      if (logflg)        fprintf(logfil, "> "); -#ifdef USE_READLINE +      if (!readline(buf)) {  		if (g_vm->shouldQuit())  			return; @@ -178,25 +166,13 @@ static void agetline() {        newline();        quit();      } -#else -    if (fgets(buf, LISTLEN, stdin) == NULL) { -      newline(); -      quit(); -    } -#endif +      getPageSize();      anyOutput = FALSE;      if (logflg) -#ifndef __amiga__        fprintf(logfil, "%s\n", buf); -#else -      fprintf(logfil, "%s", buf); -#endif -#if ISO == 0 -    toIso(isobuf, buf, NATIVECHARSET); -#else      strcpy(isobuf, buf); -#endif +      token = gettoken(isobuf);      if (token != NULL && strcmp("debug", token) == 0 && header->debug) {        dbgflg = TRUE; diff --git a/engines/glk/alan2/readline.cpp b/engines/glk/alan2/readline.cpp index 5f1192df5a..7569721f22 100644 --- a/engines/glk/alan2/readline.cpp +++ b/engines/glk/alan2/readline.cpp @@ -20,14 +20,11 @@   *   */ -#include "glk/alan2/types.h" - -#ifdef GLK -  #include "glk/alan2/alan2.h" -#include "glk/alan2/readline.h" -#include "glk/alan2/main.h" +#include "glk/alan2/types.h"  #include "glk/alan2/glkio.h" +#include "glk/alan2/main.h" +#include "glk/alan2/readline.h"  namespace Glk {  namespace Alan2 { @@ -65,500 +62,3 @@ Boolean readline(char usrbuf[])  } // End of namespace Alan2  } // End of namespace Glk -#else - -#include "glk/alan2/sysdep.h" - -#ifdef HAVE_TERMIO -#include <termios.h> -#endif - -#ifdef __PACIFIC__ -#include <unixio.h> -#else -//#include <unistd.h> -#endif - -#include "glk/alan2/readline.h" - -#include "glk/alan2/main.h" - -namespace Glk { -namespace Alan2 { - -#ifdef HAVE_TERMIO -/*----------------------------------------------------------------------*\ - -  termio handling - -\*----------------------------------------------------------------------*/ - -static struct termios term; - -static void newtermio() -{ -  struct termios newterm; -  tcgetattr(0, &term); -  newterm=term; -  newterm.c_lflag&=~(ECHO|ICANON); -  newterm.c_cc[VMIN]=1; -  newterm.c_cc[VTIME]=0; -  tcsetattr(0, TCSANOW, &newterm); -} - -static void restoretermio() -{ -  tcsetattr(0, TCSANOW, &term); -} - -#endif - - -/*----------------------------------------------------------------------*\ - -  Global character buffers etc. - -\*----------------------------------------------------------------------*/ - -static unsigned char buffer[LINELENGTH+1]; -static int bufidx; - -static unsigned char *history[HISTORYLENGTH]; -static int histidx;		/* Index where to store next history */ -static int histp;		/* Points to the history recalled last */ - -static unsigned char ch; -static int endOfInput = 0; -static Boolean change; -static Boolean insert = TRUE; - - -/*----------------------------------------------------------------------*\ - -  Character map types and maps - -\*----------------------------------------------------------------------*/ - -typedef struct {unsigned char min, max; void (*hook)(char ch);} KeyMap; - -/* Forward declaration of hooks */ -static void escHook(char ch); -static void insertCh(char ch); -static void arrowHook(char ch); -static void upArrow(char ch); -static void downArrow(char ch); -static void rightArrow(char ch); -static void leftArrow(char ch); -static void insertToggle(char ch); -static void newLine(char ch); -static void delFwd(char ch); -static void delBwd(char ch); - -#ifdef __XXunix__ -static KeyMap keymap[] = { -  {0x00, 0x07, NULL}, -  {0x08, 0x08, delBwd}, -  {0x09, 0x09, NULL}, -  {0x0a, 0x0a, newLine}, -  {0x1b, 0x1b, escHook}, -  {0x1c, 0x7e, insertCh}, -  {0x7f, 0x7f, delFwd}, -  {0x80, 0xff, insertCh}, -  {0x00, 0x00, NULL} -}; - -/* I can't figure out what really coverns the esc-map characters... */ -#ifdef __solarisX__ -static KeyMap escmap[] = { -  {0x00, 0x4e, NULL}, -  {0x4f, 0x4f, arrowHook}, -  {0x50, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; -#else -static KeyMap escmap[] = { -  {0x00, 0x5a, NULL}, -  {0x5b, 0x5b, arrowHook}, -  {0x5c, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; -#endif - -static KeyMap arrowmap[] = { -  {0x00, 0x31, NULL}, -  {0x32, 0x32, insertToggle}, -  {0x33, 0x40, NULL}, -  {0x41, 0x41, upArrow}, -  {0x42, 0x42, downArrow}, -  {0x43, 0x43, rightArrow}, -  {0x44, 0x44, leftArrow}, -  {0x45, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; - -#endif - -#ifdef __win__ -static KeyMap keymap[] = { -  {0x00, 0x01, NULL}, -  {0x02, 0x02, leftArrow}, -  {0x03, 0x05, NULL}, -  {0x06, 0x06, rightArrow}, -  {0x07, 0x07, NULL}, -  {0x08, 0x08, delBwd}, -  {0x09, 0x09, NULL}, -  {0x0a, 0x0a, newLine}, -  {0x1b, 0x1b, escHook}, -  {0x1c, 0x7e, insertCh}, -  {0x7f, 0x7f, delFwd}, -  {0x80, 0xff, insertCh}, -  {0x00, 0x00, NULL} -}; - -static KeyMap escmap[] = { -  {0x00, 0x5a, NULL}, -  {0x5b, 0x5b, arrowHook}, -  {0x5c, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; - -static KeyMap arrowmap[] = { -  {0x00, 0x31, NULL}, -  {0x32, 0x32, insertToggle}, -  {0x33, 0x40, NULL}, -  {0x41, 0x41, upArrow}, -  {0x42, 0x42, downArrow}, -  {0x43, 0x43, rightArrow}, -  {0x44, 0x44, leftArrow}, -  {0x45, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; - -#endif - -#ifdef __dos__ -static KeyMap keymap[] = { -  {0x00, 0x01, NULL}, -  {0x02, 0x02, leftArrow}, -  {0x03, 0x05, NULL}, -  {0x06, 0x06, rightArrow}, -  {0x07, 0x07, NULL}, -  {0x08, 0x08, delBwd}, -  {0x09, 0x09, NULL}, -  {0x0a, 0x0a, newLine}, -  {0x1b, 0x1b, escHook}, -  {0x1c, 0x7e, insertCh}, -  {0x7f, 0x7f, delFwd}, -  {0x80, 0xff, insertCh}, -  {0x00, 0x00, NULL} -}; - -static KeyMap escmap[] = { -  {0x00, 0x5a, NULL}, -  {0x5b, 0x5b, arrowHook}, -  {0x5c, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; - -static KeyMap arrowmap[] = { -  {0x00, 0x31, NULL}, -  {0x32, 0x32, insertToggle}, -  {0x33, 0x40, NULL}, -  {0x41, 0x41, upArrow}, -  {0x42, 0x42, downArrow}, -  {0x43, 0x43, rightArrow}, -  {0x44, 0x44, leftArrow}, -  {0x45, 0xff, NULL}, -  {0x00, 0x00, NULL} -}; - -#endif - - -static void doBeep(void) -{ -  write(1, "\7", 1); -} - - -static void backspace(void) -{ -  write(1, "\b", 1); -} - - -static void erase() -{ -  int i; - -  for (i = 0; i < bufidx; i++) backspace(); /* Backup to beginning of text */ -  for (i = 0; i < strlen((char *)buffer); i++) write(1, " ", 1); /* Erase all text */ -  for (i = 0; i < strlen((char *)buffer); i++) backspace(); /* Backup to beginning of text */ -} - -/*----------------------------------------------------------------------*\ - -  Character handling hook functions - -\*----------------------------------------------------------------------*/ - -static void execute(KeyMap map[], unsigned char ch) -{ -  int i = 0; - -  for (i = 0; i <= 256; i++) { -    if (i > 0 && map[i].min == 0x00) break; /* End marker is a 0,0,NULL */ -    if (map[i].min <= ch && ch <= map[i].max) { -      if (map[i].hook != NULL) { -	map[i].hook(ch); -	return; -      } else -	doBeep(); -    } -  } -  doBeep(); -} - - -static void upArrow(char ch) -{ -  /* Is there more history ? */ -  if (history[(histp+HISTORYLENGTH-1)%HISTORYLENGTH] == NULL || -      (histp+HISTORYLENGTH-1)%HISTORYLENGTH == histidx) { -    write(1, "\7", 1); -    return; -  } - -  erase(); - -  /* Backup history pointer */ -  histp = (histp+HISTORYLENGTH-1)%HISTORYLENGTH; - -  /* Copy the history and write it */ -  strcpy((char *)buffer, (char *)history[histp]); -  bufidx = strlen((char *)buffer); -  write(1, (void *)buffer, strlen((char *)buffer)); - -} - - -static void downArrow(char ch) -{ -  /* Is there more history ? */ -  if (histp == histidx) { -    write(1, "\7", 1); -    return; -  } - -  erase(); - -  /* Advance history pointer */ -  histp = (histp+1)%HISTORYLENGTH; - -  /* If we are not at the most recent history entry, copy the history and write it */ -  if (histp != histidx) { -    strcpy((char *)buffer, (char *)history[histp]); -    bufidx = strlen((char *)buffer); -    write(1, (void *)buffer, strlen((char *)buffer)); -  } else { -    bufidx = 0; -    buffer[0] = '\0'; -  } -} - - -static void rightArrow(char ch) -{ -  if (bufidx > LINELENGTH || buffer[bufidx] == '\0') -    doBeep(); -  else { -    write(1, (void *)&buffer[bufidx], 1); -    bufidx++; -  } -} - - -static void leftArrow(char ch) -{ -  if (bufidx == 0) -    doBeep(); -  else { -    bufidx--; -    backspace(); -  } -} - - -static void insertToggle(char ch) -{ -  read(0, &ch, 1); -  if (ch != 'z') -    doBeep(); -  else -    insert = !insert; -} - - -static void delBwd(char ch) -{ -  if (bufidx == 0) -    doBeep(); -  else { -    int i; - -    change = TRUE; -    backspace(); -    bufidx--; -    for (i = 0; i <= strlen((char *)&buffer[bufidx+1]); i++) -      buffer[bufidx+i] = buffer[bufidx+1+i]; -    write(1, (void *)&buffer[bufidx], strlen((char *)&buffer[bufidx])); -    write(1, " ", 1); -    for (i = 0; i <= strlen((char *)&buffer[bufidx]); i++) backspace(); -  } -}   - -static void delFwd(char ch) -{ -  if (bufidx > LINELENGTH || buffer[bufidx] == '\0') -    doBeep(); -  else { -    int i; - -    change = TRUE; -    strcpy((char *)&buffer[bufidx], (char *)&buffer[bufidx+1]); -    write(1, (void *)&buffer[bufidx], strlen((char *)&buffer[bufidx])); -    write(1, " ", 1); -    for (i = 0; i <= strlen((char *)&buffer[bufidx]); i++) backspace(); -  } -}   - -static void escHook(char ch) { -  read(0, &ch, 1); -  execute(escmap, ch); -} - -static void arrowHook(char ch) { -  read(0, &ch, 1); -  execute(arrowmap, ch); -} - -static void newLine(char ch) -{ -  endOfInput = 1; -  write(1, "\n", 1); - -  /* If the input is not the same as the previous, save it in the history */ -  if (change && strlen((char *)buffer) > 0) { -    if (history[histidx] == NULL) -      history[histidx] = (unsigned char *)allocate(LINELENGTH+1); -    strcpy((char *)history[histidx], (char *)buffer); -    histidx = (histidx+1)%HISTORYLENGTH; -  } -} - - -static void insertCh(char ch) { -  if (bufidx > LINELENGTH) -    doBeep(); -  else { -    /* If at end advance the NULL */ -    if (buffer[bufidx] == '\0') -      buffer[bufidx+1] = '\0'; -    else if (insert) { -      int i; - -      /* If insert mode is on, move the characters ahead */ -      for (i = strlen((char *)buffer); i >= bufidx; i--) -	buffer[i+1] = buffer[i]; -      write(1, (void *)&buffer[bufidx], strlen((char *)&buffer[bufidx])); -      for (i = strlen((char *)&buffer[bufidx]); i > 0; i--) backspace(); -    } -    change = TRUE; -    buffer[bufidx] = ch; -    write(1, &ch, 1); -    bufidx++; -  } -} - - -/*---------------------------------------------------------------------- - -  echoOff() - -  */ -static void echoOff() -{ -#ifdef HAVE_TERMIO -  newtermio(); -#else -#ifdef __win__ -#include <windows.h> -#include <winbase.h> -#include <wincon.h> - -  DWORD handle = GetStdHandle(STD_INPUT_HANDLE); - -  (void) SetConsoleMode(handle, 0); - -#endif -#endif -} - - -/*---------------------------------------------------------------------- - -  echoOn() - -  */ -static void echoOn() -{ -#ifdef HAVE_TERMIO -  restoretermio(); -#else -#ifdef __win__ -#include <windows.h> -#include <winbase.h> -#include <wincon.h> - -  DWORD handle = GetStdHandle(STD_INPUT_HANDLE); -  (void) SetConsoleMode(handle, ENABLE_ECHO_INPUT); - -#endif -#endif -} - - -/*====================================================================== - -  readline() - -  Read a line from the user, with history and editing - -  */ - -/* 4f - length of user buffer should be used */ -Boolean readline(char usrbuf[]) -{ -  fflush(stdout); -  bufidx = 0; -  histp = histidx; -  buffer[0] = '\0'; -  change = TRUE; -  echoOff(); -  endOfInput = 0; -  while (!endOfInput) { -    if (read(0, (void *)&ch, 1) != 1) { -      echoOn(); -      return FALSE; -    } -    execute(keymap, ch); -  } -  echoOn(); -  strcpy(usrbuf, (char *)buffer);   -  return TRUE; -} - -} // End of namespace Alan2 -} // End of namespace Glk - -#endif diff --git a/engines/glk/alan2/rules.cpp b/engines/glk/alan2/rules.cpp index b558b183b5..323f6e72a4 100644 --- a/engines/glk/alan2/rules.cpp +++ b/engines/glk/alan2/rules.cpp @@ -21,17 +21,13 @@   */  #include "glk/alan2/types.h" -#include "glk/alan2/main.h" -#include "glk/alan2/inter.h"  #include "glk/alan2/debug.h"  #include "glk/alan2/exe.h" -#include "glk/alan2/stack.h" - -#include "glk/alan2/rules.h" - -#ifdef GLK +#include "glk/alan2/inter.h"  #include "glk/alan2/glkio.h" -#endif +#include "glk/alan2/main.h" +#include "glk/alan2/rules.h" +#include "glk/alan2/stack.h"  namespace Glk {  namespace Alan2 { diff --git a/engines/glk/alan2/sysdep.cpp b/engines/glk/alan2/sysdep.cpp index 312518f879..74d4fc98c8 100644 --- a/engines/glk/alan2/sysdep.cpp +++ b/engines/glk/alan2/sysdep.cpp @@ -21,17 +21,15 @@   */  #include <string.h> -#include "glk/alan2/sysdep.h" - -#ifdef GLK  #include "glk/alan2/alan2.h" -#endif +#include "glk/alan2/sysdep.h"  namespace Glk {  namespace Alan2 { -#ifdef GLK -extern void fprintf(Common::WriteStream *ws, const char *fmt, ...) { +void syserr(char str[]); + +void fprintf(Common::WriteStream *ws, const char *fmt, ...) {  	va_list args;  	va_start(args, fmt);  	Common::String s = Common::String::vformat(fmt, args); @@ -39,64 +37,6 @@ extern void fprintf(Common::WriteStream *ws, const char *fmt, ...) {  	ws->write(s.c_str(), s.size());  } -#endif - -extern void syserr(char str[]); - -#ifdef __vms__ - -char *strdup(char str[])                /* IN - String to duplicate */ -{ -  char *new = (char *) malloc(strlen(str)+1); - -  if (!new) -    syserr("Out of memory"); -  strcpy(new, str); -  return new; -} - -#endif - - -#ifdef __mac__ - -char *strdup(char str[])                /* IN - String to duplicate */ -{ -  char *new = (char *) malloc((size_t)((int)strlen(str)+1)); - -  if (!new) -    syserr("Out of memory"); -  strcpy(new, str); -  return new; -} - -#endif - - -#ifdef __vms__ - -/* Cheat implementation of strftime */ -size_t strftime ( -		 char *outbuf, -		 size_t len, -		 const char *format, -		 const struct tm *t) -{ -  char buf[100]; -  time_t ticks; - -  time(&ticks); -  strcpy(buf, ctime(&ticks)); -  buf[strlen(buf)-1] = '\0'; -  strcpy(outbuf, &buf[4]); -} - -#endif - -#ifdef __dos__ -#endif - -#ifdef GLK  /* Note to Glk maintainers: 'native' characters are used for output, in this     case, Glk's Latin-1.  ISO characters are Alan's internal representation, @@ -172,28 +112,6 @@ static char uppChrs[] =    '\x00'  }; -#else - -/* Theses work on native character sets */ - -static char spcChrs[] = " \t\n"; - -#ifdef __amiga__ - -/* Which can't read 8-bit chars but is ISO */ -static char lowChrs[] = "abcdefghijklmnopqrstuvwxyz\340\341\342\343\344\345\346\347\351\352\353\354\355\356\357\360\361\362\363\364\365\366\370\371\372\373\374\375\376\377"; - -static char uppChrs[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337"; - -#else - -/* Use native characters */ -static char lowChrs[] = "abcdefghijklmnopqrstuvwxyzàáâãäåæçéêëìíîïðñòóôõöøùúûüýþÿ"; - -static char uppChrs[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÛÝÞß"; - -#endif -#endif  int isSpace(int c)              /* IN - Native character to test */  { @@ -220,56 +138,12 @@ int isLetter(int c)             /* IN - Native character to test */  int toLower(int c)              /* IN - Native character to convert */  { -#ifdef GLK    return g_vm->glk_char_to_lower(c); -#else -#ifdef __dos__ -  char *cp; - -  if ((cp = strchr(uppChrs, c)) != 0) -    return(lowChrs[cp-uppChrs]); -  else -    return c; -#else -#ifdef __mac__ -  char *cp; - -  if ((cp = strchr(uppChrs, c)) != 0) -    return(lowChrs[cp-uppChrs]); -  else -    return c; -#else -  return (isUpper(c)? c + ('a' - 'A'): c); -#endif -#endif -#endif  }  int toUpper(int c)              /* IN - Native character to convert */  { -#ifdef GLK    return g_vm->glk_char_to_upper(c); -#else -#ifdef __dos__ -  char *cp; - -  if ((cp = strchr(lowChrs, c)) != 0) -    return(uppChrs[cp-lowChrs]); -  else -    return c; -#else -#ifdef __mac__ -  char *cp; - -  if ((cp = strchr(lowChrs, c)) != 0) -    return(uppChrs[cp-lowChrs]); -  else -    return c; -#else -  return (isLower(c)? c - ('a' - 'A'): c); -#endif -#endif -#endif  }  char *strlow(char str[])        /* INOUT - Native string to convert */ @@ -427,57 +301,8 @@ static unsigned char dosMap[256]  void fromIso(char copy[],       /* OUT - Mapped string */  	     char original[])   /* IN - string to convert */  { -#if ISO == 0 -  static unsigned char map[256] -#if defined __mac__ -    = { -      0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0D,0x0B,0x0C,0x0D,0x0E,0x0F, -      0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -      0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -      0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -      0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -      0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -      0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -      0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -      0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -      0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -      0xCA,0xC1,0xA2,0xA3,0xB0,0xB4,0xBA,0xA4,0xAC,0xA9,0xBB,0xC7,0xC2,0xD0,0xA8,0xD1, -      0xA1,0xB1,0xAA,0xD5,0xAB,0xB5,0xA6,0xA5,0xD4,0xA0,0xBC,0xC8,0xD9,0xDA,0xDB,0xC0, -      0xCB,0xDC,0xD7,0xCC,0x80,0x81,0xAE,0x82,0xC5,0x83,0xB7,0xC9,0xB3,0xB2,0xC3,0xC4, -      0xC6,0x84,0xDD,0xDE,0xBD,0xCD,0x85,0xAD,0xAF,0xD3,0xD2,0xDF,0x86,0xCE,0xB8,0xA7, -      0x88,0x87,0x89,0x8B,0x8A,0x8C,0xBE,0x8D,0x8F,0x8E,0x90,0x91,0x93,0x92,0x94,0x95, -      0xB6,0x96,0x98,0x97,0x99,0x9B,0x9A,0xD6,0xBF,0x9D,0x9C,0x9E,0x9F,0xCF,0xB9,0xD8} -#else -#if defined __dos__ -  = { -    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0D,0x0B,0x0C,0x0D,0x0E,0x0F, -    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -    0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -    0xFF,0xD0,0x9B,0x9C,0xE5,0x9D,0x9F,0xD1,0xF7,0xE0,0xA6,0xAE,0xFB,0xD2,0xE7,0xFA, -    0xF8,0xF1,0xFD,0xD3,0xFE,0xE6,0xE3,0xF9,0xD4,0xD5,0xA7,0xAF,0xAC,0xAB,0xF0,0xA8, -    0xA9,0xAA,0xEF,0xD6,0x8E,0x8F,0x92,0x80,0xE2,0x90,0xE4,0xEE,0xF5,0xF4,0xD7,0xAD, -    0xE9,0xA5,0xD8,0xD9,0xEA,0xE8,0x99,0xEC,0xED,0xF2,0xF3,0xDA,0x9A,0xDB,0x9E,0xE1, -    0x85,0xA0,0x83,0xDC,0x84,0x86,0x91,0x87,0x8A,0x82,0x88,0x89,0x8D,0xA1,0x8C,0x8B, -    0xEB,0xA4,0x95,0xA2,0x93,0xDD,0x94,0xF6,0xDE,0x97,0xA3,0x96,0x81,0xDF,0xFC,0x98} -#endif -    ; -#endif -    unsigned char *o, *c; - -    for (o = (unsigned char *)original, c = (unsigned char *)copy; *o; o++, c++) -      *c = map[*o]; -    *c = '\0'; -#else      if (copy != original)        (void)strcpy(copy, original); -#endif  } diff --git a/engines/glk/alan2/sysdep.h b/engines/glk/alan2/sysdep.h index e58e538f20..7fce53c3e7 100644 --- a/engines/glk/alan2/sysdep.h +++ b/engines/glk/alan2/sysdep.h @@ -45,7 +45,6 @@ namespace Alan2 {  #define GLK  #define __win__ -#ifdef GLK  #undef isdigit  #define isdigit Common::isDigit  #undef stricmp @@ -56,300 +55,13 @@ namespace Alan2 {  #define rand() g_vm->getRandomNumber(0x7fffffff)  #undef fprintf  extern void fprintf(Common::WriteStream *ws, const char *fmt, ...); -#endif - -/* Place definitions of OS and compiler here if necessary */ -#ifdef AZTEC_C -#define __amiga__ -#endif - -#ifndef __sun__ -#ifdef sun -#define __sun__ -#endif -#endif - -#ifdef _INCLUDE_HPUX_SOURCE -#define __hp__ -#endif - -#ifndef __unix__ -#ifdef unix -#define __unix__ -#endif -#endif - -#ifdef vax -#define __vms__ -#endif - -#ifdef THINK_C -#define __mac__ -#endif - -#ifdef __MWERKS__ -#ifdef macintosh -#define __mac__ -#else -#define __dos__ -#endif -#endif - -#ifdef DOS -#define __dos__ -#endif - -#ifdef __BORLANDC__ -#define __dos__ -#endif - -#ifdef __CYGWIN__ -#define __win__ -#endif - -#ifdef __MINGW32__ -#define __win__ -#endif - -#ifdef __PACIFIC__ -#define  __dos__ -#define HAVE_SHORT_FILENAMES -#endif - - -/*---------------------------------------------------------------------- - -  Below follows OS and compiler dependent settings. They should not be -  changed except for introducing new sections when porting to new -  environments. - - */ - -/************/ -/* Includes */ -/************/ - -#ifndef GLK -#include <stdio.h> -#include <ctype.h> -#endif - -#ifdef __STDC__ -#include <stdlib.h> -#include <string.h> -#endif - -#ifdef __vms__ -/* Our VAXC doesn't define __STDC__ */ -#include <stdlib.h> -#include <string.h> -#endif - - -#ifdef __mac__ -#include <stdlib.h> -#include <string.h> -#include <unix.h> -#endif - -#ifdef __MWERKS__ -#define strdup _strdup -#endif  /***********************/ -/* ISO character sets? */ -/***********************/  /* Common case first */  #define ISO 1  #define NATIVECHARSET 0 -#ifdef GLK -#undef ISO -#define ISO 1 -#undef NATIVECHARSET -#define NATIVECHARSET 0 -#else	/* Glk is ISO, no matter what the OS */ - -#ifdef __dos__ -#undef ISO -#define ISO 0 -#undef NATIVECHARSET -#define NATIVECHARSET 2 -#endif - -#ifdef __win__ -#undef ISO -#define ISO 1 -#undef NATIVECHARSET -#define NATIVECHARSET 2 -#endif - -#ifdef __mac__ -#undef ISO -#define ISO 0 -#undef NATIVECHARSET -#define NATIVECHARSET 1 -#endif - -#endif - -/**************************/ -/* Strings for file modes */ -/**************************/ -#define READ_MODE "r" -#define WRITE_MODE "w" - -#ifdef __mac__ -/* File open mode (binary) */ -#undef READ_MODE -#define READ_MODE "rb" -#undef WRITE_MODE -#define WRITE_MODE "wb" -#endif - -#ifdef __dos__ -/* File open mode (binary) */ -#undef READ_MODE -#define READ_MODE "rb" -#undef WRITE_MODE -#define WRITE_MODE "wb" -#endif - -#ifdef __win__ -/* File open mode (binary) */ -#undef READ_MODE -#define READ_MODE "rb" -#undef WRITE_MODE -#define WRITE_MODE "wb" -#endif - -/*****************/ -/* Byte ordering */ -/*****************/ - -#ifdef __dos__ -#define REVERSED -#endif - -#ifdef __vms__ -#define REVERSED -#endif - -#ifdef __win__ -#ifndef REVERSED -#define REVERSED -#endif -#endif - - -/****************************/ -/* Allocates cleared bytes? */ -/****************************/ - -#ifdef __CYGWIN__ -#define NOTCALLOC -#endif - -#ifdef __MINGW32__ -#define NOTCALLOC -#endif - -#ifdef __unix__ -#define NOTCALLOC -#endif - - -/****************/ -/* Have termio? */ -/****************/ - -#ifdef GLK -/* don't need TERMIO */ -#else - -#ifdef __CYGWIN__ -#define HAVE_TERMIO -#endif - -#ifdef __unix__ -#define HAVE_TERMIO -#endif - -#endif - -/*******************************/ -/* Is ANSI control available? */ -/*******************************/ - -#ifdef GLK -/* don't need ANSI */ -#else - -#ifdef __CYGWIN__ -#define HAVE_ANSI -#endif - -#endif - -/******************************/ -/* Use the READLINE function? */ -/******************************/ - -#ifdef GLK -/* Glk always uses readline(), no matter what the OS */ -#define USE_READLINE -#else - -#ifdef __unix__ -#define USE_READLINE -#endif - -#ifdef x__dos__ -#define USE_READLINE -#endif - -#ifdef __win__ -#define USE_READLINE -#endif - -#endif - -/* Special cases and definition overrides */ -#ifdef __unix__ -#define MULTI -#endif - - - - -#ifdef __vms__ - -#define MULTI - -extern char *strdup(char str[]); - -/* Cheat implementation of strftime */ -extern size_t strftime (char *, size_t, const char *, const struct tm *); - -#endif - -#ifdef __mac__ - -extern char *strdup(char *str); - -#endif - - -#ifdef __dos__ - -/* Return codes */ -#define EXIT_SUCCESS 0 -#define EXIT_FAILURE  1 - -#endif - -  /* Native character functions */  extern int isSpace(int c);      /* IN - Native character to test */  extern int isLower(int c);      /* IN - Native character to test */ diff --git a/engines/glk/alan2/term.cpp b/engines/glk/alan2/term.cpp index 8f7b64a719..c758efe434 100644 --- a/engines/glk/alan2/term.cpp +++ b/engines/glk/alan2/term.cpp @@ -35,83 +35,8 @@ namespace Alan2 {   */  void getPageSize() { -#ifdef GLK    paglen = 0;    pagwidth = 0; - -#else -#ifdef HAVE_TERMIO - -#include <sys/termios.h> - -  extern int ioctl(); - -  struct winsize win; -  int ecode; - -  ecode = ioctl(1, TIOCGWINSZ, &win); - -  if (ecode != 0 || win.ws_row == 0) -    paglen = header->paglen; -  else -    paglen = win.ws_row; - -  if (ecode != 0 || win.ws_col == 0) -    pagwidth = header->pagwidth; -  else -    pagwidth = win.ws_col; - -#else -#ifdef __amiga__ -#include <libraries/dosextens.h> -#include <intuition/intuition.h> -#include <graphics/text.h> -#include <clib/exec_protos.h> - -  struct Process * proc; -  struct InfoData *id; -  struct Window *win;  -  struct TextFont *textFont; -  struct StandardPacket *packet; - -  proc = (struct Process *) FindTask(0L); - -  id = (struct InfoData *) allocate(sizeof(struct InfoData)); - -  if (proc->pr_ConsoleTask) { -    packet = (struct StandardPacket *) allocate(sizeof(struct StandardPacket)); -    packet->sp_Msg.mn_Node.ln_Name	= (char *)&(packet->sp_Pkt); -    packet->sp_Pkt.dp_Link		= & packet->sp_Msg; -    packet->sp_Pkt.dp_Port		= & proc->pr_MsgPort; -    packet->sp_Pkt.dp_Type		= ACTION_DISK_INFO; - -    packet->sp_Pkt.dp_Arg1 = ((LONG) id) >> 2; - -    PutMsg ((struct MsgPort *) proc->pr_ConsoleTask, & packet->sp_Msg); -    WaitPort(&proc->pr_MsgPort); -    GetMsg(&proc->pr_MsgPort); -    free((char *)packet); - -    win = (struct Window *) id->id_VolumeNode; -    free(id); - -    /* Calculate number of characters and lines w.r.t font size and borders */ -    textFont = win->IFont; -    paglen = win->Height/textFont->tf_YSize-2; -    pagwidth = win->Width/textFont->tf_XSize-3; -  } else { -    paglen = header->paglen; -    pagwidth = header->pagwidth; -  } - -#else - -  paglen = header->paglen; -  pagwidth = header->pagwidth; - -#endif -#endif -#endif  }  } // End of namespace Alan2 diff --git a/engines/glk/alan2/types.h b/engines/glk/alan2/types.h index 699dd0e149..34c5dda87f 100644 --- a/engines/glk/alan2/types.h +++ b/engines/glk/alan2/types.h @@ -33,14 +33,12 @@ namespace Alan2 {  /* CONSTANTS */ -#ifndef __mac__  #ifndef TRUE  #define TRUE (0==0)  #endif  #ifndef FALSE  #define FALSE (!TRUE)  #endif -#endif  #define ACTMIN (header->actmin)  #define ACTMAX (header->actmax) @@ -77,9 +75,7 @@ namespace Alan2 {  /* TYPES */ -#ifndef __mac__  typedef int Boolean;		/* Boolean values within interpreter */ -#endif  /* Amachine variables */  struct CurVars { | 
