toppm.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 91 行
C
91 行
#include <u.h>#include <libc.h>#include <draw.h>#include <memdraw.h>#include <ctype.h>#include <bio.h>#include "imagefile.h"voidusage(void){ fprint(2, "usage: toppm [-c 'comment'] [file]\n"); exits("usage");}voidmain(int argc, char *argv[]){ Biobuf bout; Memimage *i, *ni; int fd; char buf[256]; char *err, *comment; comment = nil; ARGBEGIN{ case 'c': comment = ARGF(); if(comment == nil) usage(); if(strchr(comment, '\n') != nil){ fprint(2, "ppm: comment cannot contain newlines\n"); usage(); } break; default: usage(); }ARGEND if(argc > 1) usage(); if(Binit(&bout, 1, OWRITE) < 0) sysfatal("Binit failed: %r"); memimageinit(); err = nil; if(argc == 0){ i = readmemimage(0); if(i == nil) sysfatal("reading input: %r"); ni = memmultichan(i); if(ni == nil) sysfatal("converting image to RGBV: %r"); if(i != ni){ freememimage(i); i = ni; } if(err == nil) err = memwriteppm(&bout, i, comment); }else{ fd = open(argv[0], OREAD); if(fd < 0) sysfatal("can't open %s: %r", argv[0]); i = readmemimage(fd); if(i == nil) sysfatal("can't readimage %s: %r", argv[0]); close(fd); ni = memmultichan(i); if(ni == nil) sysfatal("converting image to RGBV: %r"); if(i != ni){ freememimage(i); i = ni; } if(comment) err = memwriteppm(&bout, i, comment); else{ snprint(buf, sizeof buf, "Converted by Plan 9 from %s", argv[0]); err = memwriteppm(&bout, i, buf); } freememimage(i); } if(err != nil) fprint(2, "toppm: %s\n", err); exits(err);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?