/* arclynx - simple version of Lynx for Acorn machines
 * (c) 1996 Andrew Wood
 *
 * Routines contained in this file (a_debug.c):
 *   lynx_debug() - last modified 96/07/18
 */

#include "arclynx.h"
#include <string.h>


/******************************************************************************
 * lynx_debug(status) - write a debugging file
 */
void lynx_debug(Status *status) {
 static FILE *fptr;
 static int a,i,j;
 fptr=fopen("debug","w");
 fprintf(fptr,"Currently selected link: %d\n",status->display.current_link);
 fprintf(fptr,"Top link: %d\n",status->display.top_link);
 fprintf(fptr,"Bottom link: %d\n",status->display.bottom_link);
 fprintf(fptr,"Screen top line: %d\n",status->display.screen_top);
 fprintf(fptr,"Document changed flag: %d\n",status->display.changed);
 fprintf(fptr,"\n");
 fprintf(fptr,"Document URL: %s\n",status->build.url);
 fprintf(fptr,"Document filename: %s\n",status->build.filename);
 fprintf(fptr,"Document title: %s\n",status->build.title);
 fprintf(fptr,"Number of lines in parsed document: %d\n",status->build.lines);
 fprintf(fptr,"Number of HREF anchors: %d\n",status->build.anchor_hrefs);
 fprintf(fptr,"Number of NAME anchors: %d\n",status->build.anchor_names);
 fprintf(fptr,"File pointer: %p\n",status->build.fptr);
 fprintf(fptr,"Temporary file flag: %d\n",status->build.temporary);
 fprintf(fptr,"\n");
 fprintf(fptr,"Finished flag: %d\n",status->finished);
 fprintf(fptr,"Temporary workspace pointer: %p\n",status->temp);
 fprintf(fptr,"History stack position: %d\n",status->history_pos);
 fprintf(fptr,"\n");
 if (status->history_pos>0) {
  fprintf(fptr,"History:\n");
  for(i=0; i<status->history_pos; i++) {
   fprintf(fptr,"%d: %s\n",i,status->history[i]);
  }
  fprintf(fptr,"\n");
 }
 if (status->build.anchor_hrefs>0) {
  fprintf(fptr,"HREF anchors:\n");
  for(i=0; i<status->build.anchor_hrefs; i++) {
   fprintf(fptr,"%d: %s\n",i,status->build.anchor_href[i]);
  }
  fprintf(fptr,"\n");
 }
 if (status->build.anchor_names>0) {
  fprintf(fptr,"NAME anchors:\n");
  for(i=0; i<status->build.anchor_names; i++) {
   fprintf(fptr,"%d: %s\n",i,status->build.anchor_name[i]);
  }
  fprintf(fptr,"\n");
 }
 if (status->build.lines>0) {
  fprintf(fptr,"Parsed document:\n");
  for(i=0; i<status->build.lines; i++) {
   fprintf(fptr,"%d: ",i);
   if (status->build.line[i]==NULL) {
    fprintf(fptr,"**** IS A NULL POINTER ****\n");
   } else {
    j=0; fprintf(fptr,"\"");
    while (status->build.line[i][j]!=0) {
     switch(status->build.line[i][j]) {
      case LYNX_A_HREF_CODE:
       j++; a=status->build.line[i][j];
       j++; a+=256*status->build.line[i][j];
       fprintf(fptr,"<HREF %d>",a);
       break;
      case LYNX_A_NAME_CODE:
       j++; a=status->build.line[i][j];
       j++; a+=256*status->build.line[i][j];
       fprintf(fptr,"<NAME %d>",a);
       break;
      case LYNX_A_HREF_END:fprintf(fptr,"<HREF END>"); break;
      case LYNX_A_NAME_END:fprintf(fptr,"<NAME END>"); break;
      case LYNX_BOLD_CODE:fprintf(fptr,"<BOLD>"); break;
      case LYNX_ITALIC_CODE:fprintf(fptr,"<ITALIC>"); break;
      case LYNX_HEADING_CODE:fprintf(fptr,"<HEADING>"); break;
      case LYNX_SPACES_CODE:
       j++; a=status->build.line[i][j];
       fprintf(fptr,"<SPACES: %d>",a);
       break;
      default:fprintf(fptr,"%c",status->build.line[i][j]); break;
     }
     j++;
    }
    fprintf(fptr,"\"\n");
   }
  }
  fprintf(fptr,"\n");
 }
 fclose(fptr);
}
