File:  [LON-CAPA] / capa / capa51 / GUITools / common.funct.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Sep 28 21:25:41 1999 UTC (25 years, 1 month ago) by albertel
Branches: capa
CVS tags: start
Created directory structure

/*
 * common.funct.c
 * Copyright Guy Albertelli II 1998
 * Portions Copyright Issac Tsai
 */
#include <stdio.h>
#include <tk.h>
#include <Capa/capaCommon.h>
#include <common.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <sys/wait.h>

/* Used by the parse front end to escape any special characters in TCL */
/* arguments are source buffer, destination buffer, and where to start */
/* in the destination buffer                                           */
int capaPrepareBuffer(char *buf,char *buf2,int j)
{
  int i;
  for(i=0;i<strlen(buf);i++,j++)
    {
      switch(buf[i])
	{
	case '$':case '[': case ']': case '{': case '}': case '\\': case '"':
	  buf2[j]='\\';
	  j++;
	  buf2[j]=buf[i];
	  break;
	default:
	  buf2[j]=buf[i];
	  break;
	}
    }
  buf2[j]='\0';
  return j;
}

int bufInsert(Tcl_Interp*interp,char*window,char*string) 
{
  char *buf;
  char *buf2;
#ifdef _UPDATE
  char *update=";update";
#else
  char *update=" ";
#endif

  buf=capa_malloc(BUFFER_SIZE+strlen(string)*2,1);
  buf2=capa_malloc(BUFFER_SIZE+strlen(string)*3,1);
  capaPrepareBuffer(string,buf,0);
  sprintf(buf2,"%s insert end \"%s\" answer%s",window,buf,update);
  if (Tcl_Eval(interp,buf2) != TCL_OK) { fprintf(stderr,"problem with bufInsert\n"); }
  capa_mfree(buf);
  capa_mfree(buf2);
}

void print_begin_item(int mode,Tcl_Interp *interp,char *window,int q_idx)
{
  char buf[BUFFER_SIZE];
  switch(mode) {
    case TeX_MODE: bufInsert(interp,window, "\\item "); break;
    case ASCII_MODE:
          sprintf(buf, "%d) ", q_idx); 
	  bufInsert(interp,window,buf); break;
    case HTML_MODE: bufInsert(interp,window, "<LI> "); break;
  }
}

void capaInsertAnswer(Problem_t *p,Tcl_Interp *interp, char *window) {
  extern int Parsemode_f;
  char* answer;

  answer=answers_string(Parsemode_f,p);
  bufInsert(interp,window,answer);
  capa_mfree(answer);
}

/* updates the gDate var with the current date and reregisters itself
 * to run in .8 seconds
 */

int capaDateUpdate(ClientData clientdata, Tcl_Interp *interp, int argc, 
		   char *argv[])
{
  time_t rightNow=time(NULL);

  if (Tcl_SetVar(interp,"gDate",asctime(localtime(&rightNow)),
		 TCL_GLOBAL_ONLY) == NULL)
    {
      fprintf(stderr,"Tcl_Eval error\n");
      fprintf(stderr,"%s\n",interp->result);
      return TCL_ERROR;
    }

  if (Tcl_Eval(interp,"after 800 { dateUpdate } ") != TCL_OK)
    {
      fprintf(stderr,"Tcl_Eval error\n");
      fprintf(stderr,"%s\n",interp->result);
      return TCL_ERROR;
    }
  return TCL_OK;
}

int capaGetExistingSections(ClientData clientdata, Tcl_Interp *interp, 
			int argc, char *argv[])
{
  int i=0,result,sectionArray[MAX_SECTION_COUNT];
  char buf[BUFFER_SIZE];

  Tcl_ResetResult(interp);
  result=capa_get_section_count(sectionArray);
  if (result==-1)
    {
      Tcl_AppendElement(interp,"Unable to find a classl file.\n");
      return TCL_ERROR;
    }
  for(i=1;i<=sectionArray[0];i++) 
    {
      if ( sectionArray[i] !=0 ) 
	{
	  sprintf(buf,"%d %d",i, sectionArray[i]);
	  Tcl_AppendElement(interp,buf);
	}
    }
  return TCL_OK;
}

void message()
{
  unsigned char *message=
"*****                *****        ************        *****               *****\n"
"******              ******     ******************     *****               *****\n"
" ******            ******    ****              ****    ****               **** \n"
" *******          *******   ****                ****   ****               **** \n"
" ********        ********   ****                ****   ****               **** \n"
" **** ****      **** ****   ****                       ****               **** \n"
" ****  ****    ****  ****   ****                       ****               **** \n"
" ****   ****  ****   ****   ****                       ****               **** \n"
" ****    ********    ****    ****                      ****               **** \n"
" ****     ******     ****      ***************         ****               **** \n"
" ****      ****      ****         ***************      ****               **** \n"
" ****       **       ****                      ****    ****               **** \n"
" ****                ****                       ****   ****               **** \n"
" ****                ****                       ****   ****               **** \n"
" ****                ****                       ****   ****               **** \n"
" ****                ****   ****                ****   ****               **** \n"
" ****                ****   ****                ****   ****               **** \n"
" ****                ****    ****              ****     ****             ****  \n"
"*****                *****     ******************         *****************    \n"
"*****                *****        ************               ***********       \n"
"Copyright MSU Board of Trustees 1992-1999                                      \n"
"No Unauthorized Commercial Use or redistribution allowed.                      \n";
  fprintf(stderr,message);
  exit(0);
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>