$NetBSD: patch-ad,v 1.1.1.1 2001/05/23 15:47:45 agc Exp $ --- helpdeco.c.orig Tue Jan 28 00:57:48 1997 +++ helpdeco.c Mon May 21 14:35:47 2001 @@ -383,7 +383,7 @@ char *extension; int extensions=0; /* index into bmpext: bit 0=multiresolution bit 1=bitmap, bit 2=metafile, bit 3=hotspot data, bit 4=embedded, bit 5=transparent */ -char *bmpext[]={"???","MRB","BMP","MRB","WMF","MRB","MRB","MRB","SHG","MRB","SHG","MRB","SHG","MRB","SHG","MRB"}; +char *bmpext[]={"???","mrb","bmp","mrb","wmf","mrb","mrb","mrb","shg","mrb","shg","mrb","shg","mrb","shg","mrb"}; char **stopwordfilename; int stopwordfiles; char **fontname; @@ -473,7 +473,7 @@ result=0UL; for(mask=0x80000000UL;mask;mask>>=1) { - if(hashhi>divhi||hashhi==divhi&&hashlo>=divlo) + if(hashhi>divhi||(hashhi==divhi&&hashlo>=divlo)) { result|=mask; hashhi-=divhi; @@ -908,8 +908,8 @@ _splitpath(a,NULL,NULL,aname,aext); _splitpath(b,NULL,NULL,bname,bext); - if(aext[0]=='\0') strcpy(aext,".HLP"); - if(bext[0]=='\0') strcpy(bext,".HLP"); + if(aext[0]=='\0') strcpy(aext,".hlp"); + if(bext[0]=='\0') strcpy(bext,".hlp"); i=strcmpi(aname,bname); if(i) return i; return strcmpi(aext,bext); @@ -1346,7 +1346,7 @@ f->seek(f,FileStart+dwOffsBitmap); byType=f->get(f); /* type of picture: 5=DDB, 6=DIB, 8=METAFILE */ byPacked=f->get(f); /* packing method: 0=unpacked, 1=RunLen, 2=LZ77, 3=both */ - if(byType==6&&byPacked<4||byType==5&&byPacked<2) + if((byType==6&&byPacked<4)||(byType==5&&byPacked<2)) { type|=2; /* contains bitmap */ memset(&bmfh,0,sizeof(bmfh)); @@ -1370,10 +1370,10 @@ dwHotspotSize=GetCDWord(f); dwPictureOffset=GetDWord(f); dwHotspotOffset=GetDWord(f); - if(exportplain||n==1&&(dwHotspotOffset==0L||dwHotspotSize==0L)) + if((exportplain||n==1)&&(dwHotspotOffset==0L||dwHotspotSize==0L)) { if(checkexternal) break; - strcat(szFilename,".BMP"); + strcat(szFilename,".bmp"); fTarget=my_fopen(szFilename,"wb"); if(fTarget) { @@ -1450,14 +1450,14 @@ dwHotspotSize=GetCDWord(f); dwPictureOffset=GetDWord(f); dwHotspotOffset=GetDWord(f); - if(exportplain||n==1&&(dwHotspotOffset==0L||dwHotspotSize==0L)) + if((exportplain||n==1)&&(dwHotspotOffset==0L||dwHotspotSize==0L)) { if(checkexternal) break; afh.dwKey=0x9AC6CDD7L; afh.wInch=2540; wp=(unsigned short *)&afh; for(i=0;i<10;i++) afh.wChecksum^=*wp++; - strcat(szFilename,".WMF"); + strcat(szFilename,".wmf"); fTarget=my_fopen(szFilename,"wb"); if(fTarget) { @@ -1589,7 +1589,7 @@ case 0xEB: /* topic jump into external file / secondary window */ case 0xEE: /* popup jump into external file without font change */ case 0xEF: /* topic jump into external file / secondary window without font change */ - if(hotspot[n].id1!=0&&hotspot[n].id1!=1&&hotspot[n].id1!=4&&hotspot[n].id1!=6||hotspot[n].id2!=0) + if((hotspot[n].id1!=0&&hotspot[n].id1!=1&&hotspot[n].id1!=4&&hotspot[n].id1!=6)||(hotspot[n].id2!=0)) { } else @@ -1631,8 +1631,8 @@ return type; } /**************************************************************************** -// END OF GRAPHICS STUFF -//**************************************************************************/ +END OF GRAPHICS STUFF +**************************************************************************/ char *getbitmapname(unsigned int n) /* retrieve extension of exported bitmap n */ { @@ -2018,7 +2018,7 @@ } putc('\n',hpj); } - if(groups||multi&&browsenums>1) + if((groups||multi)&&(browsenums>1)) { group=my_malloc(groups*sizeof(GROUP)); fputs("[GROUPS]\n",hpj); @@ -2320,6 +2320,7 @@ void FontLoad(FILE *HelpFile,FILE *rtf,FILE *hpj) { static char *BestFonts[]={"Arial","Times New Roman","MS Sans Serif","MS Serif","Helv","TmsRmn","MS Sans Serif","Helvetica","Times Roman","Times"}; + int default_font = 0; CHARMAPHEADER CharmapHeader; FONTHEADER FontHdr; FILE *f; @@ -2355,6 +2356,9 @@ fseek(HelpFile,FontStart+FontHdr.FacenamesOffset+len*i,SEEK_SET); my_fread(FontName,len,HelpFile); FontName[len]='\0'; + if (FontName[0] == '\000') { + strcpy(FontName, BestFonts[default_font]); + } ptr=strchr(FontName,','); if(ptr&&FontHdr.FacenamesOffset>=16) { @@ -2586,14 +2590,14 @@ if(m->font.expndtw!=n->font.expndtw) fprintf(rtf,"\\expndtw%d",m->font.expndtw); if(m->font.FGRGB[0]!=n->font.FGRGB[0]) fprintf(rtf,"\\cf%d",m->font.FGRGB[0]); if(m->font.BGRGB[0]!=n->font.BGRGB[0]) fprintf(rtf,"\\cb%d",m->font.BGRGB[0]); - if(m->font.Height!=n->font.Height) fprintf(rtf,"\\fs%d",-2L*m->font.Height); + if(m->font.Height!=n->font.Height) fprintf(rtf,"\\fs%ld",-2L*m->font.Height); if((m->font.Weight>500)!=(n->font.Weight>500)) fprintf(rtf,"\\b%d",m->font.Weight>500); if(m->font.Italic!=n->font.Italic) fprintf(rtf,"\\i%d",m->font.Italic); if(m->font.Underline!=n->font.Underline) fprintf(rtf,"\\ul%d",m->font.Underline); if(m->font.StrikeOut!=n->font.StrikeOut) fprintf(rtf,"\\strike%d",m->font.StrikeOut); if(m->font.DoubleUnderline!=n->font.DoubleUnderline) fprintf(rtf,"\\uldb%d",m->font.DoubleUnderline); if(m->font.SmallCaps!=n->font.SmallCaps) fprintf(rtf,"\\scaps%d",m->font.SmallCaps); - if(m->font.up!=n->font.up) if(m->font.up>0) fprintf(rtf,"\\up%d",m->font.up); else fprintf(rtf,"\\dn%d",-m->font.up); + if(m->font.up!=n->font.up) fprintf(rtf,"\\up%d",abs(m->font.up)); fprintf(rtf," \\sbasedon%u",m->BasedOn+9); } else @@ -2608,7 +2612,7 @@ if(m->font.expndtw) fprintf(rtf,"\\expndtw%d",m->font.expndtw); if(m->font.up>0) fprintf(rtf,"\\up%d",m->font.up); else if(m->font.up<0) fprintf(rtf,"\\dn%d",-m->font.up); - fprintf(rtf,"\\fs%d",-2*m->font.Height); + fprintf(rtf,"\\fs%ld",-2*m->font.Height); if(m->font.FGRGB[0]) fprintf(rtf,"\\cf%d",m->font.FGRGB[0]); if(m->font.BGRGB[0]) fprintf(rtf,"\\cb%d",m->font.BGRGB[0]); } @@ -2630,7 +2634,7 @@ if(m->font.FontName!=n->font.FontName) fprintf(rtf,"\\f%d",m->font.FontName); if(m->font.FGRGB[0]!=n->font.FGRGB[0]) fprintf(rtf,"\\cf%d",m->font.FGRGB[0]); if(m->font.BGRGB[0]!=n->font.BGRGB[0]) fprintf(rtf,"\\cb%d",m->font.BGRGB[0]); - if(m->font.Height!=n->font.Height) fprintf(rtf,"\\fs%d",-2L*m->font.Height); + if(m->font.Height!=n->font.Height) fprintf(rtf,"\\fs%ld",-2L*m->font.Height); if((m->font.Weight>500)!=(n->font.Weight>500)) fprintf(rtf,"\\b%d",m->font.Weight>500); if(m->font.Italic!=n->font.Italic) fprintf(rtf,"\\i%d",m->font.Italic); if(m->font.Underline!=n->font.Underline) fprintf(rtf,"\\ul%d",m->font.Underline); @@ -2648,7 +2652,7 @@ if(m->font.StrikeOut) fputs("\\strike",rtf); if(m->font.DoubleUnderline) fputs("\\uldb",rtf); if(m->font.SmallCaps) fputs("\\scaps",rtf); - fprintf(rtf,"\\fs%d",-2*m->font.Height); + fprintf(rtf,"\\fs%ld",-2*m->font.Height); if(m->font.FGRGB[0]) fprintf(rtf,"\\cf%d",m->font.FGRGB[0]); if(m->font.BGRGB[0]) fprintf(rtf,"\\cb%d",m->font.BGRGB[0]); } @@ -2800,10 +2804,12 @@ { char *buffer; long BytesRead; + long i; if(Length<=NumBytes) /* no phrase compression in this case */ { BytesRead=TopicRead(HelpFile,TopicPos,dest,Length); + for (i = BytesRead; i <= Length; i++) dest[i] = '\0'; if(BytesRead==Length&&Length8) { buffer[8-strlen(num)]='\0'; } strcat(buffer,num); } - strcat(buffer,".RTF"); + strcat(buffer,".rtf"); } /* emit rtf commands to change to font i. @@ -3354,17 +3360,17 @@ else { /* HC30 can't reset, so reset using \plain */ - if(CurrentFont.Bold&&!f->Bold - || CurrentFont.Italic&&!f->Italic - || CurrentFont.Underline&&!(!uldb&&(ul||f->Underline)) - || CurrentFont.StrikeOut&&!f->StrikeOut - || CurrentFont.DoubleUnderline&&!(uldb||f->DoubleUnderline) - || CurrentFont.SmallCaps&&!f->SmallCaps - || CurrentFont.FontName&&!f->FontName - || CurrentFont.textcolor&&!f->textcolor - || CurrentFont.backcolor&&!f->backcolor - || CurrentFont.up&&!f->up - || CurrentFont.style&&!f->style) + if((CurrentFont.Bold&&!f->Bold) + || (CurrentFont.Italic&&!f->Italic) + || (CurrentFont.Underline&&!(!uldb&&(ul||f->Underline))) + || (CurrentFont.StrikeOut&&!f->StrikeOut) + || (CurrentFont.DoubleUnderline&&!(uldb||f->DoubleUnderline)) + || (CurrentFont.SmallCaps&&!f->SmallCaps) + || (CurrentFont.FontName&&!f->FontName) + || (CurrentFont.textcolor&&!f->textcolor) + || (CurrentFont.backcolor&&!f->backcolor) + || (CurrentFont.up&&!f->up) + || (CurrentFont.style&&!f->style)) { fputs("\\plain",rtf); memset(&CurrentFont,0,sizeof(CurrentFont)); @@ -3408,7 +3414,7 @@ grouplisted=FALSE; for(i=0;i=group[i].GroupHeader.FirstTopic&&TopicNum<=group[i].GroupHeader.LastTopic&&(group[i].GroupHeader.GroupType==1||group[i].GroupHeader.GroupType==2&&(group[i].Bitmap[TopicNum>>3]&(1<<(TopicNum&7))))) + if((TopicNum>=group[i].GroupHeader.FirstTopic&&TopicNum<=group[i].GroupHeader.LastTopic)&&((group[i].GroupHeader.GroupType==1||group[i].GroupHeader.GroupType==2)&&(group[i].Bitmap[TopicNum>>3]&(1<<(TopicNum&7))))) { if(!grouplisted) { @@ -3544,9 +3550,9 @@ fprintf(rtf,"{\\up #}{\\footnote\\pard\\plain{\\up #} TOPIC%ld}\n",TopicNum); if(resolvebrowse) { - if(TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum>TopicNum - || TopicHdr30->NextTopicNum==-1&&TopicHdr30->PrevTopicNum>TopicNum - || TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum==-1) + if((TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum>TopicNum) + || (TopicHdr30->NextTopicNum==-1&&TopicHdr30->PrevTopicNum>TopicNum) + || (TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum==-1)) { BrowseNum=AddLink(TopicNum,TopicHdr30->NextTopicNum,TopicHdr30->PrevTopicNum); } @@ -3579,9 +3585,9 @@ } if(resolvebrowse) { - if(TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck>TopicOffset - || TopicHdr->BrowseFor==-1L&&TopicHdr->BrowseBck>TopicOffset - || TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck==-1L) + if((TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck>TopicOffset) + || (TopicHdr->BrowseFor==-1L&&TopicHdr->BrowseBck>TopicOffset) + || (TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck==-1L)) { BrowseNum=AddLink(TopicOffset,TopicHdr->BrowseFor,TopicHdr->BrowseBck); } @@ -3635,7 +3641,7 @@ } TopicNum++; } - else if(LinkData1&&LinkData2&&TopicLink.RecordType==TL_DISPLAY30||TopicLink.RecordType==TL_DISPLAY||TopicLink.RecordType==TL_TABLE) + else if(LinkData1&&LinkData2&&(TopicLink.RecordType==TL_DISPLAY30||TopicLink.RecordType==TL_DISPLAY||TopicLink.RecordType==TL_TABLE)) { if(AnnoFile) Annotate(TopicPos,rtf); ptr=LinkData1; @@ -3738,7 +3744,7 @@ break; } } - fprintf(rtf,"\\tx%d",(x1&0x3FFF)*scaling-rounderr); + fprintf(rtf,"\\tx%ld",(x1&0x3FFF)*scaling-rounderr); } } putc(' ',rtf); @@ -4100,7 +4106,7 @@ return rtf; } -int _cdecl ContextRecCmp(const void *a,const void *b) +int ContextRecCmp(const void *a,const void *b) { if(((const CONTEXTREC *)a)->TopicOffset<((const CONTEXTREC *)b)->TopicOffset) return -1; if(((const CONTEXTREC *)a)->TopicOffset>((const CONTEXTREC *)b)->TopicOffset) return 1; @@ -5154,9 +5160,9 @@ TopicHdr30=(TOPICHEADER30 *)LinkData1; if(resolvebrowse) { - if(TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum>TopicNum - || TopicHdr30->NextTopicNum==-1&&TopicHdr30->PrevTopicNum>TopicNum - || TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum==-1) + if((TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum>TopicNum) + || (TopicHdr30->NextTopicNum==-1&&TopicHdr30->PrevTopicNum>TopicNum) + || (TopicHdr30->NextTopicNum>TopicNum&&TopicHdr30->PrevTopicNum==-1)) { AddBrowse(TopicNum,TopicHdr30->NextTopicNum,TopicHdr30->PrevTopicNum); } @@ -5187,9 +5193,9 @@ TopicHdr=(TOPICHEADER *)LinkData1; if(resolvebrowse) { - if(TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck>TopicOffset - || TopicHdr->BrowseFor==-1L&&TopicHdr->BrowseBck>TopicOffset - || TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck==-1L) + if((TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck>TopicOffset) + || (TopicHdr->BrowseFor==-1L&&TopicHdr->BrowseBck>TopicOffset) + || (TopicHdr->BrowseFor>TopicOffset&&TopicHdr->BrowseBck==-1L)) { AddBrowse(TopicOffset,TopicHdr->BrowseFor,TopicHdr->BrowseBck); } @@ -5394,7 +5400,7 @@ } } -int _cdecl CTXOMAPRecCmp(const void *a,const void *b) +int CTXOMAPRecCmp(const void *a,const void *b) { if(((CTXOMAPREC *)a)->TopicOffset<((CTXOMAPREC *)b)->TopicOffset) return -1; if(((CTXOMAPREC *)a)->TopicOffset>((CTXOMAPREC *)b)->TopicOffset) return 1; @@ -5577,22 +5583,22 @@ strcpy(hpjfilename,name); if(mvp) { - strcat(hpjfilename,".MVP"); + strcat(hpjfilename,".mvp"); } else { - strcat(hpjfilename,".HPJ"); + strcat(hpjfilename,".hpj"); } hpj=my_fopen(hpjfilename,"wt"); if(hpj) { strcpy(filename,name); - strcat(filename,".ICO"); + strcat(filename,".ico"); SysList(HelpFile,hpj,filename); /* after ContextLoad */ ListBaggage(HelpFile,hpj,before31); if(!mvp) AliasList(hpj); /* after ContextLoad, before TopicDump */ strcpy(filename,name); - strcat(filename,".PH"); + strcat(filename,".ph"); PhraseList(filename); /* after PhraseLoad */ BuildName(filename,TopicsPerRTF>0); rtf=my_fopen(filename,"wt"); @@ -5672,7 +5678,7 @@ putc('\n',stderr); if(!before31&&guessing) GuessFromKeywords(HelpFile); /* after FirstPass, before SysList */ strcpy(filename,name); - strcat(filename,".CNT"); + strcat(filename,".cnt"); rtf=my_fopen(filename,"wt"); if(rtf) { @@ -5752,7 +5758,7 @@ PhraseLoad(HelpFile); DumpTopic(HelpFile,offset); } - else if(strcmp(dumpfile+strlen(dumpfile)-4,".GRP")==0) + else if(strcmp(dumpfile+strlen(dumpfile)-4,".grp")==0) { GroupDump(HelpFile); } @@ -5882,7 +5888,7 @@ return TRUE; } -int _cdecl main(int argc,char *argv[]) +int main(int argc,char *argv[]) { char AnnoFileName[81]; char drive[_MAX_DRIVE]; @@ -6036,9 +6042,8 @@ } if(filename) { - strupr(filename); _splitpath(filename,drive,dir,name,ext); - if(ext[0]=='\0') strcpy(ext,".HLP"); + if(ext[0]=='\0') strcpy(ext,".hlp"); mvp=ext[1]=='M'; _makepath(HelpFileName,drive,dir,name,ext); f=fopen(HelpFileName,"rb"); @@ -6046,7 +6051,7 @@ { if(annotate) { - if(AnnoFileName[0]=='\0') _makepath(AnnoFileName,drive,dir,name,".ANN"); + if(AnnoFileName[0]=='\0') _makepath(AnnoFileName,drive,dir,name,".ann"); AnnoFile=fopen(AnnoFileName,"rb"); if(!AnnoFile) { @@ -6096,7 +6101,6 @@ "work like the original. This program is Freeware. Use at your own risk. No\n" "part of it may be used commercially. No fees may be charged on distributing.\n" #ifndef _WIN32 - "Launch from Windows 95/Windows NT command line to handle larger helpfiles." #endif ,sizeof(int)*8); }