1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2012 Nicolas George 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#include "libavutil/avassert.h" 22cabdff1aSopenharmony_ci#include "libavutil/bprint.c" 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#undef printf 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_cistatic void bprint_pascal(AVBPrint *b, unsigned size) 27cabdff1aSopenharmony_ci{ 28cabdff1aSopenharmony_ci unsigned i, j; 29cabdff1aSopenharmony_ci unsigned p[42]; 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci av_assert0(size < FF_ARRAY_ELEMS(p)); 32cabdff1aSopenharmony_ci 33cabdff1aSopenharmony_ci p[0] = 1; 34cabdff1aSopenharmony_ci av_bprintf(b, "%8d\n", 1); 35cabdff1aSopenharmony_ci for (i = 1; i <= size; i++) { 36cabdff1aSopenharmony_ci p[i] = 1; 37cabdff1aSopenharmony_ci for (j = i - 1; j > 0; j--) 38cabdff1aSopenharmony_ci p[j] = p[j] + p[j - 1]; 39cabdff1aSopenharmony_ci for (j = 0; j <= i; j++) 40cabdff1aSopenharmony_ci av_bprintf(b, "%8d", p[j]); 41cabdff1aSopenharmony_ci av_bprintf(b, "\n"); 42cabdff1aSopenharmony_ci } 43cabdff1aSopenharmony_ci} 44cabdff1aSopenharmony_ci 45cabdff1aSopenharmony_ciint main(void) 46cabdff1aSopenharmony_ci{ 47cabdff1aSopenharmony_ci AVBPrint b; 48cabdff1aSopenharmony_ci char buf[256]; 49cabdff1aSopenharmony_ci struct tm testtime = { .tm_year = 100, .tm_mon = 11, .tm_mday = 20 }; 50cabdff1aSopenharmony_ci 51cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_UNLIMITED); 52cabdff1aSopenharmony_ci bprint_pascal(&b, 5); 53cabdff1aSopenharmony_ci printf("Short text in unlimited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len); 54cabdff1aSopenharmony_ci printf("%s\n", b.str); 55cabdff1aSopenharmony_ci av_bprint_finalize(&b, NULL); 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_UNLIMITED); 58cabdff1aSopenharmony_ci bprint_pascal(&b, 25); 59cabdff1aSopenharmony_ci printf("Long text in unlimited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len); 60cabdff1aSopenharmony_ci av_bprint_finalize(&b, NULL); 61cabdff1aSopenharmony_ci 62cabdff1aSopenharmony_ci av_bprint_init(&b, 0, 2048); 63cabdff1aSopenharmony_ci bprint_pascal(&b, 25); 64cabdff1aSopenharmony_ci printf("Long text in limited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len); 65cabdff1aSopenharmony_ci av_bprint_finalize(&b, NULL); 66cabdff1aSopenharmony_ci 67cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_AUTOMATIC); 68cabdff1aSopenharmony_ci bprint_pascal(&b, 5); 69cabdff1aSopenharmony_ci printf("Short text in automatic buffer: %u/%u\n", (unsigned)strlen(b.str), b.len); 70cabdff1aSopenharmony_ci 71cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_AUTOMATIC); 72cabdff1aSopenharmony_ci bprint_pascal(&b, 25); 73cabdff1aSopenharmony_ci printf("Long text in automatic buffer: %u/%u\n", (unsigned)strlen(b.str)/8*8, b.len); 74cabdff1aSopenharmony_ci /* Note that the size of the automatic buffer is arch-dependent. */ 75cabdff1aSopenharmony_ci 76cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_COUNT_ONLY); 77cabdff1aSopenharmony_ci bprint_pascal(&b, 25); 78cabdff1aSopenharmony_ci printf("Long text count only buffer: %u/%u\n", (unsigned)strlen(b.str), b.len); 79cabdff1aSopenharmony_ci 80cabdff1aSopenharmony_ci av_bprint_init_for_buffer(&b, buf, sizeof(buf)); 81cabdff1aSopenharmony_ci bprint_pascal(&b, 25); 82cabdff1aSopenharmony_ci printf("Long text count only buffer: %u/%u\n", (unsigned)strlen(buf), b.len); 83cabdff1aSopenharmony_ci 84cabdff1aSopenharmony_ci av_bprint_init(&b, 0, AV_BPRINT_SIZE_UNLIMITED); 85cabdff1aSopenharmony_ci av_bprint_strftime(&b, "%Y-%m-%d", &testtime); 86cabdff1aSopenharmony_ci printf("strftime full: %u/%u \"%s\"\n", (unsigned)strlen(buf), b.len, b.str); 87cabdff1aSopenharmony_ci av_bprint_finalize(&b, NULL); 88cabdff1aSopenharmony_ci 89cabdff1aSopenharmony_ci av_bprint_init(&b, 0, 8); 90cabdff1aSopenharmony_ci av_bprint_strftime(&b, "%Y-%m-%d", &testtime); 91cabdff1aSopenharmony_ci printf("strftime truncated: %u/%u \"%s\"\n", (unsigned)strlen(buf), b.len, b.str); 92cabdff1aSopenharmony_ci 93cabdff1aSopenharmony_ci return 0; 94cabdff1aSopenharmony_ci} 95