long arg_ascii_char (int n) { CHECK_ARG (n, CHARACTER_P); { SCHEME_OBJECT object = (ARG_REF (n)); if (! (CHAR_TO_ASCII_P (object))) error_bad_range_arg (n); return (CHAR_TO_ASCII (object)); } }
void Window::border(float *tex, float *col, float *bgCol) { unsigned tileW = (4*scale); unsigned tileH = (6*scale); unsigned width = rect.Width, height = rect.Height; unsigned nWide = width/tileW; unsigned nHigh = height/tileH; int tl,tr,br,bl,h,v,jl,jr; switch(borderStyle) { case Border_Single: tl=CORNER_TOP_LEFT_SINGLE,tr=CORNER_TOP_RIGHT_SINGLE; br=CORNER_BOTTOM_RIGHT_SINGLE,bl=CORNER_BOTTOM_LEFT_SINGLE; h=LINE_HORIZONTAL_SINGLE,v=LINE_VERTICAL_SINGLE; jl=JOINT_SINGLE_LEFT_SINGLE ,jr=JOINT_SINGLE_RIGHT_SINGLE; break; case Border_Double: tl=CORNER_TOP_LEFT_DOUBLE,tr=CORNER_TOP_RIGHT_DOUBLE; br=CORNER_BOTTOM_RIGHT_DOUBLE,bl=CORNER_BOTTOM_LEFT_DOUBLE; h=LINE_HORIZONTAL_DOUBLE,v=LINE_VERTICAL_DOUBLE; jl=JOINT_DOUBLE_LEFT_SINGLE ,jr= JOINT_DOUBLE_RIGHT_SINGLE; break; case Border_Block: tl=BLOCK,tr=BLOCK,br=BLOCK,bl=BLOCK,h=BLOCK,v=BLOCK; jl=BLOCK,jr=BLOCK; break; default: return; break; } // top left { Ascii a(tl+16,borderColour,Colour(0,0,0)); int texI = ARRAY2D(0,0,nWide)*8; int colI = ARRAY2D(0,0,nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],a); } // top right { Ascii a(tr+16,borderColour,Colour(0,0,0)); int texI = ARRAY2D((nWide-1),0,nWide)*8; int colI = ARRAY2D((nWide-1),0,nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],a); } // bottom left { Ascii a(bl+16,borderColour,Colour(0,0,0)); int texI = ARRAY2D(0,(nHigh-1),nWide)*8; int colI = ARRAY2D(0,(nHigh-1),nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],a); } // bottom right { Ascii a(br+16,borderColour,Colour(0,0,0)); int texI = ARRAY2D((nWide-1),(nHigh-1),nWide)*8; int colI = ARRAY2D((nWide-1),(nHigh-1),nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],a); } // vertical for(int j=1;j<nHigh-1;j++) { Ascii b(v+16,borderColour,Colour(0,0,0)); int texI = ARRAY2D(0,j,nWide)*8; int colI = ARRAY2D(0,j,nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],b); texI = ARRAY2D((nWide-1),j,nWide)*8; colI = ARRAY2D((nWide-1),j,nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],b); } // horizontal int centre = round(nWide/2.0)-round(centreLabel.getString().size()/2.0)-1; int left = 1; int right = nWide-rightLabel.getString().size()-3; for(int i=1;i<nWide-1;i++) { Ascii b, c = Ascii(h+16,borderColour,Colour(0,0,0)); if(centreLabel.getString().size() != 0 && i >= centre-1 && i-centre <= centreLabel.getString().size()+1) { // centre // printf("Centre label: %s\n",centreLabel.getString().c_str()); if(i == centre) b = Ascii(jr+16,borderColour,Colour(0,0,0)); else if(i-centre == centreLabel.getString().size()+1) b = Ascii(jl+16,borderColour,Colour(0,0,0)); else b = Ascii(CHAR_TO_ASCII(centreLabel.getString()[i-centre-1])+16,centreLabel.getColour(),Colour(0,0,0)); } else if(leftLabel.getString().size() != 0 && i >= 1 && i-left <= leftLabel.getString().size()+1) { // left if(i == left) b = Ascii(jr+16,borderColour,Colour(0,0,0)); else if(i-left == leftLabel.getString().size()+1) b = Ascii(jl+16,borderColour,Colour(0,0,0)); else b = Ascii(CHAR_TO_ASCII(leftLabel.getString()[i-left-1])+16,leftLabel.getColour(),Colour(0,0,0)); } else if(rightLabel.getString().size() != 0 && i >= right-1 && i-right <= rightLabel.getString().size()+1) { // right if(i == right) b = Ascii(jr+16,borderColour,Colour(0,0,0)); else if(i-right == rightLabel.getString().size()+1) b = Ascii(jl+16,borderColour,Colour(0,0,0)); else b = Ascii(CHAR_TO_ASCII(rightLabel.getString()[i-right-1])+16,rightLabel.getColour(),Colour(0,0,0)); } else b = c; int texI = ARRAY2D(i,0,nWide)*8; int colI = ARRAY2D(i,0,nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],b); texI = ARRAY2D(i,(nHigh-1),nWide)*8; colI = ARRAY2D(i,(nHigh-1),nWide)*16; displayTile(&tex[texI],&col[colI],&bgCol[colI],c); } }