void main( void ) { int handle; unsigned date, time; if( _dos_open( "file", O_RDWR, &handle ) != 0 ) { printf( "Unable to open file\n" ); } else { printf( "Open succeeded\n" ); _dos_getftime( handle, &date, &time ); printf( "The file was last modified on %d/%d/%d", MONTH(date), DAY(date), YEAR(date) ); printf( " at %.2d:%.2d:%.2d\n", HOUR(time), MINUTE(time), SECOND(time) ); /* set the time to 12 noon */ time = (12 << 11) + (0 << 5) + 0; _dos_setftime( handle, date, time ); _dos_getftime( handle, &date, &time ); printf( "The file was last modified on %d/%d/%d", MONTH(date), DAY(date), YEAR(date) ); printf( " at %.2d:%.2d:%.2d\n", HOUR(time), MINUTE(time), SECOND(time) ); _dos_close( handle ); } }
/* * calculate the next dump time. * minimum delay is 100 minutes. */ Timet nextdump(Timet t) { Timet nddate = nextime(t+MINUTE(100), DUMPTIME, WEEKMASK); if(!conf.nodump) print("next dump at %T\n", nddate); return nddate; }
/* * process to copy dump blocks from * cache to worm. it runs flat out when * it gets work, but only looks for * work every 10 seconds. */ void wormcopy(void *) { int f, dorecalc = 1; Timet dt, t = 0, nddate = 0, ntoytime = 0; Filsys *fs; for (;;) { if (dorecalc) { dorecalc = 0; t = time(nil); nddate = nextdump(t); /* chatters */ ntoytime = time(nil); } dt = time(nil) - t; if(dt < 0 || dt > MINUTE(100)) { if(dt < 0) print("time went back\n"); else print("time jumped ahead\n"); dorecalc = 1; continue; } t += dt; f = 0; if(t > ntoytime) ntoytime = time(nil) + HOUR(1); else if(t > nddate) { if(!conf.nodump) { print("automatic dump %T\n", t); for(fs=filsys; fs->name; fs++) if(fs->dev->type == Devcw) cfsdump(fs); } dorecalc = 1; } else { rlock(&mainlock); for(fs=filsys; fs->name; fs++) if(fs->dev->type == Devcw) f |= dumpblock(fs->dev); runlock(&mainlock); if(!f) delay(10000); wormprobe(); } } }
// выводит в поле Label1 информацию о текущем треке void __fastcall TForm1::TrackInfo() { int ms; // время звучания трека, мсек AnsiString st; Track = MCI_TMSF_TRACK(MediaPlayer->Position); MediaPlayer->TimeFormat = tfMilliseconds; ms = MediaPlayer->TrackLength[Track]; MediaPlayer->TimeFormat = tfTMSF; st = IntToStr(SECOND(ms)); if ( st.Length() == 1) st = "0" + st; st = "Трек "+ IntToStr(Track) + ". Длительность "+ IntToStr(MINUTE(ms)) + ":" + st; Label1->Caption = st; }
/* 显示item 9个字节的头 uint32_t id; 单增序号 MYTIME datetime; 收到的时间 uint8_t len; 长度 第11字节是flag, 数据从第12字节开始,汉字 12x12 每行10个 ASC 0612 每行 20个 */ static void display_item( ) { char buf1[32], buf2[32]; uint8_t len; if( item_pos >= textmsg_count ) { rt_kprintf("\n%d>item_pos >= textmsg_count"); return; /*item_pos=0可以环回*/ } /*item_pos 范围[0..textmsg_count-1]*/ if( item_pos_read != item_pos ) /*有变化,要读*/ { jt808_textmsg_get( item_pos, &textmsg ); item_pos_read = item_pos; } lcd_fill( 0 ); sprintf( buf1, "[%02d] %02d/%02d/%02d %02d:%02d", item_pos + 1, YEAR( textmsg.datetime ), MONTH( textmsg.datetime ), DAY( textmsg.datetime ), HOUR( textmsg.datetime ), MINUTE( textmsg.datetime ) ); split_lines_count = 0; analy_textmsg( ); //len = my_strncpy( buf2, (char*)( textmsg.body ), 20 ); /*获取第一行*/ len = my_strncpy( buf2, (char*)( textmsg.body + split_lines[0] ), 20 ); /*获取第一行*/ if( len ) { lcd_text12( 0, 4, buf1, strlen( buf1 ), LCD_MODE_SET ); lcd_text12( 0, 16, buf2, len, LCD_MODE_SET ); } lcd_update_all( ); }
char *TimeFormat(dword DateTime, byte Sec, eTimeStampFormat TimeStampFormat) { static char sTimeStamp [25]; //Log adds a SPACE to sTimeStamp. Do not make it too small! word Mjd, Year; byte Month, Day, WeekDay, Hour, Min; Mjd = MJD (DateTime); Hour = HOUR (DateTime); Min = MINUTE (DateTime); TAP_ExtractMjd (Mjd, &Year, &Month, &Day, &WeekDay); switch (TimeStampFormat) { case TIMESTAMP_HM : TAP_SPrint (sTimeStamp, "%02d:%02d", Hour, Min); break; case TIMESTAMP_HMS : TAP_SPrint (sTimeStamp, "%02d:%02d:%02d", Hour, Min, Sec); break; case TIMESTAMP_YMD : TAP_SPrint (sTimeStamp, "%02d-%02d-%02d", Year, Month, Day); break; case TIMESTAMP_YMDHM : TAP_SPrint (sTimeStamp, "%04d-%02d-%02d %02d:%02d", Year, Month, Day, Hour, Min); break; case TIMESTAMP_YMDHMS : TAP_SPrint (sTimeStamp, "%04d-%02d-%02d %02d:%02d:%02d", Year, Month, Day, Hour, Min, Sec); break; case TIMESTAMP_FNYMDHM: TAP_SPrint (sTimeStamp, "%04d%02d%02d_%02d%02d", Year, Month, Day, Hour, Min); break; default : sTimeStamp [0] = '\0'; } return sTimeStamp; }
char *TimeFormat(dword DateTime, byte Sec, eTimeStampFormat TimeStampFormat, char *Result) { TRACEENTER(); word Mjd, Year; byte Month, Day, WeekDay, Hour, Min; if(Result) { Mjd = MJD (DateTime); Hour = HOUR (DateTime); Min = MINUTE (DateTime); TAP_ExtractMjd(Mjd, &Year, &Month, &Day, &WeekDay); if(Mjd == 0) { Year = 0; Month = 0; Day = 0; WeekDay = 0; } switch(TimeStampFormat) { case TIMESTAMP_HM : TAP_SPrint(Result, "%02d:%02d", Hour, Min); break; case TIMESTAMP_HMS : TAP_SPrint(Result, "%02d:%02d:%02d", Hour, Min, Sec); break; case TIMESTAMP_YMD : TAP_SPrint(Result, "%02d-%02d-%02d", Year, Month, Day); break; case TIMESTAMP_YMDHM : TAP_SPrint(Result, "%04d-%02d-%02d %02d:%02d", Year, Month, Day, Hour, Min); break; case TIMESTAMP_YMDHMS : TAP_SPrint(Result, "%04d-%02d-%02d %02d:%02d:%02d", Year, Month, Day, Hour, Min, Sec); break; case TIMESTAMP_FNYMDHM: TAP_SPrint(Result, "%04d%02d%02d_%02d%02d", Year, Month, Day, Hour, Min); break; default : Result[0] = '\0'; break; } } TRACEEXIT(); return Result; }
static void display( void ) { uint16_t pic_page_start; /*每四个图片记录为一个page*/ uint8_t buf[32], buf_time[16]; uint16_t i; MYTIME t; TypeDF_PackageHead * pcurrhead; lcd_fill( 0 ); switch( scr_mode ) { case SCR_PHOTO_MENU: pos &= 0x01; lcd_text12( 5, 4, "1.图片记录", 10, 3 - pos * 2 ); lcd_text12( 5, 18, "2.拍照上传", 10, pos * 2 + 1 ); break; case SCR_PHOTO_SELECT_ITEM: if( pic_count ) /*有图片*/ { if( pos >= pic_count ) { pos = 0; } if( pos < 0 ) { pos = pic_count - 1; } pic_page_start = pos & 0xFFFC; /*每4个1组*/ for( i = pic_page_start; i < pic_page_start + 4; i++ ) { if( i >= pic_count ) { break; } pcurrhead = (TypeDF_PackageHead*)( pHead + i * sizeof( TypeDF_PackageHead ) ); t = pcurrhead->Time; sprintf( buf, "%02d>%02d-%02d-%02d %02d:%02d:%02d", i+1, YEAR( t ), MONTH( t ), DAY( t ), HOUR( t ), MINUTE( t ), SEC( t )); if( i == pos ) { lcd_asc0608( 0, 8 * ( i & 0x03 ), buf, LCD_MODE_INVERT ); } else { lcd_asc0608( 0, 8 * ( i & 0x03 ), buf, LCD_MODE_SET ); } } }else /*没有图片*/ { lcd_text12( 25, 12, "没有图片记录", 12, LCD_MODE_SET ); } break; case SCR_PHOTO_SELECT_DETAILED:/*显示图片详细信息*/ pcurrhead = (TypeDF_PackageHead*)( pHead + pos * sizeof( TypeDF_PackageHead ) ); t = pcurrhead->Time; sprintf( buf, "%02d-%02d-%02d %02d:%02d:%02d", YEAR( t ), MONTH( t ), DAY( t ), HOUR( t ), MINUTE( t ), SEC( t )); lcd_asc0608( 0, 0, buf, LCD_MODE_SET ); sprintf(buf,"chn=%d trig=%d del=%d",pcurrhead->Channel_ID,pcurrhead->TiggerStyle,pcurrhead->State); lcd_asc0608( 0, 8, buf, LCD_MODE_SET ); sprintf(buf,"size=%d",pcurrhead->Len-64); lcd_asc0608( 0, 16, buf, LCD_MODE_SET ); lcd_asc0608(70,24,"usb",LCD_MODE_SET); lcd_asc0608(104,24,"rep",LCD_MODE_SET); break; case SCR_PHOTO_TAKE: lcd_text12( 20, 12, "拍照上传中...", 12, LCD_MODE_SET ); break; } lcd_update_all( ); }
// сигнал от таймера: вывести номер трека // и время воспроизведения void __fastcall TForm1::TimerTimer(TObject *Sender) { int trk; // трек int min, sec; // время AnsiString st; if ( MediaPlayer->Mode == mpPlaying ) // режим воспроизведения { // получить номер воспроизводимого трека и trk = MCI_TMSF_TRACK(MediaPlayer->Position); if ( trk != Track ) // произошла смена трека { TrackInfo(); Track = trk; if ( Track > 1 ) SpeedButton1->Enabled = true; // доступна кнопка "пред.трек" if ( Track == MediaPlayer->Tracks) SpeedButton3->Enabled = false; // кнопка "след.трек" недоступна } // вывод информации о воспроизводимом треке min = MCI_TMSF_MINUTE(MediaPlayer->Position); sec = MCI_TMSF_SECOND(MediaPlayer->Position); st.printf("%d:%.2d",min,sec); Label2->Caption = st; return; } // Если дисковод открыт или в нем нет // AudioCD, то Mode == mpOpen. // Ждем диск, т.е. до тех пор пока не будет Mode == mpStopped + кол-во треков > 1 if ( (MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks > 1) ) { // диск вставлен Timer->Enabled = false; SpeedButton2->Enabled = true;; SpeedButton2->Tag = 0; SpeedButton3->Enabled = true; MediaPlayer->Notify = true; // получить информацию о времени звучания CD MediaPlayer->TimeFormat = tfMilliseconds; int ms = MediaPlayer->Length; AnsiString st = "Audio CD. Время звучания: "; st = st + IntToStr(MINUTE(ms)); st = st + ":" + IntToStr(SECOND(ms)); Label1->Caption = st; MediaPlayer->TimeFormat = tfTMSF; Label1->Visible = true; Track = 0; return; } // дисковод открыт или в дисководе не Audio CD if (( MediaPlayer->Mode == mpOpen )|| (MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks == 1)) { Label1->Caption = "Вставьте Audio CD"; if ( Label1->Visible ) Label1->Visible = false; else Label1->Visible = true; } }