예제 #1
0
파일: init.c 프로젝트: TijmenW/FreeDOS
int WaitForFkeys(void)
{
  struct dostime_t start;
  struct dostime_t now;
  int secs = 3;
  int ch;

  _dos_gettime(&start);
  printf("%d", secs);
  while (secs)
  {
    _dos_gettime(&now);
    if (now.second != start.second)
    {
      _dos_gettime(&start);
      secs--;
      printf("\b%d", secs);
    }
    if (keypressed())
    {
      if ((ch = getch()) == 0)
        ch = getch() + 256;
      printf("\b ");
      return ch;
    }
  }
  printf("\b ");
  return 0;
}
예제 #2
0
파일: fidosdm.cpp 프로젝트: kenjreno/lora3
VOID FIDOSDM::SetHWM (ULONG ulMsg)
{
   int fd;
   CHAR Temp[128];
   struct dosdate_t d_date;
   struct dostime_t d_time;
   FIDOMSG Hdr;

   sprintf (Temp, "%s1.msg", BasePath);
   if ((fd = sopen (Temp, O_WRONLY|O_BINARY|O_CREAT|O_TRUNC, SH_DENYNO, S_IREAD|S_IWRITE)) != -1) {
      memset (&Hdr, 0, sizeof (FIDOMSG));
      strcpy (Hdr.From, "MsgBase");
      strcpy (Hdr.To, "Nobody in particular");
      strcpy (Hdr.Subject, "Re: Whatsa high water mark?");
      _dos_getdate (&d_date);
      _dos_gettime (&d_time);
      sprintf (Hdr.Date, "%2d %3.3s %02d  %02d:%02d:%02d", d_date.day, fidoMonths[d_date.month - 1], d_date.year % 100, d_time.hour, d_time.minute, d_time.second);
      Hdr.Up = (USHORT)ulMsg;
      Hdr.Attrib = MSGPRIVATE|MSGSENT|MSGREAD;
      write (fd, &Hdr, sizeof (FIDOMSG));
      strcpy (Temp, "\r\nThis message is used to store the high water mark\r\n");
      write (fd, Temp, strlen (Temp) + 1);
      close (fd);
   }
}
예제 #3
0
void main()
  {
    struct dosdate_t date;
    struct dostime_t time;

    /* Get and display the current date and time */
    _dos_getdate( &date );
    _dos_gettime( &time );
    printf( "The date (MM-DD-YYYY) is: %d-%d-%d\n",
        date.month, date.day, date.year );
    printf( "The time (HH:MM:SS) is: %.2d:%.2d:%.2d\n",
        time.hour, time.minute, time.second );

    /* Change it to the turn of the century */
    date.year = 1999;
    date.month = 12;
    date.day = 31;
    time.hour = 23;
    time.minute = 59;
    _dos_setdate( &date );
    _dos_settime( &time );
    printf( "New date (MM-DD-YYYY) is: %d-%d-%d\n",
                  date.month, date.day, date.year );
    printf( "New time (HH:MM:SS) is: %.2d:%.2d:%.2d\n",
                  time.hour, time.minute, time.second );
  }
예제 #4
0
bool QTime::currentTime( QTime *ct )
{
    if ( !ct ) {
#if defined(CHECK_NULL)
	qWarning( "QTime::currentTime(QTime *): Null pointer not allowed" );
#endif
	return FALSE;
    }

#if defined(_OS_WIN32_)

    SYSTEMTIME t;
    GetLocalTime( &t );
    ct->ds = MSECS_PER_HOUR*t.wHour + MSECS_PER_MIN*t.wMinute +
	     1000*t.wSecond + t.wMilliseconds;
    return (t.wHour == 0 && t.wMinute == 0);

#elif defined(_OS_OS2_)

    DATETIME t;
    DosGetDateTime( &t );
    ct->ds = MSECS_PER_HOUR*t.hours + MSECS_PER_MIN*t.minutes +
	     1000*t.seconds + 10*t.hundredths;
    return (t.hours == 0 && t.minutes == 0);

#elif defined(_OS_MSDOS_)

    _dostime_t t;
    _dos_gettime( &t );
    ct->ds = MSECS_PER_HOUR*t.hour + MSECS_PER_MIN*t.minute +
	     t.second*1000 + t.hsecond*10;
    return (t.hour== 0 && t.minute == 0);

#elif defined(_OS_UNIX_)

    struct timeval tv;
    gettimeofday( &tv, 0 );
    time_t ltime = tv.tv_sec;
    tm *t = localtime( &ltime );
    ct->ds = (uint)( MSECS_PER_HOUR*t->tm_hour + MSECS_PER_MIN*t->tm_min +
		     1000*t->tm_sec + tv.tv_usec/1000 );
    return (t->tm_hour== 0 && t->tm_min == 0);

#else

    time_t ltime;			// no millisecond resolution!!
    ::time( &ltime );
    tm *t = localtime( &ltime );
    ct->ds = MSECS_PER_HOUR*t->tm_hour + MSECS_PER_MIN*t->tm_min +
	     1000*t->tm_sec;
    return (t->tm_hour== 0 && t->tm_min == 0);
#endif
}
예제 #5
0
파일: curtime.c 프로젝트: TijmenW/FreeDOS
char *curTime(void)
{	char *time;
	struct dostime_t t;

    _dos_gettime(&t);

    time = nls_maketime(0, t.hour, t.minute, t.second, t.hsecond);
    if(!time)
    	error_out_of_memory();

    return time;
}
예제 #6
0
파일: time.c 프로젝트: TijmenW/FreeDOS
int cmd_time(char *rest)
{
  struct dostime_t t;
  char s[40];
  int ec;

  noPrompt = 0;

  if((ec = leadOptions(&rest, opt_date, NULL)) != E_None)
      return ec;

  if (!*rest)
  {
	char *time;
    _dos_gettime(&t);

    time = nls_maketime(0, t.hour, t.minute, t.second, t.hsecond);
    if(!time) {	
    	error_out_of_memory();
    	return 1;
    }
    displayString(TEXT_MSG_CURRENT_TIME, time);
    free(time);
    rest = NULL;
  }

  while (1)
  {
    if (rest)
    {
      if (parsetime(rest))
        return 0;
    } else {
		if(noPrompt) return 0;

      if ((rest = getMessage(TEXT_MSG_ENTER_TIME)) == NULL)
        return 1;

      fputs(rest, stdout);
      free(rest);
      fgets(s, sizeof(s), stdin);
      if (cbreak)
        return 1;
      if (parsetime(s))
        return 0;
    }
    displayString(TEXT_ERROR_INVALID_TIME);
    // force input the next time around.
    rest = NULL;
  }
}
예제 #7
0
void main(void)
{
	//clrscr();
	struct dostime_t t;
	struct dosdate_t d;

	do{
		clrscr();
		_dos_gettime(&t);
		_dos_getdate(&d);
		printf("the current date is %02d-%02d-%02d\n",d.day,d.month,d.year);
		printf("the current time is %02d:%02d:%02d:%02d\n",t.hour,t.minute,t.second,t.hsecond);
		delay(1);
	}while(!kbhit());

}
예제 #8
0
long SystemTime(void)
                   /* Gets system time and converts it to hundreds of a sec */

