static short *matchname(short *s, short *str, int *len, int nolt) { short *p = s; if (!p) return 0; while (*p) { if (p[0] == str[0]) if (p == s || !issymchar(p[ - 1])) { int xlen = *len; if (!tcmp(p, str, &xlen)) if (!issymchar(p[xlen])) if (!nolt) { *len = xlen; return p; } else { char *t = p + *len; while (isspace(*t)) t++; if (*t == '<') return 0; *len = xlen; return p; } } p++; } return 0; }
static void enqueue(qelt *qp) { qelt *tqp; qelt *priorp; #ifdef PCP_DEBUG if (pmDebug & DBG_TRACE_AF) { struct timeval now; __pmtimevalNow(&now); __pmPrintStamp(stderr, &now); fprintf(stderr, " AFenqueue " PRINTF_P_PFX "%p(%d, " PRINTF_P_PFX "%p) for ", qp->q_func, qp->q_afid, qp->q_data); __pmPrintStamp(stderr, &qp->q_when); fputc('\n', stderr); } #endif for (tqp = root, priorp = NULL; tqp != NULL && tcmp(&qp->q_when, &tqp->q_when) >= 0; tqp = tqp->q_next) priorp = tqp; if (priorp == NULL) { qp->q_next = root; root = qp; } else { qp->q_next = priorp->q_next; priorp->q_next = qp; } }
static void set_prog_sel(void) { int t1=selstart.tv_sec*(1000000/progdiv)+selstart.tv_usec/progdiv; int t2=selend.tv_sec*(1000000/progdiv)+selend.tv_usec/progdiv; SendMessage(wndProg, TBM_SETSEL, 1, (LPARAM)MAKELONG(t1,t2)); SendMessage(wndTB, TB_ENABLEBUTTON, BUT_EXPORT, tcmp(selstart, selend)<0); }
/* Number of users comparison. */ static int ucmp(const void *a1, const void *a2) { if (ISDOWN(HS(a1))) if (ISDOWN(HS(a2))) return (tcmp(a1, a2)); else return (rflg); else if (ISDOWN(HS(a2))) return (-rflg); else return (rflg * (HS(a2)->hs_nusers - HS(a1)->hs_nusers)); }
/* Load average comparison. */ static int lcmp(const void *a1, const void *a2) { if (ISDOWN(HS(a1))) if (ISDOWN(HS(a2))) return (tcmp(a1, a2)); else return (rflg); else if (ISDOWN(HS(a2))) return (-rflg); else return (rflg * (HS(a2)->hs_wd.wd_loadav[0] - HS(a1)->hs_wd.wd_loadav[0])); }
static void adjust_pos(int d) { int oldstate=play_state; if (play_state==-1) return; replay_pause(); tr.tv_sec+=d; if (tr.tv_sec<0) tr.tv_sec=tr.tv_usec=0; if (tcmp(tr, tmax)==1) tr=tmax; replay_seek(); play_state=oldstate; redraw_term(); set_prog(); do_replay(); }
static int replay_play(struct timeval *delay) { // structures touched: tev, vt struct timeval tr1; ttyrec_frame fn; switch (play_state) { case 0: default: case 1: return 0; case 2: gettimeofday(&tr, 0); tsub(tr, t0); tmul1000(tr, speed); tr1=tr; tadd(tr1, tdate); if (tev_cur && tev_cur->len>tev_curlp) { tty_write(vt, tev_cur->data+tev_curlp, tev_cur->len-tev_curlp); tev_curlp=tev_cur->len; } while ((fn=ttyrec_next_frame(ttr, tev_cur)) && tcmp(fn->t, tr1)==-1) { tev_cur=fn; if (tev_cur->data) tty_write(vt, tev_cur->data, tev_cur->len); tev_curlp=tev_cur->len; } if ((fn=ttyrec_next_frame(ttr, tev_cur))) { *delay=fn->t; tsub(*delay, tdate); tsub(*delay, tr); tdiv1000(*delay, speed); return 1; } play_state=tev_done?0:3; case 3: return 0; } }
static int tcmp(const struct json_token *tok, const char *str) { struct mg_str s = {.p = tok->ptr, .len = tok->len}; return mg_vcmp(&s, str); } enum mgos_upd_file_action mgos_upd_file_begin( struct mgos_upd_hal_ctx *ctx, const struct mgos_upd_file_info *fi) { struct mg_str part_name = MG_MK_STR(""); enum mgos_upd_file_action ret = MGOS_UPDATER_SKIP_FILE; struct find_part_info find_part_info = {fi->name, &part_name, &ctx->cur_part}; ctx->cur_part.len = part_name.len = 0; json_walk(ctx->parts->ptr, ctx->parts->len, find_part, &find_part_info); if (ctx->cur_part.len == 0) return ret; /* Drop any indexes from part name, we'll add our own. */ while (1) { char c = part_name.p[part_name.len - 1]; if (c != '.' && !(c >= '0' && c <= '9')) break; part_name.len--; } struct json_token type = JSON_INVALID_TOKEN; const char *fname = NULL; uint32_t falloc = 0; json_scanf(ctx->cur_part.ptr, ctx->cur_part.len, "{load_addr:%u, falloc:%u, type: %T}", &ctx->app_load_addr, &falloc, &type); if (falloc == 0) falloc = fi->size; if (tcmp(&type, "app") == 0) { struct boot_cfg cur_cfg; int r = read_boot_cfg(ctx->cur_boot_cfg_idx, &cur_cfg); if (r < 0) { ctx->status_msg = "Could not read current boot cfg"; return MGOS_UPDATER_ABORT; } #if CC3200_SAFE_CODE_UPDATE /* * When safe code update is enabled, we write code to a new file. * Otherwise we write to the same slot we're using currently, which is * unsafe, makes reverting code update not possible, but saves space. */ create_fname( mg_mk_str_n(cur_cfg.app_image_file, strlen(cur_cfg.app_image_file) - 2), ctx->new_boot_cfg_idx, ctx->app_image_file, sizeof(ctx->app_image_file)); #else { strncpy(ctx->app_image_file, cur_cfg.app_image_file, sizeof(ctx->app_image_file)); } #endif if (ctx->app_load_addr >= 0x20000000) { fname = ctx->app_image_file; } else { ctx->status_msg = "Bad/missing app load_addr"; ret = MGOS_UPDATER_ABORT; } } else if (tcmp(&type, "fs") == 0) { json_scanf( ctx->cur_part.ptr, ctx->cur_part.len, "{fs_size: %u, fs_block_size: %u, fs_page_size: %u, fs_erase_size: %u}", &ctx->fs_size, &ctx->fs_block_size, &ctx->fs_page_size, &ctx->fs_erase_size); if (ctx->fs_size > 0 && ctx->fs_block_size > 0 && ctx->fs_page_size > 0 && ctx->fs_erase_size > 0) { char fs_container_prefix[MAX_FS_CONTAINER_PREFIX_LEN]; create_fname(part_name, ctx->new_boot_cfg_idx, fs_container_prefix, sizeof(fs_container_prefix)); /* Delete container 1 (if any) so that 0 is the only one. */ cc32xx_vfs_dev_slfs_container_delete_container(fs_container_prefix, 1); cc32xx_vfs_dev_slfs_container_fname(fs_container_prefix, 0, (_u8 *) ctx->fs_container_file); fname = ctx->fs_container_file; if (fi->size > ctx->fs_size) { /* Assume meta has already been added. */ falloc = fi->size; } else { falloc = FS_CONTAINER_SIZE(fi->size); } } else { ctx->status_msg = "Missing FS parameters"; ret = MGOS_UPDATER_ABORT; } } if (fname != NULL) { int r = prepare_to_write(ctx, fi, fname, falloc, &ctx->cur_part); if (r < 0) { LOG(LL_ERROR, ("err = %d", r)); ret = MGOS_UPDATER_ABORT; } else { ret = (r > 0 ? MGOS_UPDATER_PROCESS_FILE : MGOS_UPDATER_SKIP_FILE); } } if (ret == MGOS_UPDATER_SKIP_FILE) { DBG(("Skipping %s %.*s", fi->name, (int) part_name.len, part_name.p)); } return ret; } int mgos_upd_file_data(struct mgos_upd_hal_ctx *ctx, const struct mgos_upd_file_info *fi, struct mg_str data) { _i32 r = sl_FsWrite(ctx->cur_fh, fi->processed, (_u8 *) data.p, data.len); if (r != data.len) { ctx->status_msg = "Write failed"; r = -1; } return r; }
LRESULT APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: create_toolbar(hwnd); create_term(hwnd); create_sysmenu(hwnd); return 0; case WM_SIZE: SendMessage(wndTB, TB_AUTOSIZE, 0, 0); get_def_size(LOWORD(lParam), HIWORD(lParam)); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case BUT_OPEN: open_file(); break; case BUT_REWIND: but_rewind: if (play_state==-1) break; EnterCriticalSection(&vt_mutex); replay_pause(); tr.tv_sec=0; tr.tv_usec=0; set_prog(); replay_seek(); LeaveCriticalSection(&vt_mutex); play_state=1; replay_resume(); do_replay(); break; case BUT_PAUSE: if (play_state==1) goto but_unpause; but_pause: CancelWaitableTimer(timer); replay_pause(); set_buttons(1); break; case BUT_PLAY: if (play_state>1) goto but_pause; but_unpause: replay_resume(); do_replay(); set_buttons(1); break; case BUT_SELSTART: if (play_state==-1) break; get_pos(); selstart=tr; set_prog_sel(); break; case BUT_SELEND: if (play_state==-1) break; selend=tr; set_prog_sel(); break; case BUT_EXPORT: if (play_state==-1) break; if (tcmp(selstart, selend)>=0) break; export_file(); break; } return 0; case WM_SYSCOMMAND: switch (LOWORD(wParam)) { default: return DefWindowProc(hwnd, uMsg, wParam, lParam); case BUT_FONT: choose_font(); } return 0; case WM_HSCROLL: if ((HANDLE)lParam==wndSpeed) speed_scrolled(); else if ((HANDLE)lParam==wndProg) prog_scrolled(); return 0; case WM_KEYDOWN: switch (wParam) { case VK_ADD: case 'F': adjust_speed(+1); break; case VK_SUBTRACT: case 'S': adjust_speed(-1); break; case '1': SendMessage(wndSpeed, TBM_SETPOS, 1, 2); speed_scrolled(); break; case 'Q': DestroyWindow(wndMain); break; case 'O': open_file(); break; case VK_SPACE: switch (play_state) { case -1: open_file(); break; case 0: play_state=2; goto but_rewind; case 1: goto but_unpause; case 2: case 3: goto but_pause; } break; case 'R': goto but_rewind; break; case VK_RIGHT: adjust_pos(+10); break; case VK_LEFT: adjust_pos(-10); break; case VK_UP: adjust_pos(+60); break; case VK_DOWN: adjust_pos(-60); break; case VK_PRIOR: adjust_pos(+600); break; case VK_NEXT: adjust_pos(-600); break; } return 0; case WM_SIZING: constrain_size((LPRECT)lParam); return 1; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; }