void ms_clear(ms a) { while (ms_delete(a, 0)); free(a->items); ms_init(a, a->oninsert, a->onremove); }
int ms_remove(ms a, void *item) { size_t i; for (i = 0; i < a->used; i++) { if (a->items[i] == item) return ms_delete(a, i); } return 0; }
static void closeMouse(void) { if (ms) { ms_setCallback(ms, 0); ms_close(ms); ms_delete(ms); ms= 0; } }
void * ms_take(ms a) { void *item; if (!a->used) return NULL; a->last = a->last % a->used; item = a->items[a->last]; ms_delete(a, a->last); ++a->last; return item; }
int ms_refresh(ClipMachine* mp,SQLROWSET* rs,SQLSTMT* s,ClipVar* ap){ MS_ROWSET *rowset = (MS_ROWSET*)rs; MS_STMT* stmt = (MS_STMT*)s; int i; unsigned long *lens; void **rec; int status; MYSQL_ROW row; ms_bindpars(stmt,ap); if(!stmt->sql){ _clip_trap_err(mp, 0, 0, 0, subsys, ER_NOSQL, er_nosql); return -1; } status = mysql_query(stmt->conn->conn,stmt->sql); if(status){ _clip_trap_err(mp, 0, 0, 0, subsys, ER_BADSTATEMENT, mysql_error(stmt->conn->conn)); return -1; } stmt->res = mysql_use_result(stmt->conn->conn); row = mysql_fetch_row(stmt->res); if(row){ rec = malloc(sizeof(void *) * rowset->nfields); lens = mysql_fetch_lengths(stmt->res); for(i=0;i<rowset->nfields;i++){ if(row[i]){ rec[i] = malloc(lens[i] + 4); *((int *) (rec[i])) = (int) lens[i]; memcpy(((char *) rec[i]) + 4, row[i], lens[i]); } else { rec[i] = NULL; } if(rowset->data[rowset->recno-1][i]) free(rowset->data[rowset->recno-1][i]); } free(rowset->data[rowset->recno-1]); rowset->data[rowset->recno-1] = rec; } else { ms_delete((SQLROWSET*)rowset); rowset->lastrec--; if(rowset->recno > rowset->lastrec) rowset->recno = rowset->lastrec; } return 0; }