if (!WriteSomething("@NODE \x22%s\x22 \x22%s()\x22\n",FindSlash(CurrentAutodocNode->Node.Name)+1,CurrentAutodocNode->Node.Name)) return(FALSE);
}
else
{
if (!WriteSomething("@NODE \x22%s\x22 \x22%s\x22\n",FindSlash(CurrentAutodocNode->Node.Name)+1,CurrentAutodocNode->Node.Name)) return(FALSE);
}
BufferIndex=0;
Buffer[0]='\0';
while (TRUE)
{
if (Break()) return(FALSE);
OldBufferIndex=BufferIndex;
Character=fgetc();
WordBuffer[0]='\0';
if ((Character>='a' && Character<='z') || (Character>='A' && Character<='Z'))
{
Underscores=0;
UppercaseLetters=0;
Index=0;
Periods=0;
Slashes=0;
while ((Character>='a' && Character<='z') ||
(Character>='A' && Character<='Z') ||
(Character>='0' && Character<='9') ||
(Character=='_') ||
(Character=='/') ||
(Character=='.'))
{
WordBuffer[Index++]=Character;
if (Index==MAX_LEN)
{
WriteError("Error, line %ld: line is too long.\n"
" Operation aborted.\n",CurrentLine);
return(FALSE);
}
if (Character=='.')
{
Periods++;
}
else if (Character=='/')
{
Slashes++;
}
else if (Character=='_')
{
Underscores++;
}
else if ((Character>='A' && Character<='Z') || (Character>='0' && Character<='9'))
{
UppercaseLetters++;
}
Character=fgetc();
}
if (WordBuffer[Index-1]=='.')
{
Index--;
BufferIndex--;
Character='.';
}
if (Character=='(')
{
StructMode=FALSE;
}
WordBuffer[Index]='\0';
if (StructMode)
{
if (AnyNode=(struct AnyNode *)SearchNameCase(StructArray,WordBuffer))
LinkStructure: {
if (!WriteSomething("@{\x22%s\x22 LINK \x22%s/MAIN\x22 %ld}",WordBuffer,((struct StructNode *)AnyNode)->File,((struct StructNode *)AnyNode)->Line)) return(FALSE);
IncludeLinks++;
WordBuffer[0]='\0';
Index=0;
}
StructMode=FALSE;
}
if (Index>=2)
{
if (!strcmp(WordBuffer,"struct"))
{
StructMode=TRUE;
if (SeeAlsoMode==1) SeeAlsoMode=0;
}
else if (!Stricmp(WordBuffer+Index-2,".h"))
{
if (SeeAlsoMode==1) SeeAlsoMode=0;
if (AnyNode=(struct AnyNode *)SearchNameNoCase(IncludeFileArray,WordBuffer))
{
if (!WriteSomething("@{\x22%s\x22 LINK \x22%s/MAIN\x22 0}",WordBuffer,((struct FileNode *)AnyNode)->Node.Name)) return(FALSE);
IncludeLinks++;
WordBuffer[0]='\0';
}
}
else if (Periods==1 && Slashes==1)
{
if (SeeAlsoMode==1) SeeAlsoMode=0;
if (AnyNode=SearchNameCase(AutodocArray,WordBuffer))
LinkAutodoc: {
if (CurrentAutodocNode!=(struct AutodocNode *)AnyNode)
{
if (!(Temp=FindSlash(((struct AutodocNode *)AnyNode)->Node.Name)))
{
WriteError("INTERNAL ERROR #1\n");
return(FALSE);
}
if (Character=='(')
{
if (fgetc()==')')
{
WordBuffer[Index++]='(';
WordBuffer[Index++]=')';
WordBuffer[Index]='\0';
Character=-2;
}
else
{
BufferIndex--;
}
}
if (!strcmp(HypertextFilename,((struct AutodocNode *)AnyNode)->File))
{
if (!WriteSomething("@{\x22%s\x22 LINK \x22%s\x22 0}",WordBuffer,Temp+1)) return(FALSE);
InternalLinks++;
WordBuffer[0]='\0';
}
else
{
if (!WriteSomething("@{\x22%s\x22 LINK \x22%s%s\x22 0}",WordBuffer,((struct AutodocNode *)AnyNode)->File,Temp)) return(FALSE);
ExternalLinks++;
WordBuffer[0]='\0';
}
}
}
else
{
Temp=WordBuffer+strlen(WordBuffer);
stpcpy(Temp,"A");
if (AnyNode=SearchNameCase(AutodocArray,WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
stpcpy(Temp,"Tags");
if (AnyNode=SearchNameCase(AutodocArray,WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
stpcpy(Temp,"TagList");
if (AnyNode=SearchNameCase(AutodocArray,WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
*Temp='\0';
}
}
else if (!strcmp(WordBuffer,"SEE") && !SeeAlsoMode)
{
SeeAlsoMode=1;
}
else if (SeeAlsoMode==1)
{
if (!strcmp(WordBuffer,"ALSO"))
{
SeeAlsoMode=2;
}
else
{
SeeAlsoMode=0;
}
}
else if (Character=='(' || UppercaseLetters+Underscores>1)
{
if (AnyNode=(struct AnyNode *)SearchShortAutodoc(WordBuffer))
{
goto LinkAutodoc;
}
if (AnyNode=(struct AnyNode *)SearchNameCase(StructArray,WordBuffer))
{
goto LinkStructure;
}
if (AnyNode=(struct AnyNode *)SearchNameCase(TypedefArray,WordBuffer))
{
goto LinkStructure;
}
Temp=WordBuffer+strlen(WordBuffer);
stpcpy(Temp,"A");
if (AnyNode=SearchShortAutodoc(WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
stpcpy(Temp,"Tags");
if (AnyNode=SearchShortAutodoc(WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
stpcpy(Temp,"TagList");
if (AnyNode=SearchShortAutodoc(WordBuffer))
{
*Temp='\0';
goto LinkAutodoc;
}
*Temp='\0';
}
else if (SeeAlsoMode==2)
{
if ((AnyNode=(struct AnyNode *)SearchShortAutodoc(WordBuffer)) && AnyNode!=(struct AnyNode *)CurrentAutodocNode)
{
goto LinkAutodoc;
}
}
}
}
if (WordBuffer[0] && !WriteSomething("%s",WordBuffer)) return(FALSE);
switch(Character)
{
case -1: if (IoErr())
{
return(FALSE);
}
case '\x0c': return(WriteSomething("@ENDNODE\n\n"));
case '\n': for (Index=0; Index<BufferIndex-1; Index++)
{
if (Buffer[Index]!=' ' && Buffer[Index]!='\t')
{
goto HandleSpace;
}
}
SeeAlsoMode=0;
goto HandleSpace;
default: StructMode=FALSE;
if (SeeAlsoMode==1) SeeAlsoMode=0;
HandleSpace: case ' ':
case '\t': if (Character!=-2 && !WriteSomething("%lc",Character)) return(FALSE);
break;
}
}
}
/***********************************************/
static BOOL ConvertAutodoc(void)
{
char *AutodocName;
long AutodocNameLen;
CurrentLine=0;
AutodocNameLen=500;
while (TRUE)
{
if (AutodocName=AllocVec(AutodocNameLen,0))
{
if (NameFromFH(CurrentFile,AutodocName,AutodocNameLen))