/**************************************************************************** * apps/examples/pdcurses/charset_main.c * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ /**************************************************************************** * Included Files ****************************************************************************/ #include "graphics/curses.h" /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #define FIRST_CH 0x20 #define LAST_CH 0x7e #define NUM_CH (LAST_CH - FIRST_CH + 1) /**************************************************************************** * Private Data ****************************************************************************/ static short color_table[] = { COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_CYAN, COLOR_RED, COLOR_MAGENTA, COLOR_YELLOW, COLOR_WHITE }; /**************************************************************************** * Public Functions ****************************************************************************/ int main(int argc, FAR char *argv[]) { chtype ch; int lastch; int width; int height; int xoffset; int yoffset; int row; int col; int i; #ifdef CONFIG_PDCURSES_MULTITHREAD FAR struct pdc_context_s *ctx = PDC_ctx(); #endif /* Initialize */ traceon(); initscr(); noecho(); /* Setup colors */ if (has_colors()) { start_color(); } for (i = 0; i < 8; i++) { init_pair(i, color_table[i], COLOR_BLACK); } /* Set up geometry */ /* First get the maximum width */ width = COLS - 2; if (width > NUM_CH) { width = NUM_CH; } /* Get the height associated with the maximum width */ height = (NUM_CH + width - 1) / width; lastch = LAST_CH; if (height > LINES) { height = LINES; lastch = FIRST_CH + width * height - 1; } /* Reduce the width if it will give us a more balanced layout */ while (height < (LINES / 2) && width > (COLS / 2)) { int numch = lastch - FIRST_CH + 1; width >>= 1; height = (numch + width - 1) / width; } /* Center the rectangle containing the font set */ xoffset = (COLS - width) / 2; yoffset = (LINES - height) / 2; /* Now display the character set using that geometry */ ch = FIRST_CH; for (row = yoffset; row < yoffset + height; row++) { for (col = xoffset; col < xoffset + width; col++) { mvaddch(row, col, ch); if (++ch > lastch) { break; } } } refresh(); endwin(); return 0; }