Beispiel #1
0
BYTE searchInit(void)
{
    commandShort[4] = FDD_CMD_SEARCH_INIT;
    commandShort[5] = 0;

    sectorCount = 1;                            // read 1 sector
    BYTE res;

    (void) Clear_home();
    (void) Cconws("Initializing... Press ESC to stop.\n\r\n\r");

    while(1) {
        res = Supexec(ce_acsiReadCommand);

        if(res == FDD_DN_LIST) {
            (void) Cconws("Downloading list of floppy images...\n\r");
        } else if(res == FDD_ERROR) {
            (void) Cconws("Failed to initialize! Press any key.\n\r");
            Cnecin();
            return 0;
        } else if(res == FDD_OK) {
            (void) Cconws("Done.\n\r");
            return 1;
        } else {
            (void) Cconws("CosmosEx device communication problem!\n\r");
        }

        WORD val = Cconis();            // see if there is some char waiting
        if(val != 0) {                  // char waiting?
            BYTE key = getKey();

            if(key == KEY_ESC) {
                (void) Cconws("Init terminated by user. Press any key.\n\r");
                Cnecin();
                return 0;
            }
        }

        sleep(1);
    }
}
Beispiel #2
0
int main(void)
{
    Clear_home();

    initBuffer();

    rBuf = readBuffer;
    wBuf = writeBuffer;

    (void) Cconws("STiNG test...\r\n");

    BYTE found = Supexec (find_STiNG);
    if(!found) {
        sleep(3);
        return 0;
    }

    getServerIp();
	WORD whichTests = 0;
	while(whichTests == 0) {
		showMenu();
		char req = Cnecin();
		if(req >= 'A' && req <= 'Z') req += 32;	// to upper case
		if(req == 'q') break;	// quit
		switch(req) {
		case 'a':	// all tests
			whichTests = 0xffff;
			break;
		case 's':
			whichTests = 0x8000;
			break;
		case '0':
		case '1':
		case '2':
		case '3':
			whichTests = 1 << (req - '0');
		}
	}

    if(whichTests & 1) doTest00();
    if(whichTests & 2) doTest01();
    if(whichTests & 4) doTest02();
    if(whichTests & 8) doTest03();
    if(whichTests & 0x8000) doSpeedTest();

    if(whichTests != 0) writeBufferToFile();
    deinitBuffer();
    
    sleep(3);
    return 0;
}
Beispiel #3
0
void AtariGemdos_PumpEvents(_THIS)
{
	int i;
	SDL_keysym keysym;

	/* Update pressed keys */
	SDL_memset(gemdos_currentkeyboard, 0, ATARIBIOS_MAXKEYS);

	while (Cconis()!=DEV_BUSY) {
		unsigned long key_pressed;
		unsigned char scancode, asciicode;

		key_pressed=Cnecin();

		asciicode = key_pressed;
		scancode = key_pressed >> 16;

		gemdos_currentkeyboard[scancode]=0xFF;
		gemdos_currentascii[scancode]=asciicode;
	}

	/* Read special keys */
	UpdateSpecialKeys(Kbshift(-1));

	/* Now generate events */
	for (i=0; i<ATARIBIOS_MAXKEYS; i++) {
		/* Key pressed ? */
		if (gemdos_currentkeyboard[i] && !gemdos_previouskeyboard[i])
			SDL_PrivateKeyboard(SDL_PRESSED,
				TranslateKey(i, gemdos_currentascii[i], &keysym, SDL_TRUE));
			
		/* Key unpressed ? */
		if (gemdos_previouskeyboard[i] && !gemdos_currentkeyboard[i])
			SDL_PrivateKeyboard(SDL_RELEASED,
				TranslateKey(i, gemdos_currentascii[i], &keysym, SDL_FALSE));
	}

	if (use_dev_mouse) {
		SDL_AtariDevMouse_PostMouseEvents(this, SDL_TRUE);
	} else {
		SDL_AtariXbios_PostMouseEvents(this, SDL_TRUE);
	}

	/* Will be previous table */
	SDL_memcpy(gemdos_previouskeyboard, gemdos_currentkeyboard, ATARIBIOS_MAXKEYS);
}
Beispiel #4
0
WORD main( WORD argc, BYTE *argv[] )
{
	/* Hauptroutine */
	struct time	zeit1, zeit2;
	ERROR_STR	*error_str, *temp_error_str;
	REG ULONG	i, j;
	ULONG		sec1, sec2;
	WORD		state;

	/* Meldung ausgeben */
	puts( INFO );

	/* Zeit merken */
	gettime( &zeit1 );

	/* Zeit in Sekunden umwandeln */
	sec1 = ( zeit1.ti_hour * 3600L ) + ( zeit1.ti_min * 60L ) + zeit1.ti_sec;

	/* Den Dateinamen merken */
	file_name = argv[1];

	/* Hauptroutine aufrufen */
	state = do_all( argv[1] );

	/* Traten Shift-/Reduce-Fehler auf ? */
	if( sr_err || rr_err )
		/* Es traten Shift-Reduce-Fehler auf */
		fprintf( stderr, "\n\n%d Shift-/Reduce-Fehler, %d Reduce-/Reduce-Fehler registriert.", sr_err, rr_err );
	
	/* Ausgabe der Fehler in Datei ? */
	if( lr_info.err_dest == DFILE )
	{
		/* Sind Fehler aufgetreten ? */
		if( error_flag )
			/* Meldung ausgeben */
			fprintf( stderr, "\n\nEs sind Fehler aufgetreten !" );

		else
			/* Meldung ausgeben */
			fprintf( stderr, "\n\nEs sind keine Fehler aufgetreten !" );
	}

	/* Speicher freigeben */
	if( grammar )
		/* Speicher der Grammatikdatei freigeben */
		free( ( VOID * ) grammar );

	if( error_struct )
	{
		/* Speicher der ERROR-Strukturen freigeben */
		for( i = 0; i < error_struct_count; i++ )
		{
			/* Zeiger auf ERROR_STR holen */
			error_str = error_struct[i];

			/* Muss noch Speciher freigegeben werden ? */
			while( error_str )
			{
				/* Folge-Struktur merken */
				temp_error_str = error_str->error_str;

				/* Speicher des Fehlermeldung-Textes freigeben */
				free( ( VOID * ) error_str->err_msg );

				/* Speicher der aktuellen ERROR_STR freigeben */
				free( ( VOID * ) error_str );

				/* Pointer umkopieren */
				error_str = temp_error_str;
			}
		}
	}

	if( hulle_str )
	{
		/* Speicher s�mtlicher H�llen freigeben */
		for( i = 0; i <= hulle_count; i++ )
		{
			/* Das Lookahead-Array aller Items freigeben */
			for( j = 0; j < hulle_str[i]->anz_items; j++ )
				/* Speicher freigeben */
				free( ( VOID * ) hulle_str[i]->item_str[j].lookahead.term_arr );

			/* Speicher der ITEM_STR freigeben */
			free( ( VOID * ) hulle_str[i]->item_str );
		}
	}

	if( lr_tab )
	{
		/* Speicher der LR-Tabelle freigeben */
		for( i = 0; i <= hulle_count; i++ )
			free( ( VOID * ) lr_tab[i] );

		/* Den Speicher des Arrays freigeben */
		free( ( VOID * ) lr_tab );
	}

	if( jump_tab )
		/* Speicher der Zustandsueberg�nge freigeben */
		free( ( VOID * ) jump_tab );

	if( ziel_tab )
		/* Speicher der Ziel-Tabelle freigeben */
		free( ( VOID * ) ziel_tab );

	if( nterm_str )
	{
		/* Speicher s�mtlicher NTERM_STRs zurueckgeben */
		for( i = 1; i <= nterm_count; i++ )
		{
			/* Die FOLLOW-Elemente freigeben */
			free( ( VOID * ) nterm_str[i]->follow.term_arr );

			/* Die NTERM_STR-Struktur freigeben */
			free( ( VOID * ) nterm_str[i] );
		}

		/* Den Speicher des Arrays freigeben */
		free( ( VOID * ) nterm_str );
	}

	if( term_str )
		/* Speicher der Terminale freigeben */
		free( ( VOID * ) term_str );

	if( prod_index_arr )
		/* Speicher der Indexe der Produktionen freigeben */
		free( ( VOID * ) prod_index_arr );

	if( gra_err_str )
		/* Speicher freigeben */
		free( ( VOID * ) gra_err_str );

	if( nterm_first )
	{
		/* Speicher der FIRST-Elemente freigeben */
		for( i = 0; i < nterm_first_count; i++ )
		{
			/* Speicher der FIRST-Terminale freigeben */
			free( ( VOID * ) nterm_first[i]->first.term_arr );
			free( ( VOID * ) nterm_first[i] );
		}

		/* Den Speicher des Arrays freigeben */
		free( ( VOID * ) nterm_first );
	}

	if( old_nterm_index )
		/* Speicher freigeben */
		free( ( VOID * ) old_nterm_index );

	if( init )
		/* Speicher freigeben */
		free( ( VOID * ) init );

	if( incl )
		/* Speicher freigeben */
		free( ( VOID * ) incl );

	if( error_hulle )
		/* Speicher freigeben */
		free( ( VOID * ) error_hulle );

	if( type_arr )
	{
		/* Alle Eintr�ge freigeben */
		for( i = 0; i < type_arr_count; i++ )
			/* Speicher freigeben */
			free( ( VOID * ) type_arr[i] );

		/* Speicher des Arrays freigeben */
		free( ( VOID * ) type_arr );
	}

	if( sem_act )
	{
		/* Alle Eintr�ge freigeben */
		for( i = 0; i < sem_act_count; i++ )
			/* Speicher freigeben */
			free( ( VOID * ) sem_act[i].sem_act_text );

		/* Speicher des Arrays freigeben */
		free( ( VOID * ) sem_act );
	}

	if( hash_tab )
	{
		/* Speicher der HASH-Tabelle freigeben */
		for( i = 0; i < lr_info.hash_tab_size; i++ )
		{
			/* Ist etwas eingetragen ? */
			if( hash_tab[i].name )
			{
				/* Ja, Speicher freigeben */
				free( ( VOID * ) hash_tab[i].name );
				free( ( VOID * ) hash_tab[i].term_str );
				free( ( VOID * ) hash_tab[i].hulle_arr );
			}

			/* Speicher der eigentlichen HASH-Tabelle freigeben */
			free( ( VOID * ) hash_tab );
		}
	}

	/* Datei schliessen */
	if( handle != -1 )
	{
		/* Datei schliessen */
		if( close( handle ) < 0 )
			/* Fehler */
			return( error( CANNOT_CLOSE_GRAMMAR_FILE, 0, 0 ) );
	}

	/* Parser-Source-Datei schliessen ? */
	if( parser_file )
	{
		/* Datei schliessen */
		if( fclose( parser_file ) == EOF )
			/* Fehler */
			return( error( CANNOT_CLOSE_PARSER_FILE, 0, 0 ) );
	}

	/* BNF-Grammatik-Datei schliessen ? */
	if( bnf_file )
	{
		/* Datei schliessen */
		if( fclose( bnf_file ) == EOF )
			/* Fehler */
			return( error( CANNOT_CLOSE_BNF_FILE, 0, 0 ) );
	}

	/* Ist ein Fehler aufgetreten ? */
	if( state < 0 )
		/* Fehler */
		return( -1 );

	/* Zeit holen */
	gettime( &zeit2 );

	/* Zeit in Sekunden umwandeln */
	sec2 = ( zeit2.ti_hour * 3600L ) + ( zeit2.ti_min * 60L ) + zeit2.ti_sec;

	/* Zeit merken */
	fprintf( file, "\n\nBen�tigte Zeit: %02lu:%02lu:%02lu", ( sec2 - sec1 ) / 3600L, ( ( sec2 - sec1 ) % 3600L ) / 60L, ( ( sec2 - sec1 ) % 3600L ) % 60L );

	/* Ausgabe auf Bildschirm ? */
	if( lr_info.dest == DSCREEN )
		/* Auf Tastendruck warten */
		Cnecin();

	/* Datei schliessen */
	if( fclose( file ) < 0 )
		/* Fehler */
		return( error( CANNOT_CLOSE_FILE, 0, 0 ) );

	/* Fehler-Datei schliessen */
	if( fclose( err_file ) < 0 )
		/* Fehler */
		return( error( CANNOT_CLOSE_ERR_FILE, 0, 0 ) );

	/* Alles OK */
	return( 0 );
}
Beispiel #5
0
void exit_handler(void)
{
	printf("Press any key to quit.\n");
	(void)Cnecin();
}
Beispiel #6
0
WORD show_hulle( LONG hulle_index )
{
	/* In dieser Routine wird eine H�lle ausgebenen. */
	REG ULONG	i, j;
	ITEM_STR	*item;
	NTERM_STR	*nterm;
	LONG		index;
	BYTE		temp[256];

	/* Alle Items der H�lle ausgeben */
	for( i = 0; i < hulle_str[hulle_index]->anz_items; i++ )
	{
		/* Zeiger auf Item holen */
		item = &hulle_str[hulle_index]->item_str[i];

		/* Zeiger auf NTERM_STR holen */
		nterm = nterm_str[item->nterm_index];

		/* Ist das Item ein Kern ? */
		if( i < hulle_str[hulle_index]->anz_kitems )
			/* Ja */
			fprintf( file, "\nKern:\t" );

		else
			/* Nein */
			fprintf( file, "\n\t\t" );

		/* Ist es ein Reduce-Item ? */
		if( item->pkt_pos < nterm->anz_ri )
		{
			/*
				Nun den Zustand ausgeben, den der Parser erreicht, wenn er das
				Element nach dem Punkt auf der rechten Seite geschoben hat.
			*/
			/* Ist es ein Terminal ? */
			if( hash_tab[nterm->ri[item->pkt_pos]].term_str )
			{
				/* Ja, ist ein Terminal */

				/* Index des Terminals holen */
				if( ( index = get_term_index( nterm->ri[item->pkt_pos] ) ) < 0 )
					/* Fehler */
					return( -1 );

				/* Aufgrund Shift-/Reduce-Error reduzieren ? */
				if( lr_tab[hulle_index][index].state == REDUCE )
					/* Ja */
					fprintf( file, "\t\t" );

				else
					/* Zustand ausgeben */
					fprintf( file, "%3ld:\t", lr_tab[hulle_index][index].value );
			}

			else
				/* Zustand ausgeben */
				fprintf( file, "%3ld:\t", jump_tab[hulle_index][nterm_str[hash_tab[nterm->ri[item->pkt_pos]].nterm_index]->prod_index - 1] );
		}

		else
			/* Ist ein Reduce-Item */
			fprintf( file, "\t\t" );

		/* Hat die Produktion Alternativen ? */
		if( !( nterm->alt ) && ( ( ( item->nterm_index + 1 ) < nterm_count ) && ( !( nterm_str[item->nterm_index + 1]->alt ) ) ) )
			/* Nein, Produktion ausgeben */
			fprintf( file, "%s\t->\t", hash_tab[nterm->hash_tab_index].name );

		else
		{
			/* Ja */
			sprintf( temp, "%s_%lu", hash_tab[nterm->hash_tab_index].name, item->nterm_index - ( item->nterm_index - nterm->alt ) );
			fprintf( file, "%s\t->\t", temp );
		}

		for( j = 0; j < nterm->anz_ri; j++ )
		{
			/* Punkt ausgeben ? */
			if( item->pkt_pos == j )
				/* Punkt ausgeben */
				fprintf( file, "." );

			/* Ist es ein Terminal ? */
			if( hash_tab[nterm->ri[j]].term_str )
				/* Ja, ist ein Terminal */
				fprintf( file, " \'%s\'", hash_tab[nterm->ri[j]].name );

			else
				/* Ist ein Nichtterminal */
				fprintf( file, " %s", hash_tab[nterm->ri[j]].name );
		}

		/* Punkt ausgeben ? */
		if( item->pkt_pos == j )
			/* Punkt ausgeben */
			fprintf( file, "." );

		/* Terminal ausgeben ? */
		if( item->term.anz_elem )
		{
			/* Ja */
			for( j = 0; j < item->term.anz_elem; j++ )
				/* Terminal ausgeben */
				fprintf( file, ", %s", hash_tab[item->term.term_arr[j]].name );
		}
	}

	/* Ausgabe auf Bildschirm ? */
	if( lr_info.dest == DSCREEN )
		/* Auf Tastendruck warten */
		Cnecin();

	/* Alles OK */
	return( 0 );
}