# include "stephead.h"    //include file header
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <conio.h>
# include <time.h>
# define _DATA 0x0378     //indirizzo lpt1

static int dato;          //variabile statica, dura anche dentro le function

void and_to_space (char[80]);  // converte & in spazi

int main(void)
{
 FILE *steplog;
 char comando[80],angolo[80],tasto[80];
 int  key;
 float angle;
 time_t tempo;


 printf("Content-Type: text/html\n\n");

 printf("<HTML>\n");
 printf("<HEAD>\n");
 printf("<TITLE>Stepper Motor Control</TITLE>\n");
 printf("</HEAD>\n");
 printf("<BODY>\n");
 printf("<CENTER><HR>\n");
 steplog = fopen("c:\\tcpp\\work\\cgi\\stepper.log","a+");
 strcpy(comando,getenv("QUERY_STRING"));
 and_to_space(comando);                   //elimia & per spazi
 sscanf(comando,"%s %s",&angolo,&tasto);  //crea le 2 sottostringhe
 sscanf(angolo,"T1= %f",&angle);          //estrapola l'angolo (float) dalla prima
 sscanf(tasto,"B%d",&key);                //estrapola il tasto (int) dalla seconda
 switch (key)                           //decide a seconda dei tasti premuti
 {
  case 1 :   //rotazione antioraria
  dato=lock(_DATA);
  dato=turn_angle(_DATA,dato,1.8,angle,1,15);
  unlock(_DATA);
  time(&tempo);
  printf("Rotazione antioraria di %1.1f°",angle);
  fprintf(steplog,"Rotazione antioraria di %1.1f° @ %s\n",angle,ctime(&tempo));
  fclose(steplog);
  break;

  case 2 :   //blocca l'albero motore
  dato=lock(_DATA);
  time(&tempo);
  printf("Albero bloccato");
  fprintf(steplog,"Albero bloccato @ %s\n",ctime(&tempo));
  fclose(steplog);
  break;

  case 3 :   //rotazione oraria
  dato=lock(_DATA);
  dato=turn_angle(_DATA,dato,1.8,angle,0,15);
  unlock(_DATA);
  time(&tempo);
  printf("Rotazione oraria di %1.1f°",angle);
  fprintf(steplog,"Rotazione oraria di %1.1f° @ %s\n",angle,ctime(&tempo));
  fclose(steplog);
  break;
 }


 printf("<HR></CENTER>\n");
 printf("</BODY>\n");
 printf("</HTML>\n");
 return 0;
}

void and_to_space (char s[80])  //trasforma le & in spazi
{
 int n=0;
  while (s[n])
  {
   if (s[n]=='&')
   {
    s[n]=' ';
   }
   n++;
  }
}
