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); } }
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; }
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); }
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 ); }
void exit_handler(void) { printf("Press any key to quit.\n"); (void)Cnecin(); }
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 ); }