static void vga_putch(char c) { u8_t color = gen_color(LIGHT_GREY, BLACK); u16_t attribute = color << 8; u16_t *location; if (c == BACKSPACE && cursor_x) cursor_x--; else if (c == TAB) cursor_x = (cursor_x + 8) & ~(8 - 1); else if (c == '\r') cursor_x = 0; else if (c == '\n') { cursor_x = 0; cursor_y++; } else if (c >= ' ') { location = video_mem + (cursor_y * COLUMNS + cursor_x); *location = c | attribute; cursor_x++; } if (cursor_x >= COLUMNS) { cursor_x = 0; cursor_y++; } scroll(); update_cursor(cursor_y, cursor_x); }
void vga_clear(void) { u8_t color = gen_color(WHITE, BLACK); u16_t blank = ((u8_t)' ') | color << 8; wmemset(video_mem, blank, COLUMNS*LINES); }
static void scroll(void) { u16_t blank = ((u8_t)' ') | gen_color(WHITE, BLACK); unsigned i; if (cursor_y < LINES) return; for (i = 0; i < (LINES-1)*COLUMNS; i++) video_mem[i] = video_mem[i + COLUMNS]; wmemset(video_mem + ((LINES - 1)*COLUMNS), blank, COLUMNS); cursor_y = LINES - 1; }
int main(int argc, char **argv) { int x,y; #if 1 printf("GIMP Palette\n"); printf("Name: Apple II Lores Dither.gpl\n"); printf("Columns: 16\n"); printf("#\n"); for(x=0;x<16;x++) { for(y=0;y<16;y++) { gen_color(x,y); } } #else for(x=0;x<16;x++) { for(y=0;y<16;y++) { hex_color(x,y); } } #endif return 0; }
long mk_part(long index, part_t *p) { long mfgr,cat,brnd; static int bInit = 0; static char szFormat[100]; static char szBrandFormat[100]; if (!bInit) { TRACE( TRACE_ALWAYS, "Init mk_part ..\n"); bInit = 1; } p->partkey = index; agg_str(&colors, (long)P_NAME_SCL, (long)P_NAME_SD, p->name); /*extract color from substring of p->name*/ p->clen =gen_color(p->name,p->color); RANDOM(mfgr, P_MFG_MIN, P_MFG_MAX, P_MFG_SD); sprintf(p->mfgr, "%s%ld", "MFGR#", mfgr); RANDOM(cat, P_CAT_MIN, P_CAT_MAX, P_CAT_SD); sprintf(p->category, "%s%ld", p->mfgr,cat); RANDOM(brnd, P_BRND_MIN, P_BRND_MAX, P_BRND_SD); sprintf(p->brand,"%s%ld",p->category,brnd); p->tlen = pick_str(&p_types_set, P_TYPE_SD, p->type); p->tlen = strlen(p_types_set.list[p->tlen].text); RANDOM(p->size, P_SIZE_MIN, P_SIZE_MAX, P_SIZE_SD); pick_str(&p_cntr_set, P_CNTR_SD, p->container); return (0); }
void onDraw(SkCanvas* canvas) override { SkRandom rand(1); canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1); const SkRect rect = SkRect::MakeLTRB(-20, -30, 20, 30); SkRRect circleRect; circleRect.setRectXY(rect, 5, 5); const SkScalar kXStart = 60.0f; const SkScalar kYStart = 80.0f; const int kXStep = 150; const int kYStep = 160; int maxX = fMatrices.count(); SkPaint rectPaint; rectPaint.setAntiAlias(true); rectPaint.setStyle(SkPaint::kStroke_Style); rectPaint.setStrokeWidth(SkIntToScalar(0)); rectPaint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY)); int testCount = 0; for (int i = 0; i < fPaints.count(); ++i) { for (int j = 0; j < fMatrices.count(); ++j) { canvas->save(); SkMatrix mat = fMatrices[j]; // position the roundrect, and make it at off-integer coords. mat.postTranslate(kXStart + SK_Scalar1 * kXStep * (testCount % maxX) + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * (testCount / maxX) + 3 * SK_Scalar1 / 4); canvas->concat(mat); SkColor color = gen_color(&rand); fPaints[i].setColor(color); canvas->drawRect(rect, rectPaint); canvas->drawRRect(circleRect, fPaints[i]); canvas->restore(); ++testCount; } } // special cases // non-scaled tall and skinny roundrect for (int i = 0; i < fPaints.count(); ++i) { SkRect rect = SkRect::MakeLTRB(-20, -60, 20, 60); SkRRect ellipseRect; ellipseRect.setRectXY(rect, 5, 10); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.55f + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); SkColor color = gen_color(&rand); fPaints[i].setColor(color); canvas->drawRect(rect, rectPaint); canvas->drawRRect(ellipseRect, fPaints[i]); canvas->restore(); } // non-scaled wide and short roundrect for (int i = 0; i < fPaints.count(); ++i) { SkRect rect = SkRect::MakeLTRB(-80, -30, 80, 30); SkRRect ellipseRect; ellipseRect.setRectXY(rect, 20, 5); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 4 + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); SkColor color = gen_color(&rand); fPaints[i].setColor(color); canvas->drawRect(rect, rectPaint); canvas->drawRRect(ellipseRect, fPaints[i]); canvas->restore(); } // super skinny roundrect for (int i = 0; i < fPaints.count(); ++i) { SkRect rect = SkRect::MakeLTRB(0, -60, 1, 60); SkRRect circleRect; circleRect.setRectXY(rect, 5, 5); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 3.25f + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4); SkColor color = gen_color(&rand); fPaints[i].setColor(color); canvas->drawRRect(circleRect, fPaints[i]); canvas->restore(); } // super short roundrect for (int i = 0; i < fPaints.count(); ++i) { SkRect rect = SkRect::MakeLTRB(-80, -1, 80, 0); SkRRect circleRect; circleRect.setRectXY(rect, 5, 5); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 2.5f + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); SkColor color = gen_color(&rand); fPaints[i].setColor(color); canvas->drawRRect(circleRect, fPaints[i]); canvas->restore(); } // radial gradient SkPoint center = SkPoint::Make(SkIntToScalar(0), SkIntToScalar(0)); SkColor colors[] = { SK_ColorBLUE, SK_ColorRED, SK_ColorGREEN }; SkScalar pos[] = { 0, SK_ScalarHalf, SK_Scalar1 }; auto shader = SkGradientShader::MakeRadial(center, 20, colors, pos, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode); for (int i = 0; i < fPaints.count(); ++i) { canvas->save(); // position the path, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 0 + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); SkColor color = gen_color(&rand); fPaints[i].setColor(color); fPaints[i].setShader(shader); canvas->drawRect(rect, rectPaint); canvas->drawRRect(circleRect, fPaints[i]); fPaints[i].setShader(nullptr); canvas->restore(); } // strokes and radii { SkScalar radii[][2] = { {10,10}, {5,15}, {5,15}, {5,15} }; SkScalar strokeWidths[] = { 20, 10, 20, 40 }; for (int i = 0; i < 4; ++i) { SkRRect circleRect; circleRect.setRectXY(rect, radii[i][0], radii[i][1]); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 5 + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); SkColor color = gen_color(&rand); SkPaint p; p.setAntiAlias(true); p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(strokeWidths[i]); p.setColor(color); canvas->drawRRect(circleRect, p); canvas->restore(); } } // test old entry point ( https://bug.skia.org/3786 ) { canvas->save(); canvas->translate(kXStart + SK_Scalar1 * kXStep * 5 + SK_Scalar1 / 4, kYStart + SK_Scalar1 * kYStep * 4 + SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); const SkColor color = gen_color(&rand); SkPaint p; p.setColor(color); const SkRect oooRect = { 20, 30, -20, -30 }; // intentionally out of order canvas->drawRoundRect(oooRect, 10, 10, p); canvas->restore(); } // rrect with stroke > radius/2 { SkRect smallRect = { -30, -20, 30, 20 }; SkRRect circleRect; circleRect.setRectXY(smallRect, 5, 5); canvas->save(); // position the roundrect, and make it at off-integer coords. canvas->translate(kXStart + SK_Scalar1 * kXStep * 5 + SK_Scalar1 / 4, kYStart - SK_Scalar1 * kYStep + 73 * SK_Scalar1 / 4 + SK_ScalarHalf * kYStep); SkColor color = gen_color(&rand); SkPaint p; p.setAntiAlias(true); p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(25); p.setColor(color); canvas->drawRRect(circleRect, p); canvas->restore(); } }