static void fb_switch_signal_acq(void *data) { struct vt_stat st; struct rect r; int rs; EINTRLOOP(rs, ioctl(TTY,VT_GETSTATE,&st)); if (rs) return; if (st.v_active != fb_console) return; INC_IN_GR fb_active=1; EINTRLOOP(rs, ioctl(TTY,VT_RELDISP,VT_ACKACQ)); /* * There is a race condition in Linux NVidia framebuffer driver * It still draws into a framebuffer here, so we have to sleep */ portable_sleep(10); if (have_cmap && current_virtual_device) set_palette(&global_pal); END_GR r.x1=0; r.y1=0; r.x2=fb_xsize; r.y2=fb_ysize; if (border_left | border_top | border_right | border_bottom) fb_clear_videoram(); if (current_virtual_device) current_virtual_device->redraw_handler(current_virtual_device,&r); }
uint64_t calc_nxt64bits(const char *NXTaddr) { int32_t c; int64_t n,i,polarity = 1; uint64_t lastval,mult,nxt64bits = 0; if ( NXTaddr == 0 ) { printf("calling calc_nxt64bits with null ptr!\n"); return(0); } n = strlen(NXTaddr); if ( n >= 22 ) { printf("calc_nxt64bits: illegal NXTaddr.(%s) too long\n",NXTaddr); return(0); } else if ( strcmp(NXTaddr,"0") == 0 || strcmp(NXTaddr,"false") == 0 ) { // printf("zero address?\n"); getchar(); return(0); } if ( NXTaddr[0] == '-' ) polarity = -1, NXTaddr++, n--; mult = 1; lastval = 0; for (i=n-1; i>=0; i--,mult*=10) { c = NXTaddr[i]; if ( c < '0' || c > '9' ) { printf("calc_nxt64bits: illegal char.(%c %d) in (%s).%d\n",c,c,NXTaddr,(int32_t)i); #ifdef __APPLE__ while ( 1 ) { portable_sleep(60); printf("calc_nxt64bits: illegal char.(%c %d) in (%s).%d\n",c,c,NXTaddr,(int32_t)i); } #endif return(0); } nxt64bits += mult * (c - '0'); if ( nxt64bits < lastval ) printf("calc_nxt64bits: warning: 64bit overflow %llx < %llx\n",(long long)nxt64bits,(long long)lastval); lastval = nxt64bits; } if ( cmp_nxt64bits(NXTaddr,nxt64bits) != 0 ) printf("error calculating nxt64bits: %s -> %llx -> %s\n",NXTaddr,(long long)nxt64bits,nxt64str(nxt64bits)); if ( polarity < 0 ) return(-(int64_t)nxt64bits); return(nxt64bits); }
void *memalloc(struct alloc_space *mem,long size,int32_t clearflag) { void *ptr = 0; if ( (mem->used + size) > mem->size ) { printf("alloc: (mem->used %ld + %ld size) %ld > %ld mem->size\n",mem->used,size,(mem->used + size),mem->size); while ( 1 ) portable_sleep(1); } ptr = (void *)((long)mem->ptr + mem->used); mem->used += size; if ( clearflag != 0 ) memset(ptr,0,size); if ( mem->alignflag != 0 && (mem->used & 0xf) != 0 ) mem->used += 0x10 - (mem->used & 0xf); return(ptr); }
char *bitcoind_RPC(char **retstrp,char *debugstr,char *url,char *userpass,char *command,char *params) { static int count,count2; static double elapsedsum,elapsedsum2; char *bracket0,*bracket1,*databuf = 0; struct curl_slist *headers = NULL; struct return_string s; CURLcode res; CURL *curl_handle; long len; int32_t specialcase,numretries; double starttime; numretries = 0; if ( debugstr != 0 && strcmp(debugstr,"BTCD") == 0 && command != 0 && strcmp(command,"SuperNET") == 0 ) specialcase = 1; else specialcase = 0; if ( url[0] == 0 ) strcpy(url,"http://127.0.0.1:7876/nxt"); if ( specialcase != 0 && 0 ) fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC: debug.(%s) url.(%s) command.(%s) params.(%s)\n",debugstr,url,command,params); try_again: if ( retstrp != 0 ) *retstrp = 0; starttime = milliseconds(); curl_handle = curl_easy_init(); init_string(&s); headers = curl_slist_append(0,"Expect:"); curl_easy_setopt(curl_handle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); curl_easy_setopt(curl_handle,CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl_handle,CURLOPT_URL, url); curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION, accumulate); // send all data to this function curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA, &s); // we pass our 's' struct to the callback curl_easy_setopt(curl_handle,CURLOPT_NOSIGNAL, 1L); // supposed to fix "Alarm clock" and long jump crash curl_easy_setopt(curl_handle,CURLOPT_NOPROGRESS, 1L); // no progress callback if ( strncmp(url,"https",5) == 0 ) { curl_easy_setopt(curl_handle,CURLOPT_SSL_VERIFYPEER,0); curl_easy_setopt(curl_handle,CURLOPT_SSL_VERIFYHOST,0); } if ( userpass != 0 ) curl_easy_setopt(curl_handle,CURLOPT_USERPWD, userpass); databuf = 0; if ( params != 0 ) { if ( command != 0 && specialcase == 0 ) { len = strlen(params); if ( len > 0 && params[0] == '[' && params[len-1] == ']' ) { bracket0 = bracket1 = (char *)""; } else { bracket0 = (char *)"["; bracket1 = (char *)"]"; } databuf = (char *)malloc(256 + strlen(command) + strlen(params)); sprintf(databuf,"{\"id\":\"jl777\",\"method\":\"%s\",\"params\":%s%s%s}",command,bracket0,params,bracket1); //fprintf(stderr,"url.(%s) userpass.(%s) databuf.(%s)\n",url,userpass,databuf); // } //else if ( specialcase != 0 ) fprintf(stderr,"databuf.(%s)\n",params); curl_easy_setopt(curl_handle,CURLOPT_POST,1L); if ( databuf != 0 ) curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,databuf); else curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,params); } //laststart = milliseconds(); res = curl_easy_perform(curl_handle); curl_slist_free_all(headers); curl_easy_cleanup(curl_handle); if ( databuf != 0 ) // clean up temporary buffer { free(databuf); databuf = 0; } if ( res != CURLE_OK ) { numretries++; if ( specialcase != 0 ) { fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC.(%s): BTCD.%s timeout params.(%s) s.ptr.(%s) err.%d\n",url,command,params,s.ptr,res); free(s.ptr); return(0); } else if ( numretries >= 2 ) { fprintf(stderr,"Maximum number of retries exceeded!\n"); free(s.ptr); return(0); } fprintf(stderr, "curl_easy_perform() failed: %s %s.(%s %s), retries: %d\n",curl_easy_strerror(res),debugstr,url,command,numretries); free(s.ptr); portable_sleep((1<<numretries)); goto try_again; } else { if ( command != 0 && specialcase == 0 ) { count++; elapsedsum += (milliseconds() - starttime); if ( (count % 10000) == 0) fprintf(stderr,"%d: ave %9.6f | elapsed %.3f millis | bitcoind_RPC.(%s) url.(%s)\n",count,elapsedsum/count,(milliseconds() - starttime),command,url); if ( retstrp != 0 ) { *retstrp = s.ptr; return(s.ptr); } return(post_process_bitcoind_RPC(debugstr,command,s.ptr,params)); } else { if ( 0 && specialcase != 0 ) fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC: BTCD.(%s) -> (%s)\n",params,s.ptr); count2++; elapsedsum2 += (milliseconds() - starttime); if ( (count2 % 10000) == 0) fprintf(stderr,"%d: ave %9.6f | elapsed %.3f millis | NXT calls.(%s) cmd.(%s)\n",count2,elapsedsum2/count2,(double)(milliseconds() - starttime),url,command); return(s.ptr); } } fprintf(stderr,"bitcoind_RPC: impossible case\n"); free(s.ptr); return(0); }