/** * \param r->ebx The buffer that will be written to. * \param r->ecx The size of the buffer that will be written to. */ void Osapi_ReadString(struct regs* r) { char *buffer = (char *)r->ebx; unsigned int buffer_size = (unsigned int)r->ecx; unsigned char current_char = Keyboard_ReadKey(); int i = 0; do { switch(current_char) { case Backspace: i = Math_Max(0,--i); //kprintf("%c",Backspace); //kprintf("%c",Space); //kprintf("%c",Backspace); buffer[i] = Space; break; case Enter: current_char = '\n'; buffer[i] = current_char; //kprintf("%c",Enter); i++; break; default: buffer[i] = current_char; kprintf("%c",current_char); i++; } current_char = Keyboard_ReadKey(); } while(current_char != '\n' && i < buffer_size - 1); buffer[buffer_size] = '\0'; }
void Sky_DrawFace (int axis) { glpoly_t *p; MathVector3f_t verts[4]; int i, j, start; float di,qi,dj,qj; MathVector3f_t v_up, v_right, temp, temp2; Sky_SetBoxVert(-1.0f,-1.0f,axis,verts[0]); Sky_SetBoxVert(-1.0f,1.0f,axis,verts[1]); Sky_SetBoxVert(1.0f,1.0f,axis,verts[2]); Sky_SetBoxVert(1.0f,-1.0f,axis,verts[3]); start = Hunk_LowMark (); p = (glpoly_t*)Hunk_Alloc(sizeof(glpoly_t)); Math_VectorSubtract(verts[2],verts[3], v_up); Math_VectorSubtract(verts[2],verts[1], v_right); di = Math_Max((int)r_sky_quality.value,1); qi = 1.0f/di; dj = (axis < 4) ? di*2 : di; // Subdivide vertically more than horizontally on skybox sides qj = 1.0f/dj; for (i=0; i<di; i++) { for (j=0; j<dj; j++) { if (i*qi < skymins[0][axis]/2+0.5 - qi || i*qi > skymaxs[0][axis]/2+0.5 || j*qj < skymins[1][axis]/2+0.5 - qj || j*qj > skymaxs[1][axis]/2+0.5) continue; //if (i&1 ^ j&1) continue; //checkerboard test Math_VectorScale(v_right, qi*i, temp); Math_VectorScale(v_up, qj*j, temp2); Math_VectorAdd(temp,temp2,temp); Math_VectorAdd(verts[0],temp,p->verts[0]); Math_VectorScale(v_up, qj, temp); Math_VectorAdd(p->verts[0],temp,p->verts[1]); Math_VectorScale(v_right, qi, temp); Math_VectorAdd(p->verts[1],temp,p->verts[2]); Math_VectorAdd(p->verts[0],temp,p->verts[3]); Sky_DrawFaceQuad(p); } } Hunk_FreeToLowMark(start); }
/* Must be called whenever vid changes Internal use only */ void Screen_UpdateSize(void) { float size, scale; //johnfitz -- scale vid.bRecalcRefDef = false; scr_tileclear_updates = 0; //johnfitz // bound viewsize if(scr_viewsize.value < 30) Cvar_Set("viewsize","30"); else if(scr_viewsize.value > 120) Cvar_Set("viewsize","120"); // Bound fov if(scr_fov.value < 10) Cvar_Set ("fov","10"); else if(scr_fov.value > 170) Cvar_Set ("fov","170"); //johnfitz -- rewrote this section size = scr_viewsize.value; scale = Math_Clamp(1.0, scr_sbarscale.value, (float)glwidth / 320.0); if (size >= 120 || cl.intermission || scr_sbaralpha.value < 1) //johnfitz -- scr_sbaralpha.value sb_lines = 0; else if (size >= 110) sb_lines = 24*scale; else sb_lines = 48*scale; size = Math_Min(scr_viewsize.value,100)/100; //johnfitz //johnfitz -- rewrote this section r_refdef.vrect.width = Math_Max(glwidth * size, 96); //no smaller than 96, for icons r_refdef.vrect.height = Math_Min(glheight * size, glheight - sb_lines); //make room for sbar r_refdef.vrect.x = (glwidth - r_refdef.vrect.width)/2; r_refdef.vrect.y = (glheight - sb_lines - r_refdef.vrect.height)/2; //johnfitz r_refdef.fov_x = scr_fov.value; r_refdef.fov_y = CalcFovy (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height); scr_vrect = r_refdef.vrect; }
void R_CheckEfrags (void) { efrag_t *ef; int count; if (cls.signon < 2) return; //don't spam when still parsing signon packet full of static ents for (count=MAX_EFRAGS, ef = cl.free_efrags; ef; count--, ef = ef->entnext) ; if (count > 640 && dev_peakstats.efrags <= 640) Con_Warning ("%i efrags exceeds standard limit of 640.\n", count); dev_stats.efrags = count; dev_peakstats.efrags = Math_Max(count,dev_peakstats.efrags); }
void LayoutRects(wxSize &ioSize) { int allow_width = ioSize.x - mBorders; int x = mBorders; int y = mBorders; int max_w = 0; int max_h = 0; int on_row = 0; int prev_separator_size = 0; int rows = 1; for(int t=0;t<mTools.size();t++) { ToolBoxTool &tool = *mTools[t]; if (tool.IsSeparator()) { prev_separator_size = mHGap + mSeparatorSize; on_row++; continue; } wxSize s= tool.GetSize(); // New row ? int right = x + prev_separator_size + s.x; if (on_row && (right > allow_width) ) { // finish old row ... x+= mBorders-mHGap; max_w = Math_Max(max_w,x); if (on_row>1) CentreOnRow(t-on_row,on_row,y,max_h); y+=max_h + mVGap; // start new row x = mBorders; // Convert vertical separator, which wouldn't fit, into horizontal // separator ... if (prev_separator_size) { mTools[t-1]->mLayoutPos = wxRect(x,y,0,0); //mTools[t-1]->mLayoutPos = wxRect(x,y,max_w,1); //y+=1+mVGap; prev_separator_size = 0; } on_row = 0; max_h = 0; rows++; } // Add previous separator we delayed until here ... if (prev_separator_size) { mTools[t-1]->mLayoutPos = wxRect(x,y,1,10); x+=prev_separator_size; prev_separator_size = 0; } tool.mLayoutPos = wxRect(x,y,s.x,s.y); if (max_h<s.y) max_h = s.y; x+=s.x + mHGap; on_row++; } if (prev_separator_size) { // TODO: } if (on_row>1) CentreOnRow(mTools.size()-on_row,on_row,y,max_h); x+= mBorders - mHGap; max_w = Math_Max(max_w,x); if (rows>1) y-=VGap; y+=max_h + mBorders; for(int i=0;i<mTools.size();i++) mTools[i]->SetHorizontalSeparatorSize(max_w); ioSize = wxSize( max_w, y ); }