{
    long    hr;
    long    min;
    long    sec;
    long    s100;
    struct _dostime_t  time;

    _dos_gettime(&time);                                /* get current time */

    hr    = (long) time.hour;                   /* convert string to number */
    min   = (long) time.minute;
    sec   = (long) time.second;
    s100  = (long) time.hsecond;

    return (long) (hr*360000 + min*6000 + sec*100 + s100);   /* system time */
}
예제 #9
0
int cgetchar_timed(int secs)
{
	struct dostime_t start;
	struct dostime_t now;

	start.second = 60;	/* force decrement secs first time in loop */
	++secs;
	while(!keypressed()) {
		_dos_gettime(&now);
		if(now.second != start.second) {
			if(!--secs)
				return 0;
			memcpy(&start, &now, sizeof(now));
			outnum(secs);
		}
		delay(100);
	}
		/* Because "keypressed()" returned true, getchar() does not block */
	return cgetchar();
}
예제 #10
0
파일: timer.c 프로젝트: klamonte/maximus
long _stdc timerset(unsigned int duration)
{
  #ifdef __MSC__
      struct dostime_t dt;
      _dos_gettime(&dt);
      return ( ((dt.minute % 60)*6000L) +
               ((dt.second % 60)*100L) +
               dt.hsecond +
               (long)duration
              );
  #else /* assume generic MSDOS compiler */
      union REGS regs;
      regs.h.ah = 0x2c;
      intdos(&regs, &regs);
      return ( ((regs.h.cl % 60)*6000L) +
               ((regs.h.dh % 60)*100L) +
               regs.h.dl +
               (long)duration
              );
  #endif
}
예제 #11
0
//
// The following function looks up the system time and returns it in the timer_t type. Note
// that timer_t is intended to be an integer but might be a structure type on some systems.
//
static void get_time_as_integer( timer_time_t *result )
{
    #if eOPSYS == eDOS
    _dos_gettime( result );
    #endif

    #if eOPSYS == eWIN32
    SYSTEMTIME raw;
    FILETIME   cooked;

    GetSystemTime( &raw );
    SystemTimeToFileTime( &raw, &cooked );
    result->u.LowPart  = cooked.dwLowDateTime;
    result->u.HighPart = cooked.dwHighDateTime;
    #endif

    #if eOPSYS == ePOSIX
    struct timeval time_info;
    gettimeofday( &time_info, NULL );
    result->seconds      = time_info.tv_sec;
    result->milliseconds = time_info.tv_usec / 1000;
    #endif
}
예제 #12
0
파일: fidosdm.cpp 프로젝트: kenjreno/lora3
USHORT FIDOSDM::ReadHeader (ULONG ulMsg)
{
   int dd, yy, hr, mn, sc;
   USHORT RetVal = FALSE, i;
   CHAR mm[4];
   MSGINDEX *msgIndex;
   struct dosdate_t date;
   struct dostime_t time;

   New ();

   if ((msgIndex = (MSGINDEX *)Index.First ()) != NULL)
      do {
         if (msgIndex->Number == ulMsg) {
            sprintf (LastFile, "%s%s", BasePath, msgIndex->FileName);
            if ((fp = _fsopen (LastFile, "rb", SH_DENYNO)) != NULL) {
               RetVal = TRUE;
               Current = ulMsg;

               memset (&msgHdr, 0, sizeof (msgHdr));
               fread (&msgHdr, sizeof (msgHdr), 1, fp);
               fclose (fp);

               sprintf (FromAddress, "%d/%d", msgHdr.OrigNet, msgHdr.OrigNode);
               sprintf (ToAddress, "%d/%d", msgHdr.DestNet, msgHdr.DestNode);

               for (i = 0; i < 7; i++) {
                  if (!strncmp (fidoDays[i], msgHdr.Date, 3))
                     break;
               }

               if (i < 7) {
                  sscanf (&msgHdr.Date[4], "%2d %3s %2d %2d:%2d", &dd, mm, &yy, &hr, &mn);
                  sc = 0;
               }
               else
                  sscanf (msgHdr.Date, "%2d %3s %2d  %2d:%2d:%02d", &dd, mm, &yy, &hr, &mn, &sc);

               Written.Day = (UCHAR)dd;
               for (i = 0; i < 12; i++) {
                  if (!stricmp (fidoMonths[i], mm)) {
                     Written.Month = (UCHAR)(i + 1);
                     break;
                  }
               }
               if (Written.Month < 1 || Written.Month > 12)
                  Written.Month = 1;
               if ((Written.Year = (USHORT)(yy + 1900)) < 1990)
                  Written.Year += 100;
               Written.Hour = (UCHAR)hr;
               Written.Minute = (UCHAR)mn;
               Written.Second = (UCHAR)sc;

               _dos_getdate (&date);
               _dos_gettime (&time);

               Arrived.Day = date.day;
               Arrived.Month = date.month;
               Arrived.Year = (USHORT)date.year;
               Arrived.Hour = time.hour;
               Arrived.Minute = time.minute;
               Arrived.Second = time.second;

               strcpy (From, msgHdr.From);
               strcpy (To, msgHdr.To);
               strcpy (Subject, msgHdr.Subject);

               Crash = (UCHAR)((msgHdr.Attrib & MSGCRASH) ? TRUE : FALSE);
               FileAttach = (UCHAR)((msgHdr.Attrib & MSGFILE) ? TRUE : FALSE);
               FileRequest = (UCHAR)((msgHdr.Attrib & MSGFRQ) ? TRUE : FALSE);
               Hold = (UCHAR)((msgHdr.Attrib & MSGHOLD) ? TRUE : FALSE);
               KillSent = (UCHAR)((msgHdr.Attrib & MSGKILL) ? TRUE : FALSE);
               Local = (UCHAR)((msgHdr.Attrib & MSGLOCAL) ? TRUE : FALSE);
               Private = (UCHAR)((msgHdr.Attrib & MSGPRIVATE) ? TRUE : FALSE);
               ReceiptRequest = (UCHAR)((msgHdr.Attrib & MSGRRQ) ? TRUE : FALSE);
               Received = (UCHAR)((msgHdr.Attrib & MSGREAD) ? TRUE : FALSE);
               Sent = (UCHAR)((msgHdr.Attrib & MSGSENT) ? TRUE : FALSE);

               Original = msgHdr.Reply;
               Reply = msgHdr.Up;
               break;
            }
         }
      } while ((msgIndex = (MSGINDEX *)Index.Next ()) != NULL);

   return (RetVal);
}
예제 #13
0
void funccall::entertainment()
{
	int v;
	struct dostime_t t;
	struct dosdate_t d;
	do
	{
		textbackground(BLUE);
		textcolor(MAGENTA);
		_setcursortype(_NORMALCURSOR);
		clrscr();
		textcolor(GREEN);
		box(4,4,4,4);
		box(4,4,6,6);
		textcolor(GREEN+BLINK);
		gotoxy(11,7);
		cputs("CREEPER");
		delay(502);
		_dos_gettime(&t);
		_dos_getdate(&d);
		box(21,6,52,4,222);
		gotoxy(54,6);
		printf("DATE:%2d/%02d/%02d\n",d.day,d.month,d.year);
		gotoxy(54,7);
		printf("Time:%2d:%02d:%02d.%02d\n",t.hour,t.minute,t.second,t.hsecond);

		gotoxy(25,9);
		textcolor(WHITE);
		cputs(">>> CREEPERTAINMENT >>>");
		textcolor(WHITE);
		gotoxy(2,2);
		cputs(">>>> LETS  TAKE ENTERTAINMENT TO NEXT LEVEL >>>>");
		box(35,10,20,11);
		textcolor(WHITE);
		gotoxy(22,12);
		cputs("1. MUSIC");
		gotoxy(22,14);
		cputs("2. GAMES");
		gotoxy(22,16);
		cputs("0. MAIN MENU");
		gotoxy(25,18);
		cputs("ENTER THE CHOICE NUMBER : ");
		v=int(getche()-48);
		delay(100);
		if(v)
		{ switch(v)
		 {
			case 1:
			      music();
			      break;

			case 2:
			       game();
				break;
			default:

				gotoxy(27,20);
				cputs("INVALID ENTRY");
				delay(1000);
				break;

		 }}
	}while(v!=0);
}
예제 #14
0
void funccall::ss()
{

	int v;
	struct dostime_t t;
	struct dosdate_t d;
	do
	{
		textbackground(BLUE);
		textcolor(MAGENTA);
		_setcursortype(_NORMALCURSOR);
		clrscr();
		textcolor(GREEN);
		box(4,4,4,4);
		box(4,4,6,6);
		textcolor(GREEN+BLINK);
		gotoxy(11,7);
		cputs("CREEPER");
		delay(502);
		_dos_gettime(&t);
		_dos_getdate(&d);
		box(21,6,52,4,222);
		gotoxy(54,6);
		printf("DATE:%2d/%02d/%02d\n",d.day,d.month,d.year);
		gotoxy(54,7);
		printf("Time:%2d:%02d:%02d.%02d\n",t.hour,t.minute,t.second,t.hsecond);

		gotoxy(25,9);
		textcolor(WHITE+BLINK);
		cputs(">>>> SCREEN SAVERS >>>>");
		box(35,10,20,11);
		textcolor(WHITE);
		gotoxy(22,12);
		cputs("1. COLOUR BOX");
		gotoxy(22,13);
		cputs("2. WELCOME NOTE");
		gotoxy(22,14);
		cputs("3. CREEPER BOOTING");
		gotoxy(22,15);
		cputs("4. CREEPER ALL THE WAY");
		gotoxy(22,16);
		cputs("0. MAIN MENU");
		gotoxy(25,18);
		cputs("ENTER THE CHOICE NUMBER : ");
		v=int(getche()-48);
		delay(100);
		if(v)
		{ switch(v)
		 {
			case 1:
			      colbox();
			      break;

			case 2:
				wel();
				break;
			case 3:
				intro();
				break;
			case 4:
				crepalltheway();
				break;
			default:

				gotoxy(27,20);
				cputs("INVALID ENTRY");
				delay(1000);
				break;

		 }}
	}while(v!=0);
}
예제 #15
0
void funccall::contpan()
{

	int v;
	struct dostime_t t;
	struct dosdate_t d;
	do
	{
		textbackground(BLUE);
		textcolor(MAGENTA);
		_setcursortype(_NORMALCURSOR);
		clrscr();
		textcolor(GREEN);
		box(4,4,4,4);
		box(4,4,6,6);
		textcolor(GREEN+BLINK);
		gotoxy(11,7);
		cputs("CREEPER");
		delay(502);
		_dos_gettime(&t);
		_dos_getdate(&d);
		box(21,6,52,4,222);
		gotoxy(54,6);
		printf("DATE:%2d/%02d/%02d\n",d.day,d.month,d.year);
		gotoxy(54,7);
		printf("Time:%2d:%02d:%02d.%02d\n",t.hour,t.minute,t.second,t.hsecond);

		gotoxy(25,9);
		textcolor(WHITE+BLINK);
		cputs(">>>> CONTROL PANEL >>>>");
		box(35,10,20,11);
		textcolor(WHITE);
		gotoxy(22,12);
		cputs("1. CHANGE PASSWORD");
		gotoxy(22,14);
		cputs("2. CHANGE WELCOME NOTE");
		gotoxy(22,16);
		cputs("0. MAIN MENU");
		gotoxy(25,18);
		cputs("ENTER THE CHOICE NUMBER : ");
		v=int(getche()-48);
		delay(100);
		if(v)
		{ switch(v)
		 {
			case 1:
			      chngpass();
			      break;

			case 2:
				chngwel();
				break;
			default:

				gotoxy(27,20);
				cputs("INVALID ENTRY");
				delay(1000);
				break;

		 }}
	}while(v!=0);
}
예제 #16
0
void funccall::mmenu()
{

	int v;
	struct dostime_t t;
	struct dosdate_t d;
	do
	{
		textbackground(BLUE);
		textcolor(MAGENTA);
		_setcursortype(_NORMALCURSOR);
		clrscr();
		textcolor(GREEN);
		box(4,4,4,4);
		box(4,4,6,6);
		textcolor(GREEN+BLINK);
		gotoxy(11,7);
		cputs("CREEPER");
		delay(502);
		_dos_gettime(&t);
		_dos_getdate(&d);
		box(21,6,52,4,222);
		gotoxy(54,6);
		printf("DATE:%2d/%02d/%02d\n",d.day,d.month,d.year);
		gotoxy(54,7);
		printf("Time:%2d:%02d:%02d.%02d\n",t.hour,t.minute,t.second,t.hsecond);

		gotoxy(29,9);
		textcolor(WHITE+BLINK);
		cputs(">>>> MENU >>>>");

		for(int i=0;i<13;++i)
		{
			box(1+(6*i),1+i,3,11);
			delay(70);
			box(1+6*i,1+i,3,11,int(' '));

		}
			box(76,14,3,11);
		textcolor(WHITE);
		gotoxy(5,12);
		cputs("1. CONTROL PANEL");
		gotoxy(5,14);
		cputs("2. SCREEN SAVERS");
		gotoxy(5,16);
		cputs("3. ENTERTAINMENT");
		gotoxy(5,18);
		cputs("4. OFFICE");
		gotoxy(28,20);
		cputs("0. EXIT");
		gotoxy(25,22);
		cputs("ENTER THE CHOICE NUMBER : ");
		v=int(getche()-48);
		delay(100);
		if(v)
		{ switch(v)
		 {
			case 1:
			      contpan();
			      break;
			case 2:
				ss();
				break;
			case 3:
				entertainment();
				break;

			case 4: of_beg();
				break;
			default:

				gotoxy(55,22);
				cputs("INVALID ENTRY");
				delay(1000);
				break;

		 }}
	}while(v!=0);
}
예제 #17
0
//$$$$$$$$$$$$$$$$$$$$$$$$
void active_status_bar(int i,int j) //defaultvalue  i==
{

    //int row=13;

    struct dostime_t t;
    _dos_gettime(&t);

    struct dosdate_t d;
    _dos_getdate(&d);

   window(1,2,80,23);
   textbackground(1);
   clrscr();

   window(1,24,80,25);
   textbackground(7);
   clrscr();


   switch(j){
      case 1:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf(Status[i]);

		      gotoxy(14,1);
		      textcolor(0);
		      cprintf( Status_Expressoin[i]);
		      break;
     case 2:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf(file_list1[i]);
		      cprintf(file_list2[i]);

		      gotoxy(14,1);
		      textcolor(0);
		      cprintf( File_Status_Expressoin[i]);
		      break;
     case 3:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf(PROGRAMMER_list1[i]);

		      gotoxy(17,1);
		      textcolor(0);
		      cprintf( PROGRAMMER_Status_Expressoin[i]);
		      break;

     case 4:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf("");

		      gotoxy(17,1);
		      textcolor(0);
		      cprintf( PROGRAMMER_Status_Expressoin[i]);
		      break;

      case 5:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf(project_list1[i]);
		      cprintf(project_list2[i]);
		      gotoxy(17,1);
		      textcolor(0);
		      cprintf(Project_Status_Expressoin[i]);
		      break;




      case 6: gotoxy(1,1);
		      textcolor(4);

		      cprintf(project_list1[i]);
		      cprintf(project_list2[i]);
		      gotoxy(17,1);
		      textcolor(0);
		      cprintf(Project_Status_Expressoin[i]);
		      break;


      case 7:	      gotoxy(1,1);
		      textcolor(4);

		      cprintf(project_list1[i]);
		      cprintf(project_list2[i]);
		      gotoxy(17,1);
		      textcolor(0);
		      cprintf(Project_Status_Expressoin[i]);
		      break;




   }


  textcolor(6);
  gotoxy(57,1);
  cprintf("%d - %d - %d ", d.month,d.day,d.year);
  cprintf(" %2d : %02d", t.hour, t.minute);
    window(1,25,80,25);
   textbackground(1);
   clrscr();
}
예제 #18
0
파일: packet.cpp 프로젝트: kenjreno/lora3
USHORT PACKET::Add (class TCollection &MsgText)
{
   int f1, f2, f3, f4, t1, t2, t3, t4;
   USHORT RetVal = TRUE, AddedIntl = FALSE, IsEchomail = FALSE;
   CHAR Temp[64], *pszText, *pszAddress, *p;
   PKTINDEX pktIndex;
   struct dosdate_t d_date;
   struct dostime_t d_time;

   memset (&pktIndex, 0, sizeof (PKTINDEX));
   fflush (fp);
   fseek (fp, filelength (fileno (fp)) - 2L, SEEK_SET);

   pktIndex.Number = TotalMsgs + 1;
   pktIndex.Position = ftell (fp);

   memset (&msgHdr, 0, sizeof (msgHdr));
   msgHdr.Version = 2;

   f1 = f2 = f3 = f4 = 0;
   pszAddress = FromAddress;
   if (strchr (pszAddress, ':') != NULL) {
      f1 = atoi (pszAddress);
      pszAddress = strchr (pszAddress, ':') + 1;
   }
   if (strchr (pszAddress, '/') != NULL) {
      f2 = (USHORT)atoi (pszAddress);
      pszAddress = strchr (pszAddress, '/') + 1;
   }
   f3 = (USHORT)atoi (pszAddress);
   if ((p = strchr (pszAddress, '@')) != NULL)
      *p++ = '\0';
   if (strchr (pszAddress, '.') != NULL) {
      pszAddress = strchr (pszAddress, '.') + 1;
      f4 = (USHORT)atoi (pszAddress);
   }

   msgHdr.OrigNet = (USHORT)f2;
   msgHdr.OrigNode = (USHORT)f3;

   t1 = t2 = t3 = t4 = 0;
   pszAddress = ToAddress;
   if (strchr (pszAddress, ':') != NULL) {
      t1 = atoi (pszAddress);
      pszAddress = strchr (pszAddress, ':') + 1;
   }
   if (strchr (pszAddress, '/') != NULL) {
      t2 = (USHORT)atoi (pszAddress);
      pszAddress = strchr (pszAddress, '/') + 1;
   }
   t3 = (USHORT)atoi (pszAddress);
   if ((p = strchr (pszAddress, '@')) != NULL)
      *p++ = '\0';
   if (strchr (pszAddress, '.') != NULL) {
      pszAddress = strchr (pszAddress, '.') + 1;
      t4 = (USHORT)atoi (pszAddress);
   }

   msgHdr.DestNet = (USHORT)t2;
   msgHdr.DestNode = (USHORT)t3;

   if (Crash == TRUE)
      msgHdr.Attrib |= MSGCRASH;
   if (FileAttach == TRUE)
      msgHdr.Attrib |= MSGFILE;
   if (FileRequest == TRUE)
      msgHdr.Attrib |= MSGFRQ;
   if (Hold == TRUE)
      msgHdr.Attrib |= MSGHOLD;
   if (KillSent == TRUE)
      msgHdr.Attrib |= MSGKILL;
   if (Local == TRUE)
      msgHdr.Attrib |= MSGLOCAL;
   if (Private == TRUE)
      msgHdr.Attrib |= MSGPRIVATE;
   if (ReceiptRequest == TRUE)
      msgHdr.Attrib |= MSGRRQ;
   if (Received == TRUE)
      msgHdr.Attrib |= MSGREAD;
   if (Sent == TRUE)
      msgHdr.Attrib |= MSGSENT;

   fwrite (&msgHdr, sizeof (MSGHDR), 1, fp);

   _dos_getdate (&d_date);
   _dos_gettime (&d_time);

   if (Written.Day == 0)
      Written.Day = d_date.day;
   if (Written.Month == 0)
      Written.Month = d_date.month;
   if (Written.Year == 0)
      Written.Year = (USHORT)d_date.year;
   if (Written.Hour == 0)
      Written.Hour = d_time.hour;
   if (Written.Minute == 0)
      Written.Minute = d_time.minute;
   if (Written.Second == 0)
      Written.Second = d_time.second;

   sprintf (Line, "%2d %3.3s %02d  %02d:%02d:%02d", Written.Day, pktMonths[Written.Month - 1], Written.Year % 100, Written.Hour, Written.Minute, 0);
   fwrite (Line, strlen (Line) + 1, 1, fp);

   fwrite (To, strlen (To) + 1, 1, fp);
   fwrite (From, strlen (From) + 1, 1, fp);
   fwrite (Subject, strlen (Subject) + 1, 1, fp);

   if ((pszText = (PSZ)MsgText.First ()) != NULL) {
      if (!strncmp (pszText, "AREA:", 5))
         IsEchomail = TRUE;
   }

   if (IsEchomail == FALSE) {
      if (f1 != t1) {
         sprintf (Temp, "\001INTL %d:%d/%d %d:%d/%d\r", t1, t2, t3, f1, f2, f3);
         fwrite (Temp, strlen (Temp), 1, fp);
         AddedIntl = TRUE;
      }
      if (f4 != 0) {
         sprintf (Temp, "\001FMPT %u\r", f4);
         fwrite (Temp, strlen (Temp), 1, fp);
      }
      if (t4 != 0) {
         sprintf (Temp, "\001TOPT %u\r", t4);
         fwrite (Temp, strlen (Temp), 1, fp);
      }
   }

   if ((pszText = (PSZ)MsgText.First ()) != NULL)
      do {
         if (IsEchomail == FALSE) {
            if (!strncmp (pszText, "\001FMPT ", 6))
               continue;
            else if (!strncmp (pszText, "\001TOPT ", 6))
               continue;
            else if (!strncmp (pszText, "\001INTL ", 6) && AddedIntl == TRUE)
               continue;
         }
         fwrite (pszText, strlen (pszText), 1, fp);
         fwrite ("\r", 1, 1, fp);
      } while ((pszText = (PSZ)MsgText.Next ()) != NULL);

   fwrite ("\000\000\000", 3, 1, fp);

   Index.Add (&pktIndex, sizeof (PKTINDEX));

   return (RetVal);
}
예제 #19
0
파일: L_MAIN.C 프로젝트: jloughry/BANCStar
int main(int argc, char **argv)
 {
     int setup( int, char **, Promptfile, long *, long *, boolean *,
                boolean *, boolean *, boolean *, boolean *, boolean *,
                boolean *, boolean *, boolean *, int *, Sellstar_system * );
     int help( void );
     int check( char *, boolean, long *, char * );
     int print_check_report(int, char *, long, char);
     int list( char *, Promptfile, long, long, boolean, boolean, boolean );
     int convert ( char *, Promptfile, Sellstar_system );
     int make_screen_prints ( char *, Promptfile, Sellstar_system, boolean );
     int linenumber( char *, long );
     int un_setup_printer( void );
     int bbdd( Promptfile prompt, int starting_at );

     Promptfile prompt;

     int rc, checkresult;
     boolean nocheck;
     boolean convert_file;
     boolean report_only;
     boolean list_only;
     boolean extended_report;
     boolean file_only;
     boolean laser_option;
     boolean screen_print_option;
     boolean convert_data_dictionary;
     int starting_where;

     Sellstar_system main_m;

     long startlistline, endlistline, errline;
     char errchar;
     char outtext_string[MAX_LINE_LENGTH];
     int text_color;
     int rand_color_1, rand_color_2;
     struct dostime_t randomtime;

     /*
     **  Print an informative message on the screen, in color.
     */

     sprintf(outtext_string, "\n");
     _outtext(outtext_string);
     text_color = _gettextcolor();

     _dos_gettime(&randomtime);
     rand_color_1 = ( randomtime.second % 6 ) + 9;
     _settextcolor(rand_color_1);
     sprintf(outtext_string, "%s", BANNER);
     _outtext(outtext_string);

     _dos_gettime(&randomtime);
     rand_color_2 = ( ( randomtime.second + 2 ) % 6 ) + 9;
     _settextcolor(rand_color_2);
     sprintf(outtext_string, "%s", COPYRIGHT);
     _outtext(outtext_string);

     _settextcolor(text_color);
     sprintf(outtext_string, "\n");
     _outtext(outtext_string);

     /*
     **  Give the user Help if desired.
     */

     if ( argc == 1 )
     {
          fprintf(stdout, USAGE);
          exit(-1);
     }

     if ( argc == 2 )
     {
          help();                   /* give the user Help here. */
          exit(-1);
     }

     /*
     ** allocate an array of struct pfile to hold the prompt file.
     */

     if ( (prompt = (Promptfile)malloc((long)(MAX_NUM_PROMPTS + 1) *
                                                sizeof(struct pfile))) == NULL )
     {
          fprintf(stdout, "Insufficient memory to run LIST.\n");
          exit(-1);
     }

     /*
     **  Get the filename to process.
     */

     strcpy(filename, argv[argc-1]);

     /*
     **  Look for it on disk.
     */

     _splitpath(filename, drive, subdir, file, ext);

     if (strlen(subdir) == 0)
          if (strcmp(strupr(ext), ".SCN") == 0)
               strcpy(subdir, SCREENS);
          else if (strcmp(strupr(ext), ".FRM") == 0)
               strcpy(subdir, FORMS);

     sprintf(pathname, "%s%s", drive, subdir);

     sprintf(longfilename, "%s%s%s%s", drive, subdir, file, ext);

     /*
     **  Before taking the time to read in the prompt file, check to make sure
     **  we can find the indicated input file.
     */

     if ((done = _dos_findfirst(longfilename, 47, &dta)) != 0)
     {
          perror("LIST");

          exit(-1);
     }

     /*
     **  Otherwise, call SETUP() and begin.
     */

     rc = setup( argc, argv, prompt, &startlistline, &endlistline, &nocheck,
                 &report_only, &list_only, &extended_report, &file_only,
                 &convert_file, &laser_option, &screen_print_option,
                 &convert_data_dictionary, &starting_where, &main_m
     );

     if ( convert_data_dictionary ) {
        bbdd(prompt, starting_where);
        fcloseall();
        goto all_done;
     }

     /*
     **  Get the filename [ again ] to hand off to List().
     */

     strcpy(filename, argv[argc-1]);

     _splitpath(filename, drive, subdir, file, ext);

     if (strlen(subdir) == 0)
          if (strcmp(strupr(ext), ".SCN") == 0)
               strcpy(subdir, SCREENS);
          else if (strcmp(strupr(ext), ".FRM") == 0)
               strcpy(subdir, FORMS);

     sprintf(pathname, "%s%s", drive, subdir);

     sprintf(longfilename, "%s%s%s%s", drive, subdir, file, ext);

     if ((done = _dos_findfirst(longfilename, 47, &dta)) != 0)
     {
          perror("LIST");

          exit(-1);
     }

     if ( convert_file ) {
        if (strcmp(strupr(ext), ".SCN") == 0)
           fprintf(stdout, "Converting screen file to BRANCHBANKER format . . .\n");
        else {
           fprintf(stdout, "BRANCHBANKER conversion does not apply to forms.\n");

          exit(-1);
        }
     }
     else
        fprintf(stdout, "Running . . .\n");

     /*
     **  (There may be more than one file.)
     */

     while ( !done )
     {
          strcpy(name, pathname);
          strcat(name, dta.name);
          strupr(name);

          /*
          **  First CHECK the file.  Only if it passes do we actually LIST it.
          */

          if ((checkresult=check(name, nocheck, &errline, &errchar))==0)
          {
                if ( convert_file ) {
                        convert ( name, prompt, main_m );
                }
                else {
                        if ( ( screen_print_option ) &&
                             (strcmp(strupr(ext), ".SCN") == 0) ) {
                                make_screen_prints( name, prompt, main_m,
                                                    laser_option );
                        }
                        else {
                                list( name, prompt, startlistline, endlistline,
                                      report_only, list_only, extended_report );
                        }
                }
          }
          else
                if (checkresult != (-1))
                        print_check_report(checkresult, name, errline, errchar);

          /*
          **  If sending this file to a file, print a formfeed here (since it
          **  is presumably NOT going directly to DOS Print).
          */

          if ( ( file_only ) && ( !convert_file ) )
               fprintf(fp_output, "\f");

          /*
          **  Check to see if the user wants to escape out and exit.
          */

          if ( kbhit() )
          {
               if ( getch() == 27 )
               {
                    fprintf(stdout, "\nAre you sure you want to exit? (Y/N) ");
                    console_input = getch();

                    if ( ( console_input == 13 ) || ( console_input == 27 ) ||
                         ( console_input == 'Y') || ( console_input == 'y' ) )
                    {
                         fclose(fp_input);
                         fclose(fp_output);
                         fclose(fp_prompt);
                         fclose(fp_check);
                         fprintf(stdout, "\nOkay.\n");

                         exit(-2);
                    }
               }
               else
                    fprintf(stdout, "\nContinuing . . .\n");

          }  /* end of user exit loop */

          /*
          **  Otherwise, look for the next file.
          */

          done = _dos_findnext(&dta);

     }  /* end of MAIN while loop */

     if ( !convert_file )
        un_setup_printer();          /* turn off automatic perforation skip */

     if ( laser_option ) {
        fputc(27, fp_output);        /* RESET IBM LASER PRINTER TO HP MODE! */
        fputc(91, fp_output);
        fputc(75, fp_output);
        fputc( 3, fp_output);
        fputc( 0, fp_output);
        fputc( 1, fp_output);
        fputc(49, fp_output);
        fputc( 2, fp_output);
     }

     /*
     **  Clean up, free memory, and exit.
     */

     fclose(fp_output);
     fclose(fp_input);
     fclose(fp_prompt);
     fclose(fp_check);
     fclose(fp_main);

     /*
     **  Send the whole mess to the printer, cancelling any previous job
     **  left in the print queue BY THIS PROGRAM ONLY, to avoid locking up
     **  the machine on a file-access conflict.
     */

     if ( file_only )
     {
          fprintf(stdout, "Output has been sent to the file C:\\LISTFILE.RJL\n");

          if ( laser_option ) {
             fprintf(stdout, "\n");
             fprintf(stdout, "To print to the IBM Laser Printer, you must first be logged on to the LAN.\n");
             fprintf(stdout, "Restart the computer with the LAN diskette, log on and exit to DOS.\n");
             fprintf(stdout, "Then use NPRINT C:\\LISTFILE.RJL /nb /noff /S=WA001HME01 /Q=BKS_01 to print.\n");
          }
     }
     else if ( !convert_file )
     {
          system(CANCEL_PRINTING);

          system(SEND_TO_PRINTER);
     }

     /*
     **  And we're outa here.
     */
all_done:
     return(0);
}
예제 #20
0
파일: packet.cpp 프로젝트: kenjreno/lora3
USHORT PACKET::Open (PSZ pszName, USHORT doScan)
{
   int c;
   USHORT RetVal = FALSE, i;
   PSZ pszAddress;
   ULONG Position;
   PKTINDEX pktIndex;
   struct dosdate_t date;
   struct dostime_t time;

   TotalMsgs = 0L;
   Index.Clear ();

   if (fp != NULL)
      fclose (fp);

   if ((fp = fopen (pszName, "r+b")) == NULL)
      fp = fopen (pszName, "w+b");
   strcpy (FileName, pszName);

   if (fp != NULL) {
      setvbuf (fp, NULL, _IOFBF, 4096L);
      if (filelength (fileno (fp)) == 0L) {
         memset (&pkt2Hdr, 0, sizeof (PKT2HDR));

         _dos_getdate (&date);
         _dos_gettime (&time);

         pkt2Hdr.Version = 2;
         pkt2Hdr.CWValidation = 0x100;
         pkt2Hdr.Capability = 0x0001;
         pkt2Hdr.ProductL = 0x4E;

         pkt2Hdr.Day = date.day;
         pkt2Hdr.Month = (UCHAR)(date.month - 1);
         pkt2Hdr.Year = (USHORT)date.year;
         pkt2Hdr.Hour = time.hour;
         pkt2Hdr.Minute = time.minute;
         pkt2Hdr.Second = time.second;

         pszAddress = ToAddress;
         if (strchr (pszAddress, ':') != NULL) {
            pkt2Hdr.DestZone2 = pkt2Hdr.DestZone = (USHORT)atoi (pszAddress);
            pszAddress = strchr (pszAddress, ':') + 1;
         }
         if (strchr (pszAddress, '/') != NULL) {
            pkt2Hdr.DestNet = (USHORT)atoi (pszAddress);
            pszAddress = strchr (pszAddress, '/') + 1;
         }
         pkt2Hdr.DestNode = (USHORT)atoi (pszAddress);
         if (strchr (pszAddress, '.') != NULL) {
            pszAddress = strchr (pszAddress, '.') + 1;
            pkt2Hdr.DestPoint = (USHORT)atoi (pszAddress);
         }

         pszAddress = FromAddress;
         if (strchr (pszAddress, ':') != NULL) {
            pkt2Hdr.OrigZone2 = pkt2Hdr.OrigZone = (USHORT)atoi (pszAddress);
            pszAddress = strchr (pszAddress, ':') + 1;
         }
         if (strchr (pszAddress, '/') != NULL) {
            pkt2Hdr.OrigNet = (USHORT)atoi (pszAddress);
            pszAddress = strchr (pszAddress, '/') + 1;
         }
         pkt2Hdr.OrigNode = (USHORT)atoi (pszAddress);
         if (strchr (pszAddress, '.') != NULL) {
            pszAddress = strchr (pszAddress, '.') + 1;
            pkt2Hdr.OrigPoint = (USHORT)atoi (pszAddress);
         }

         memcpy (pkt2Hdr.Password, Password, 8);
         fwrite (&pkt2Hdr, sizeof (PKT2HDR), 1, fp);

         memset (&msgHdr, 0, sizeof (MSGHDR));
         fwrite (&msgHdr, 2, 1, fp);

         sprintf (FromAddress, "%d:%d/%d.%d", pkt2Hdr.OrigZone, pkt2Hdr.OrigNet, pkt2Hdr.OrigNode, pkt2Hdr.OrigPoint);
         sprintf (ToAddress, "%d:%d/%d.%d", pkt2Hdr.DestZone, pkt2Hdr.DestNet, pkt2Hdr.DestNode, pkt2Hdr.DestPoint);

         fflush (fp);
         fseek (fp, filelength (fileno (fp)) - sizeof (MSGHDR), SEEK_SET);
         RetVal = TRUE;
      }
      else {
         fread (&pkt2Hdr, sizeof (PKT2HDR), 1, fp);
         if (pkt2Hdr.Version == 2) {
            if (pkt2Hdr.Rate == 2) {
               memcpy (&pkt22Hdr, &pkt2Hdr, sizeof (PKT22HDR));
               sprintf (FromAddress, "%d:%d/%d.%d", pkt22Hdr.OrigZone, pkt22Hdr.OrigNet, pkt22Hdr.OrigNode, pkt22Hdr.OrigPoint);
               if (pkt22Hdr.OrigDomain[0] != '\0') {
                  strcat (FromAddress, "@");
                  strcat (FromAddress, pkt22Hdr.OrigDomain);
               }
               sprintf (ToAddress, "%d:%d/%d.%d", pkt22Hdr.DestZone, pkt22Hdr.DestNet, pkt22Hdr.DestNode, pkt22Hdr.DestPoint);
               if (pkt22Hdr.DestDomain[0] != '\0') {
                  strcat (ToAddress, "@");
                  strcat (ToAddress, pkt22Hdr.DestDomain);
               }
               RetVal = TRUE;
            }
            else {
//kj               swab ((char *)&pkt2Hdr.CWValidation, (char *)&i, 2);
               pkt2Hdr.CWValidation = i;
               if (pkt2Hdr.Capability != pkt2Hdr.CWValidation || !(pkt2Hdr.Capability & 0x0001)) {
                  sprintf (FromAddress, "%d:%d/%d.%d", pkt2Hdr.OrigZone, pkt2Hdr.OrigNet, pkt2Hdr.OrigNode, 0);
                  sprintf (ToAddress, "%d:%d/%d.%d", pkt2Hdr.DestZone, pkt2Hdr.DestNet, pkt2Hdr.DestNode, 0);
               }
               else {
                  sprintf (FromAddress, "%d:%d/%d.%d", pkt2Hdr.OrigZone, pkt2Hdr.OrigNet, pkt2Hdr.OrigNode, pkt2Hdr.OrigPoint);
                  sprintf (ToAddress, "%d:%d/%d.%d", pkt2Hdr.DestZone, pkt2Hdr.DestNet, pkt2Hdr.DestNode, pkt2Hdr.DestPoint);
               }
               memcpy (Password, pkt2Hdr.Password, sizeof (pkt2Hdr.Password));
               Password[sizeof (pkt2Hdr.Password)] = '\0';
               RetVal = TRUE;
            }
         }
      }
   }

   if (RetVal == TRUE) {
      Date.Day = (UCHAR)pkt2Hdr.Day;
      Date.Month = (UCHAR)(pkt2Hdr.Month + 1);
      Date.Year = (USHORT)pkt2Hdr.Year;
      Date.Hour = (UCHAR)pkt2Hdr.Hour;
      Date.Minute = (UCHAR)pkt2Hdr.Minute;
      Date.Second = (UCHAR)pkt2Hdr.Second;
   }

   if (RetVal == TRUE && fp != NULL && doScan == TRUE) {
      do {
         memset (&pktIndex, 0, sizeof (PKTINDEX));
         pktIndex.Position = ftell (fp);

         memset (&msgHdr, 0, sizeof (MSGHDR));
         fread (&msgHdr, sizeof (MSGHDR), 1, fp);

         if (msgHdr.Version == 2) {
            // Date and time
            while ((c = fgetc (fp)) != '\0' && c != EOF)
               ;
            // To
            while ((c = fgetc (fp)) != '\0' && c != EOF)
               ;
            // From
            while ((c = fgetc (fp)) != '\0' && c != EOF)
               ;
            // Subject
            while ((c = fgetc (fp)) != '\0' && c != EOF)
               ;
            // Text body
            while ((c = fgetc (fp)) != '\0' && c != EOF)
               ;

            TotalMsgs++;
            pktIndex.Number = TotalMsgs;
            Index.Add (&pktIndex, sizeof (PKTINDEX));
         }
         else if (msgHdr.Version != 0) {
            while ((c = fgetc (fp)) != EOF && c != 0)
               ;
            if (c == 0) {
               Position = ftell (fp);
               memset (&msgHdr, 0, sizeof (MSGHDR));
               fread (&msgHdr, sizeof (MSGHDR), 1, fp);
               fseek (fp, Position, SEEK_SET);
            }
            else
               msgHdr.Version = 0;
         }
      } while (msgHdr.Version != 0);
   }

   return (RetVal);
}
예제 #21
0
파일: fidosdm.cpp 프로젝트: kenjreno/lora3
USHORT FIDOSDM::Read (ULONG ulMsg, class TCollection &MsgText, SHORT nWidth)
{
   int fz, fn, fo, tz, tn, to, dd, yy, hr, mn, sc;
   USHORT RetVal = FALSE, SkipNext;
   USHORT ToPoint, ToZone, FromPoint, FromZone;
   CHAR mm[4];
   SHORT i, nReaded, nCol;
   MSGINDEX *msgIndex;
   struct dosdate_t date;
   struct dostime_t time;

   New ();
   MsgText.Clear ();
   ToPoint = ToZone = FromPoint = FromZone = 0;
   fp = NULL;

   if ((msgIndex = (MSGINDEX *)Index.First ()) != NULL)
      do {
         if (msgIndex->Number == ulMsg) {
            sprintf (LastFile, "%s%s", BasePath, msgIndex->FileName);
            if ((fp = _fsopen (LastFile, "rb", SH_DENYNO)) != NULL) {
               RetVal = TRUE;
               Current = ulMsg;
               break;
            }
         }
      } while ((msgIndex = (MSGINDEX *)Index.Next ()) != NULL);

   if (RetVal == TRUE && fp != NULL) {
      memset (&msgHdr, 0, sizeof (msgHdr));
      fread (&msgHdr, sizeof (msgHdr), 1, fp);

      for (i = 0; i < 7; i++) {
         if (!strncmp (fidoDays[i], msgHdr.Date, 3))
            break;
      }

      if (i < 7) {
         sscanf (&msgHdr.Date[4], "%2d %3s %2d %2d:%2d", &dd, mm, &yy, &hr, &mn);
         sc = 0;
      }
      else
         sscanf (msgHdr.Date, "%2d %3s %2d  %2d:%2d:%02d", &dd, mm, &yy, &hr, &mn, &sc);

      Written.Day = (UCHAR)dd;
      for (i = 0; i < 12; i++) {
         if (!stricmp (fidoMonths[i], mm)) {
            Written.Month = (UCHAR)(i + 1);
            break;
         }
      }
      if (Written.Month < 1 || Written.Month > 12)
         Written.Month = 1;
      if ((Written.Year = (USHORT)(yy + 1900)) < 1990)
         Written.Year += 100;
      Written.Hour = (UCHAR)hr;
      Written.Minute = (UCHAR)mn;
      Written.Second = (UCHAR)sc;

      _dos_getdate (&date);
      _dos_gettime (&time);

      Arrived.Day = date.day;
      Arrived.Month = date.month;
      Arrived.Year = (USHORT)date.year;
      Arrived.Hour = time.hour;
      Arrived.Minute = time.minute;
      Arrived.Second = time.second;

      strcpy (From, msgHdr.From);
      strcpy (To, msgHdr.To);
      strcpy (Subject, msgHdr.Subject);

      Crash = (UCHAR)((msgHdr.Attrib & MSGCRASH) ? TRUE : FALSE);
      FileAttach = (UCHAR)((msgHdr.Attrib & MSGFILE) ? TRUE : FALSE);
      FileRequest = (UCHAR)((msgHdr.Attrib & MSGFRQ) ? TRUE : FALSE);
      Hold = (UCHAR)((msgHdr.Attrib & MSGHOLD) ? TRUE : FALSE);
      KillSent = (UCHAR)((msgHdr.Attrib & MSGKILL) ? TRUE : FALSE);
      Local = (UCHAR)((msgHdr.Attrib & MSGLOCAL) ? TRUE : FALSE);
      Private = (UCHAR)((msgHdr.Attrib & MSGPRIVATE) ? TRUE : FALSE);
      ReceiptRequest = (UCHAR)((msgHdr.Attrib & MSGRRQ) ? TRUE : FALSE);
      Received = (UCHAR)((msgHdr.Attrib & MSGREAD) ? TRUE : FALSE);
      Sent = (UCHAR)((msgHdr.Attrib & MSGSENT) ? TRUE : FALSE);

      Original = msgHdr.Reply;
      Reply = msgHdr.Up;

      pLine = szLine;
      nCol = 0;
      Current = ulMsg;
      SkipNext = FALSE;

      do {
         nReaded = (SHORT)fread (szBuff, 1, sizeof (szBuff), fp);

         for (i = 0, pBuff = szBuff; i < nReaded && *pBuff != '\0'; i++, pBuff++) {
            if (*pBuff == '\r') {
               *pLine = '\0';
               if (!strncmp (szLine, "\001FMPT ", 6))
                  FromPoint = (USHORT)atoi (&szLine[6]);
               else if (!strncmp (szLine, "\001TOPT ", 6))
                  ToPoint = (USHORT)atoi (&szLine[6]);
               else if (!strncmp (szLine, "\001INTL ", 6)) {
                  sscanf (&szLine[6], "%d:%d/%d %d:%d/%d", &tz, &tn, &to, &fz, &fn, &fo);
                  if (tn == msgHdr.DestNet && to == msgHdr.DestNode)
                     ToZone = (USHORT)tz;
                  if (fn == msgHdr.OrigNet && fo == msgHdr.OrigNode)
                     FromZone = (USHORT)fz;
               }
               else if (!strncmp (szLine, "\001FLAGS ", 7)) {
                  if (strstr (szLine, "DIR"))
                     Direct = TRUE;
               }
               if (pLine > szLine && SkipNext == TRUE) {
                  pLine--;
                  while (pLine > szLine && *pLine == ' ')
                     *pLine-- = '\0';
                  if (pLine > szLine)
                     MsgText.Add (szLine);
               }
               else if (SkipNext == FALSE)
                  MsgText.Add (szLine);
               SkipNext = FALSE;
               pLine = szLine;
               nCol = 0;
            }
            else if (*pBuff != '\n') {
               *pLine++ = *pBuff;
               nCol++;
               if (nCol >= nWidth) {
                  *pLine = '\0';
                  if (strchr (szLine, ' ') != NULL) {
                     while (nCol > 1 && *pLine != ' ') {
                        nCol--;
                        pLine--;
                     }
                     if (nCol > 0) {
                        while (*pLine == ' ')
                           pLine++;
                        strcpy (szWrp, pLine);
                     }
                     *pLine = '\0';
                  }
                  else
                     szWrp[0] = '\0';
                  MsgText.Add (szLine);
                  strcpy (szLine, szWrp);
                  pLine = strchr (szLine, '\0');
                  nCol = (SHORT)strlen (szLine);
                  SkipNext = TRUE;
               }
            }
         }
      } while (nReaded != 0 && i >= nReaded);

      sprintf (FromAddress, "%u:%u/%u.%u", FromZone, msgHdr.OrigNet, msgHdr.OrigNode, FromPoint);
      sprintf (ToAddress, "%u:%u/%u.%u", ToZone, msgHdr.DestNet, msgHdr.DestNode, ToPoint);

      fclose (fp);
   }

   return (RetVal);
}
char Execute_G(char *ok,char *esc)
{
  char endprg=0,
       zw_buf1,buf[20];

  int  g_wert,
       xi_wert,
       zk_wert,
       flkt_wert,
       h_wert,
       taste;

  short P1x,P1z,P2x,P2z, steigung,
	step,Xpos,Zpos,za;
  struct dostime_t time;


  Status("Simulation");
  Meldung("Bearbeite G-Befehl.");

  /* eventuell test ob nicht G00 -> dann darf g_wert nicht 0 sein -> Err */

  /* Werte feststellen */

  g_wert=atoi(cncprg[ip].GM);

  strcpy(buf,cncprg[ip].XI);
  ElimSpaces(buf);
  ElimSpaces(buf);
  if (isdigit((int)buf[0]) || buf[0]=='-')
     xi_wert=atoi(buf);
    else xi_wert=atoi(buf+1);

  strcpy(buf,cncprg[ip].ZK);
  ElimSpaces(buf);
  ElimSpaces(buf);
  if (isdigit((int)buf[0]) || buf[0]=='-')
     zk_wert=atoi(buf);
    else zk_wert=atoi(buf+1);

  strcpy(buf,cncprg[ip].FLKT);
  ElimSpaces(buf);
  ElimSpaces(buf);
  if (isdigit((int)buf[0]) || buf[0]=='-')
     flkt_wert=atoi(buf);
    else flkt_wert=atoi(buf+1);

  h_wert=atoi(cncprg[ip].H);

  /* G-Befehle verzweigen */
  switch(g_wert)
  {
     /**************** G00 *******************/
     case 00:if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		if (inkrementell)
		   { /* G00 INCR */
		     endprg=Ziehe_Gerade(xrad,zpos,xrad+xi_wert,zpos+zk_wert,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
		     if (endprg) { *ok=1; *esc=1; }
		     xrad=xrad+xi_wert;
		     zpos=zpos+zk_wert;
		   } else
		   { /* G00 ABS */
		     endprg=Ziehe_Gerade(xrad,zpos,(short)(xi_wert/2)+xcorr,zk_wert+zcorr,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
		     if (endprg) { *ok=1; *esc=1; }
		     xrad=(short)(xi_wert/2)+xcorr;
		     zpos=zk_wert+zcorr;
		   }
	      }
	       else { *ok=0; endprg=1; }
	     break;
     /**************** G01 *******************/
     case 01:if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		if (inkrementell)
		   { /* G01 INCR */
		     endprg=Ziehe_Gerade(xrad,zpos,xrad+xi_wert,zpos+zk_wert,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
		     if (endprg) { *ok=1; *esc=1; }
		     xrad=xrad+xi_wert;
		     zpos=zpos+zk_wert;
		   } else
		   { /* G01 ABS */
		     endprg=Ziehe_Gerade(xrad,zpos,(short)(xi_wert/2)+xcorr,zk_wert+zcorr,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
		     if (endprg) { *ok=1; *esc=1; }
		     xrad=(short)(xi_wert/2)+xcorr;
		     zpos=zk_wert+zcorr;
		   }
	      }
	      else { *ok=0; endprg=1; }
	     break;
     /**************** G02 *******************/
     case 02:if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* test ob == | != 90 */
		if (!strcmp(cncprg[ip+1].GM,"M99 "))
		    {
		      /* Mittelpunkt bestimmen */
		      Xpos=atoi(cncprg[ip+1].XI+1);
		      Zpos=atoi(cncprg[ip+1].ZK+1);
		      if (cncprg[ip+1].ZK[0]!='K' || cncprg[ip+1].XI[0]!='I')
			{
			  Meldung("Error in M99-Anweisung!"); Status("Fehler");
			  getch();
			  endprg=1; *ok=0;
			} else
			{
			  /* Kreisbogen(X1,Z1,X2,Z2,XM,ZM,1=G03 0=G02 */
			  if (inkrementell)
			    {
			      endprg=Ziehe_KreisNO90(xrad,zpos,xrad+xi_wert,zpos+zk_wert,xrad+Xpos,zpos+Zpos,0);
			      /*xrad=xrad+xi_wert;
			      zpos=zk_wert;*/
			    }
			    else {
				   endprg=Ziehe_KreisNO90(xrad,zpos,(short)(xi_wert/2),zk_wert,xrad+Xpos,zpos+Zpos,0);
				   /*xrad=(short)(xi_wert/2);
				   zpos=zk_wert;*/
				 }
			  ip++;
			}
		    }
		 else
		 {
		   /* kreisbogen a=90� */
		   if (inkrementell)
		     { /* G02 INC */
		       endprg=Ziehe_Kreis02(xrad,zpos,xrad+xi_wert,zpos+zk_wert,
							     prgconfig.wait_g01);
		       if (endprg) { *ok=1; *esc=1; }
		       xrad=xrad+xi_wert;
		       zpos=zpos+zk_wert;

		     } else
		     { /* G02 ABS */
		       endprg=Ziehe_Kreis02(xrad,zpos,(short)(xi_wert/2)+xcorr,zk_wert+zcorr,prgconfig.wait_g01);
		       if (endprg) { *ok=1; *esc=1; }
		       xrad=(short)(xi_wert/2)+xcorr;
		       zpos=zk_wert+zcorr;
		     }
		  } /* von if ==/!=90 */
	      } else { *ok=0; endprg=1; } /*von if !I & !K */
	     break;
     /**************** G03 *******************/
     case 03:if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* test ob == | != 90 */
		if (!strcmp(cncprg[ip+1].GM,"M99 "))
		    {
		      /* Mittelpunkt bestimmen */
		      Xpos=atoi(cncprg[ip+1].XI+1);
		      Zpos=atoi(cncprg[ip+1].ZK+1);
		      if (cncprg[ip+1].ZK[0]!='K' || cncprg[ip+1].XI[0]!='I')
			{
			  Meldung("Error in M99-Anweisung!"); Status("Fehler");
			  getch();
			  endprg=1; *ok=0;
			} else
			{
			  /* Kreisbogen(X1,Z1,X2,Z2,XM,ZM,1=G03 0=G02 */
			  if (inkrementell)
			    endprg=Ziehe_KreisNO90(xrad,zpos,xrad+xi_wert,zpos+zk_wert,xrad+Xpos,zpos+Zpos,1);
			    else endprg=Ziehe_KreisNO90(xrad,zpos,(short)(xi_wert/2),zk_wert,xrad+Xpos,zpos+Zpos,1);
			  ip++;
			}
		    }
		 else
		 {
		   /* kreisbogen a=90� */
		   if (inkrementell)
		     { /* G03 INC */
		       endprg=Ziehe_Kreis03(xrad,zpos,xrad+xi_wert,zpos+zk_wert,
							     prgconfig.wait_g01);
		       if (endprg) { *ok=1; *esc=1; }
		       xrad=xrad+xi_wert;
		       zpos=zpos+zk_wert;

		     } else
		     { /* G03 ABS */
		       endprg=Ziehe_Kreis03(xrad,zpos,(short)(xi_wert/2)+xcorr,zk_wert+zcorr,prgconfig.wait_g01);
		       if (endprg) { *ok=1; *esc=1; }
		       xrad=(short)(xi_wert/2)+xcorr;
		       zpos=zk_wert+zcorr;
		     } /* von inkr | abs */
		 } /* von if a==90 */

	      } else { *ok=0; endprg=1; } /*von if !I & !K */
	     break;
     /**************** G04 *******************/
     case 4 :/* Verweilzeit */
	     if (cncprg[ip].XI[0]!='I')
	      {
		 za=0;
		 step=0;
		 do {
		      _dos_gettime(&time);
		      if (kbhit()) taste=getch();
		      if ((short)time.second!=za) { za=(short)time.second; step++; }
		    } while (step<(short)(xi_wert/100) && taste!=27);
	      }
	      break;
     /**************** G21 *******************/
     case 21:break; /* rem */
     /**************** G25 *******************/
     case 25: /* Unterprgr */
	     if (cncprg[ip].FLKT[0]=='L' && flkt_wert<max_line && sp<4)
	     {
	       stack[sp++]=ip;
	       ip=--flkt_wert;
	     } else
	     {
		Status("Error!");
		Meldung("Fehler im GOSUB-G27-Befehl!");
		*ok=0; endprg=1;
	     }break;
     /**************** G26 *******************/
     case 26: /* werkzeugwechsel */
	     if (cncprg[ip].FLKT[0]=='T' && flkt_wert>0 && flkt_wert<=max_tools)
	     {
	       _settextposition(3,37);
	       _outtext(cncprg[ip].FLKT);
	       _outtext("        ");

	       Setzte_Stahl(xrad,zpos,(char)flkt_wert);
	       endprg=Ziehe_Gerade(xrad,zpos,xrad+xi_wert,zpos+zk_wert,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
	       xrad=xrad+xi_wert;
	       zpos=zpos+zk_wert;
	       xcorr=xi_wert;	    /* Korrekturwerte des Stahles muessen */
	       zcorr=zk_wert;	    /* in Abs. mit einberechnet werden	  */
	     } else { *ok=0; endprg=1; }
	     break;
     /**************** G27 *******************/
     case 27: /* goto */
	     if (cncprg[ip].FLKT[0]=='L' && flkt_wert<max_line)
		ip=--flkt_wert;
		else { *ok=0; endprg=1; }
	     break;
     /**************** G33 *******************/
     case 33: /* gewinde schneiden */
	     if (cncprg[ip].FLKT[0]=='K' && flkt_wert>=2 && flkt_wert<500)
	      {
		steigung=flkt_wert;
		if (inkrementell)
		   { /* INCR */
		     endprg=Gewinde(xrad,zpos,zpos+zk_wert,steigung,prgconfig.wait_g01+10000);
		     if (endprg) { *ok=1; *esc=1; }
		     zpos=zpos+zk_wert;
		   } else
		   { /* ABS */
		     endprg=Gewinde(xrad,zpos,zcorr+zk_wert,steigung,prgconfig.wait_g01+10000);
		     if (endprg) { *ok=1; *esc=1; }
		     zpos=zk_wert+zcorr;
		   }
	      }
	      else { *ok=0; endprg=1; }
	      break;
     /**************** G78 *******************/
     case 78: /* Gewindezyklus */
	     if (cncprg[ip].FLKT[0]=='K' && flkt_wert>=2 && flkt_wert<500)
	      {
		/* Start & Zielkoord */
		P1x=xrad; P1z=zpos;
		if (inkrementell)
		    {
		      P2x=xrad+xi_wert;
		      P2z=zpos+zk_wert;
		    } else {
			     P2x=(short)(xi_wert/2)+xcorr;
			     P2z=zk_wert+zcorr;
			   }
		/* Schritt & Steigung */
		step=h_wert;
		steigung=flkt_wert;

		/* Anfahren */
		if (step!=0)
		 if (P1x>P2x)
		    for (Xpos=P1x;Xpos-step>P2x && !endprg;Xpos-=step)
			{
			  endprg=Ziehe_Gerade(P1x,P1z,Xpos-step,P1z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Gewinde(Xpos-step,P1z,P2z,steigung,prgconfig.wait_g01+10000);
			  if (!endprg)
			    endprg=Ziehe_Gerade(xrad,zpos,P1x,P2z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,P2z,P1x,P1z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		  else for (Xpos=P1x;Xpos+step<P2x && !endprg;Xpos+=step)
			{
			  endprg=Ziehe_Gerade(P1x,P1z,Xpos+step,P1z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Gewinde(Xpos+step,P1z,P2z,steigung,prgconfig.wait_g01+10000);
			  if (!endprg)
			    endprg=Ziehe_Gerade(xrad,zpos,P1x,P2z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,P2z,P1x,P1z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			 }

		/* letzter Schritt oder Schritt ohne Aufteilung*/
		if (!endprg)
		  endprg=Ziehe_Gerade(P1x,P1z,P2x,P1z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		   endprg=Gewinde(P2x,P1z,P2z,steigung,prgconfig.wait_g01+20000);
		if (!endprg)
		  endprg=Ziehe_Gerade(xrad,zpos,P1x,P2z,
			 prgconfig.wait_g01+4000,schritt_g00,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P1x,P2z,P1x,P1z,
			 prgconfig.wait_g00,schritt_g00,checkTasten);

		if (endprg) { *ok=1; *esc=1; }
		xrad=P1x;
		zpos=P1z;
	      } break;
     /**************** G84 *******************/
     case 84: /* laengsdrehzyklus */
	      if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* Start & Zielkoord */
		P1x=xrad; P1z=zpos;
		if (inkrementell)
		    {
		      P2x=xrad+xi_wert;
		      P2z=zpos+zk_wert;
		    } else {
			     P2x=(short)(xi_wert/2)+xcorr;
			     P2z=zk_wert+zcorr;
			   }
		/* Schritt */
		step=h_wert;

		/* Anfahren */
		if (step!=0)
		 if (P1x>P2x)
		    for (Xpos=P1x;Xpos-step>P2x && !endprg;Xpos-=step)
			{
			  endprg=Ziehe_Gerade(Xpos,P1z,Xpos-step,P1z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(Xpos-step,P1z,Xpos-step,P2z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(Xpos-step,P2z,Xpos-step,P1z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		  else for (Xpos=P1x;Xpos+step<P2x && !endprg;Xpos+=step)
			 {
			   endprg=Ziehe_Gerade(Xpos,P1z,Xpos+step,P1z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			   if (!endprg)
			    endprg=Ziehe_Gerade(Xpos+step,P1z,Xpos+step,P2z,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			   if (!endprg)
			    endprg=Ziehe_Gerade(Xpos+step,P2z,Xpos+step,P1z,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			 }
		  else Xpos=P1x; /* von if step!=0 */

		/* letzter Schritt */
		if (!endprg)
		  endprg=Ziehe_Gerade(Xpos,P1z,P2x,P1z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P2x,P1z,P2x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P2x,P2z,P1x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P1x,P2z,P1x,P1z,
			 prgconfig.wait_g00,schritt_g00,checkTasten);

		if (endprg) { *ok=1; *esc=1; }
		xrad=P1x;
		zpos=P1z;
	      } break;
     /**************** G86 *******************/
     case 86: /* Austechzyklus */
	      if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* Start & Zielkoord */
		P1x=xrad; P1z=zpos;
		if (inkrementell)
		    {
		      P2x=xrad+xi_wert;
		      P2z=zpos+zk_wert;
		    } else {
			     P2x=(short)(xi_wert/2)+xcorr;
			     P2z=zk_wert+zcorr;
			   }
		/* Schritt */
		step=h_wert;
		za=abs(P1z-P2z);
		if (za<step || step<10 || step>999)
		  *ok=0;
		  else
		  {
		    /* Anfahren */
		    if (P1z>P2z)
		      for (Zpos=P1z;Zpos>P2z && !endprg;Zpos-=step)
			{
			  endprg=Ziehe_Gerade(P1x,Zpos,P2x,Zpos,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P2x,Zpos,P1x,Zpos,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,Zpos,P1x,Zpos-step,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		     else for (Zpos=P1z;Zpos<P2z && !endprg;Zpos+=step)
			{
			  endprg=Ziehe_Gerade(P1x,Zpos,P2x,Zpos,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P2x,Zpos,P1x,Zpos,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,Zpos,P1x,Zpos+step,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		    /* letzter Schritt */
		    if (!endprg)
		      endprg=Ziehe_Gerade(P1x,Zpos,P1x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		    if (!endprg)
		      endprg=Ziehe_Gerade(P1x,P2z,P2x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		    if (!endprg)
		      endprg=Ziehe_Gerade(P2x,P2z,P1x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		    if (!endprg)
		      endprg=Ziehe_Gerade(P1x,P2z,P1x,P1z,
			 prgconfig.wait_g00,schritt_g00,checkTasten);

		    if (endprg) { *ok=1; *esc=1; }
		  }

		xrad=P1x;
		zpos=P1z;
	      }break;
     /**************** G88 *******************/
     case 88: /* plandrehzyklus */
	      if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* Start & Zielkoord */
		P1x=xrad; P1z=zpos;
		if (inkrementell)
		    {
		      P2x=xrad+xi_wert;
		      P2z=zpos+zk_wert;
		    } else {
			     P2x=(short)(xi_wert/2)+xcorr;
			     P2z=zk_wert+zcorr;
			   }
		/* Schritt */
		step=h_wert;

		/* Anfahren */
		if (step!=0)
		 if (P1z>P2z)
		    for (Zpos=P1z;Zpos-step>P2z && !endprg;Zpos-=step)
			{
			  endprg=Ziehe_Gerade(P1x,Zpos,P1x,Zpos-step,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,Zpos-step,P2x,Zpos-step,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P2x,Zpos-step,P1x,Zpos-step,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		  else for (Zpos=P1z;Zpos+step<P2z && !endprg;Zpos+=step)
			{
			  endprg=Ziehe_Gerade(P1x,Zpos,P1x,Zpos+step,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P1x,Zpos+step,P2x,Zpos+step,
					 prgconfig.wait_g01,schritt_g01,checkTasten);
			  if (!endprg)
			    endprg=Ziehe_Gerade(P2x,Zpos+step,P1x,Zpos+step,
					 prgconfig.wait_g00,schritt_g00,checkTasten);
			}
		  else Zpos=P1z; /* von if step!=0 */

		/* letzter Schritt */
		if (!endprg)
		  endprg=Ziehe_Gerade(P1x,Zpos,P1x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P1x,P2z,P2x,P2z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P2x,P2z,P2x,P1z,
			 prgconfig.wait_g01,schritt_g01,checkTasten);
		if (!endprg)
		  endprg=Ziehe_Gerade(P2x,P1z,P1x,P1z,
			 prgconfig.wait_g00,schritt_g00,checkTasten);

		if (endprg) { *ok=1; *esc=1; }
		xrad=P1x;
		zpos=P1z;
	      } break;
     /**************** G90 *******************/
     case 90:{
	       /* Absoltut ein : NP = Pos des Drehmeissels */
	       inkrementell=0;
	       _settextposition(3,66);
	       _outtext("ABS");

	       /* Neuer NP setzten & akt. Koord. anpassen */
	       NeuerGrNP(xrad,zpos);
	       xrad=0;
	       zpos=0;
	     } break;
     /**************** G91 *******************/
     case 91:/* Inkrementell ein */
	     inkrementell=1;
	     break;
     /**************** G92 *******************/
     case 92:if (cncprg[ip].XI[0]!='I' && cncprg[ip].ZK[0]!='K')
	      {
		/* Absolut ein : NP = Parameter */
		inkrementell=0;
		_settextposition(3,66);
		_outtext("ABS");

		/* Neuer NP setzten & akt. Koord. anpassen */
		zw_buf1=tool; /* Werkzeug zwischenspeichern & loeschen */
		Setzte_Stahl(0,0,0);

		NeuerGrNP(xrad-(short)(xi_wert/2),zpos-zk_wert);
		xrad=(short)(xi_wert/2);
		zpos=zk_wert;

		tool=zw_buf1;
		Setzte_Stahl(xrad,zpos,tool);

	      } else { *ok=0; endprg=1; } /*von if !I & !K */
	     break;
     /**************** G94 *******************/
     case 94: break; /* zZ no Action */
     /**************** G95 *******************/
     case 95: break; /* zZ no Action */
     /**************** Error *******************/
     default:/* Unbekannter G-Befehl */
	     {
	       *ok=0;	 /* Fehlerflag */
	       endprg=1; /* Prg-Ende-Flag */
	     }
  }/* von switch m_wert */

  /* Returnwert */
  if (!*ok && endprg)
	    {
	      Status("E-Unterbrechung");
	      Meldung("G-Befehl in der aktuellen Zeile ist unbekannt oder unkorrekt!");
	    }

  return endprg;
}
예제 #23
0
파일: packet.cpp 프로젝트: kenjreno/lora3
USHORT PACKET::ReadHeader (ULONG ulMsg)
{
   int dd, yy, hr, mn, sc;
   USHORT RetVal = FALSE, i;
   CHAR mm[4];
   PKTINDEX *pktIndex;
   struct dosdate_t date;
   struct dostime_t time;

   New ();

   if ((pktIndex = (PKTINDEX *)Index.First ()) != NULL) {
      do {
         if (pktIndex->Number == ulMsg) {
            fseek (fp, pktIndex->Position, SEEK_SET);
            break;
         }
      } while ((pktIndex = (PKTINDEX *)Index.Next ()) != NULL);
   }

   memset (&msgHdr, 0, sizeof (MSGHDR));
   fread (&msgHdr, sizeof (MSGHDR), 1, fp);

   if (msgHdr.Version == 2) {
      RetVal = TRUE;

      if (pkt2Hdr.Capability != pkt2Hdr.CWValidation || !(pkt2Hdr.Capability & 0x0001)) {
         sprintf (FromAddress, "%d:%d/%d.%d", pkt2Hdr.OrigZone, msgHdr.OrigNet, msgHdr.OrigNode, 0);
         sprintf (ToAddress, "%d:%d/%d.%d", pkt2Hdr.DestZone, msgHdr.DestNet, msgHdr.DestNode, 0);
      }
      else {
         sprintf (FromAddress, "%d:%d/%d.%d", pkt2Hdr.OrigZone, msgHdr.OrigNet, msgHdr.OrigNode, pkt2Hdr.OrigPoint);
         sprintf (ToAddress, "%d:%d/%d.%d", pkt2Hdr.DestZone, msgHdr.DestNet, msgHdr.DestNode, pkt2Hdr.DestPoint);
      }

      GetLine ();
      sscanf (Line, "%2d %3s %2d  %2d:%2d:%02d", &dd, mm, &yy, &hr, &mn, &sc);

      Written.Day = (UCHAR)dd;
      for (i = 0; i < 12; i++) {
         if (!stricmp (pktMonths[i], mm)) {
            Written.Month = (UCHAR)(i + 1);
            break;
         }
      }
      if (Written.Month < 1 || Written.Month > 12)
         Written.Month = 1;
      if ((Written.Year = (USHORT)(yy + 1900)) < 1990)
         Written.Year += 100;
      Written.Hour = (UCHAR)hr;
      Written.Minute = (UCHAR)mn;
      Written.Second = (UCHAR)sc;

      _dos_getdate (&date);
      _dos_gettime (&time);

      Arrived.Day = date.day;
      Arrived.Month = date.month;
      Arrived.Year = (USHORT)date.year;
      Arrived.Hour = time.hour;
      Arrived.Minute = time.minute;
      Arrived.Second = time.second;

      GetLine ();
      strcpy (To, Line);
      GetLine ();
      strcpy (From, Line);
      GetLine ();
      strcpy (Subject, Line);
   }

   return (RetVal);
}
예제 #24
0
파일: time.c 프로젝트: DeadZen/qse
int qse_gettime (qse_ntime_t* t)
{
#if defined(_WIN32)
	SYSTEMTIME st;
	FILETIME ft;
	ULARGE_INTEGER li;

	/* 
	 * MSDN: The FILETIME structure is a 64-bit value representing the 
	 *       number of 100-nanosecond intervals since January 1, 1601 (UTC).
	 */

	GetSystemTime (&st);
	if (SystemTimeToFileTime (&st, &ft) == FALSE) return -1;

	li.LowPart = ft.dwLowDateTime;
	li.HighPart = ft.dwHighDateTime;

     /* li.QuadPart is in the 100-nanosecond intervals */
	t->sec = (li.QuadPart / (QSE_NSECS_PER_SEC / 100)) - EPOCH_DIFF_SECS;
	t->nsec = (li.QuadPart % (QSE_NSECS_PER_SEC / 100)) * 100;

	return 0;

#elif defined(__OS2__)

	APIRET rc;
	DATETIME dt;
	qse_btime_t bt;

	/* Can I use DosQuerySysInfo(QSV_TIME_LOW) and 
	 * DosQuerySysInfo(QSV_TIME_HIGH) for this instead? 
	 * Maybe, resolution too low as it returns values 
	 * in seconds. */

	rc = DosGetDateTime (&dt);
	if (rc != NO_ERROR) return -1;

	bt.year = dt.year - QSE_BTIME_YEAR_BASE;
	bt.mon = dt.month - 1;
	bt.mday = dt.day;
	bt.hour = dt.hours;
	bt.min = dt.minutes;
	bt.sec = dt.seconds;
	/*bt.msec = dt.hundredths * 10;*/
	bt.isdst = -1; /* determine dst for me */

	if (qse_timelocal (&bt, t) <= -1) return -1;
	t->nsec = QSE_MSEC_TO_NSEC(dt.hundredths * 10);
	return 0;

#elif defined(__DOS__)

	struct dostime_t dt;
	struct dosdate_t dd;
	qse_btime_t bt;

	_dos_gettime (&dt);
	_dos_getdate (&dd);

	bt.year = dd.year - QSE_BTIME_YEAR_BASE;
	bt.mon = dd.month - 1;
	bt.mday = dd.day;
	bt.hour = dt.hour;
	bt.min = dt.minute;
	bt.sec = dt.second;
	/*bt.msec = dt.hsecond * 10; */
	bt.isdst = -1; /* determine dst for me */

	if (qse_timelocal (&bt, t) <= -1) return -1;
	t->nsec = QSE_MSEC_TO_NSEC(dt.hsecond * 10);
	return 0;

#elif defined(macintosh)
	unsigned long tv;
	
	GetDateTime (&tv);
	
	t->sec = tv;
	tv->nsec = 0;
	
	return 0;

#elif defined(HAVE_GETTIMEOFDAY)
	struct timeval tv;
	int n;

	/* TODO: consider using clock_gettime() if it's avaialble.. -lrt may be needed */
	n = QSE_GETTIMEOFDAY (&tv, QSE_NULL);
	if (n == -1) return -1;

	t->sec = tv.tv_sec;
	t->nsec = QSE_USEC_TO_NSEC(tv.tv_usec);
	return 0;

#else
	t->sec = QSE_TIME (QSE_NULL);
	t->nsec = 0;

	return 0;
#endif
}