在DOS下查看WPS文件

Author: 贵州 王 乜 Date: 1996-03-22

        要在DOS下查看WPS文件,必须解决下面几个问题:1.去掉长度为1024字节的WPS文件的文件头;2.过滤掉ASCII码0-19H中除回车、换行外的字符(如分页符);3.过滤掉ASCII码80H-0A0H之间的编码(WPS文件中的特殊控制符,如字体字号等各种排版编辑控制符);4.将软回车符换为硬回车。本程序用TURBO C 2.0编写,在386/DX40机,DOS 3.30下,486/DX66,DOS 6.22下通过,中文环境为UCDOS 3.1。程序清单如下,用法为:若要在DOS下查看WPS文件,键入TYPEWPS 文件名1即可;若要将WPS文件转换为文本文件键入TYPEWPS 文件名1 文件名2即可。其中,TYPEWPS为本文件名(读者也可另外命名),文件名1为欲查看的WPS文件,文件名2为转换为文本文件后的文件名。若只键入TYPEWPS,程序会自动提示正确的使用格式。
        /*文件名TYPEWPS.EXE*/
        #include<stdio.h>
        main(int argc,char *argv[])
        {
        FILE *fp1,*fp2;
        int ch,bh=0;
        if(argc==1)
        {
        printf("Usage:%s Infile [outfile]\n",argv[0]);
        /*若只有TYPEWPS则用中英文提示正确的使用格式*/
        printf("用法:%s 文件名1.后辍名 [文件名2.后辍名]\n",argv[0]);
        getch();
        exit(0);
        }
        if((fp1=fopen(argv[1],"rt"))==NULL)
        {
        printf("Cannot open %s\n",argv[1]);
        getch();
        exit(1);
        }
        if (argc==2)
        fp2=stdout;/*若只有文件名1.后辍名,在屏幕上显示*/
        else    /*若有文件名2.后辍名,则将文件名1.后辍名转换为文本文件*/
        if ((fp2=fopen(argv[2],"wt+"))==NULL)
        {
        printf("Cannot open %s\n",argv[2]);
        getch();
        exit(1);
        }
        fseek(fp1,1024L,0);/*去掉长度为1024字节的WPS文件的文件头*/
        while((ch=fgetc(fp1))!=EOF)
        {
        if((bh==0x8d)&&(ch==0x8a))/*滤掉软回车,换为硬回车*/
        fputc('\n',fp2);
        else
        {
        if ((ch<0x7f)||(ch>0xa0))/*滤掉特殊控制符*/
        {
        if ((ch==0x0d)||(ch==0x0a)||(ch>=0x20))/*滤掉ASCII码0-19H中除回车,换行外的字符*/
        fputc(ch,fp2);
        }
        bh=ch;
        }
        }
        fclose(fp1);
        fputc(ch,fp2);
        fclose(fp2);
        }