home *** CD-ROM | disk | FTP | other *** search
- {
-
- Converts Ralf Brown's Interrupt List to .NG Compilable Source Files
-
- Version 1.13
-
- (c) Copyright 1995, Michael Gallias
-
- Target: Real
-
- }
-
-
- Program RBNG;
-
- {$F-} {$O-} {$A+} {$G-}
- {$V-} {$B-} {$X-} {$N+} {$E+}
-
- {$M 8192,0,0}
-
- Uses PasStr,CRT;
-
- Type
- ConvertType = Array [1..100] of
- Record
- IfThis :String[10];
- ThenThis:String[10];
- End;
-
- Var
- BatchJob,
- MenuLink,
- F,G :Text;
- L :String;
- SeeAlsoLine :String;
-
- IntFiles :Array[0..255] of String[12];
-
- Procedure Pad(Total,WithChar:Byte);
-
- Begin
- For Total:=1 to Total do {As many times as requested}
- Write(Chr(WithChar)); {write the char}
- End; {Pad}
-
- Procedure EditString(X,Y,MaxLets:Byte;Upper:Boolean;Var MainStr:String);
-
- Var
- Ins :Boolean; {Boolean for the Insert Key Status}
- C :Char; {Current Character}
- CurXPos,
- Count :Byte; {Number Of Chars In String}
-
- Begin
- Ins:=False; {The Insert key has not yet been pressed}
- CurXPos:=1; {Current Relative X Position+1}
- GotoXY(X,Y);
- UnPadVar(MainStr,MainStr);
- If Length(MainStr)>MaxLets Then
- MainStr:=Copy(MainStr,1,MaxLets);
- Write(MainStr);
- Pad(MaxLets-Length(MainStr),32);
- Count:=Length(MainStr)+1; {How many letters in the string+1}
-
- Repeat {Repeat Until [Return] is Pressed}
- GotoXY(X+CurXPos-1,Y); {Goto the Requested Area}
- If Upper Then
- C:=UpCase(ReadKey)
- Else
- C:=ReadKey;
-
- If C=Chr(0) Then {Check for a cursor key}
- Begin
- C:=ReadKey; {Which cursor key} {Numeric Keypad Value}
- If (C='O') Then CurXPos:=Count; {1}
- If (C='P') And (CurXPos>=3) Then Dec(CurXPos,2); {2}
- If (C='Q') And (CurXPos>=4) Then Dec(CurXPos,3); {3}
- If (C='K') And (CurXPos>1) Then Dec(CurXPos); {4}
- If (C='M') And (CurXPos<Count) Then Inc(CurXPos); {6}
- If (C='G') Then CurXPos:=1; {7}
- If (C='H') And (CurXPos<=Count-2) Then Inc(CurXPos,2); {8}
- If (C='I') And (CurXPos<=Count-3) Then Inc(CurXPos,3); {9}
- If (C=#7 ) Then MainStr[0]:=Chr(CurXPos-1); {Shift-Del}
- If (C='S') And (Count>1) Then {Del}
- Begin
- Delete(MainStr,CurXPos,1);
- GotoXY(X,Y);
- Write(MainStr,' ');
- Dec(Count);
- GotoXY(X-1+CurXPos,Y);
- End;
- If (C='R') Then {Ins}
- Begin
- Ins:=Not Ins;
- End;
- GotoXY(X-1+CurXPos,Y);
- End {End Extended Key}
- Else
- Begin
-
- If (C=#17) Then {^Q}
- Begin
- C:=ReadKey;
- If C=#0 Then
- C:=ReadKey
- Else
- If C in ['y','Y',#25] Then
- Begin
- MainStr[0]:=Chr(CurXPos-1);
- Count:=CurXPos;
- GotoXY(X,Y);
- Write(MainStr);
- Pad(MaxLets-Length(MainStr),32);
- End;
- End
- Else
- If (C=#27) Then
- Begin
- GotoXY(X,Y);
- Pad(MaxLets,32);
- MainStr:='';
- C:=#13;
- End
- Else
- If (C=#8) Then {Was BackSpace Presssed?}
- Begin
- If (CurXPos>1) Then {Can I BackSpace?}
- Begin
- Delete(MainStr,CurXPos-1,1); {Delete the char}
- GotoXY(X,Y);
- Write(MainStr,' '); {Redisplay the String}
- Dec(Count); {One less char}
- Dec(CurXPos); {Move Back}
- GotoXY(X-1+CurXPos,Y); {Goto Position}
- End; {End 'Can I BackSpace?'}
- End {End 'Was BackSpace Pressed?'}
- Else {No Not BackSpace - A Normal Letter}
- If (CurXPos<=MaxLets) And (C<>#13) Then {Is there Space?}
- Begin
- If Ins Or (CurXPos>=Count) Then {Must I Insert the Char?}
- Begin
- If Count<=MaxLets Then
- Begin
- Insert(C,MainStr,CurXPos); {Insert the Char}
- Inc(Count); {Add 1 to Count}
- Inc(CurXPos); {Move Cursor}
- End; {End Check for Space in String}
- End {End Check to see if Ins was True}
- Else {No, Do not Insert, Overwrite}
- Begin
- MainStr[CurXPos]:=C; {Overwrite char}
- Inc(CurXPos); {Move Cursor}
- End; {End Insert / Overwrite}
-
- If CurXPos<Count Then {If the char was Inserted, Rewrite}
- Begin {the entire String to the screen}
- GotoXY(X,Y);
- Write(MainStr);
- GotoXY(X-1+CurXPos,Y);
- End {End Rewrite the String to the screen}
- Else {Need Not Rewrite the entire String}
- Write(C); {Just Display the new char}
- End;
- End; {End Area which accepts a BackSpace or a Letter}
- Until C=#13;
- End;
-
- Function HexToDec(Hex:String):Word;
-
- Var
- Temp :Word;
-
- Begin
- Temp:=0;
- UpperCase(Hex,Hex);
- If Hex[1] in ['0'..'9'] Then Temp:=Temp + (Ord(Hex[1])-Ord('0'))*16;
- If Hex[1] in ['A'..'F'] Then Temp:=Temp + (Ord(Hex[1])-Ord('A')+10)*16;
- If Hex[2] in ['0'..'9'] Then Temp:=Temp + Ord(Hex[2])-Ord('0');
- If Hex[2] in ['A'..'F'] Then Temp:=Temp + Ord(Hex[2])-Ord('A')+10;
- HexToDec:=Temp;
- End;
-
- Procedure CheckIntNumber(Var L:String;Var NewNumber:Boolean;
- Var IntComment:String;Var IntCount:Word);
-
- Const
- LastInt :Word = 65000;
-
- Var
- DecStr :String[4];
- DecNum :Word;
-
- Begin
- NewNumber:=False;
- IntComment:='';
- If Copy(L,1,4)='Int ' Then
- Begin
- Inc(IntCount);
- L[5]:=UpCase(L[5]);
- L[6]:=UpCase(L[6]);
- DecNum:=HexToDec(Copy(L,5,2));
- If (DecNum<>LastInt) And (DecNum<=240) And ((DecNum>=16) Or (DecNum=0)) Then
- Begin
- IntCount:=1;
- LastInt:=DecNum;
- Str(DecNum:3,DecStr);
- IntComment:='Interrupt '+Copy(L,5,2)+'h'+' ('+DecStr+')';
- If DecNum=240 Then IntComment:=IntComment+' ^Bto^B FFh (255)';
- If DecNum= 0 Then IntComment:=IntComment+' ^Bto^B 0Fh ( 15)';
- NewNumber:=True;
- End;
- If (DecNum>240) Or ((DecNum<16) And (DecNum<>0)) Then IntComment:='$$NO$$';
- End;
- If Copy(L,1,19)='Please Redistribute' Then
- Begin
- IntComment:='Final Comments From Ralf';
- NewNumber:=True;
- End;
- End;
-
- Function NGOFName(FName:String):String;
- Begin
- NGOFName:=Copy(FName,1,Pos('.',FName))+'NGO';
- End;
-
- Procedure NewMenuItem(Comment,FName:String);
- Begin
- WriteLn(MenuLink,' '+Comment+' '+NGOFName(FName));
- End;
-
- Procedure NewBatchItem(Command:String);
- Begin
- WriteLn(BatchJob,Command);
- End;
-
- Function NextOutputFileName:String;
-
- Const
- Total :Word = 0;
-
- Var
- Temp :String[3];
-
- Begin
- Inc(Total);
- Str(Total,Temp);
- FormatVar(Temp,Temp,3,RightText);
- SpacesToZeros(Temp,Temp);
- NextOutputFileName:='RB'+Temp+'.';
- End;
-
- Procedure I(Var S:String);
- Begin
- ReadLn(F,S);
- End;
-
- Procedure O(S:String);
- Begin
- WriteLn(G,S);
- End;
-
- Procedure OLn;
- Begin
- WriteLn(G);
- End;
-
- Procedure BoldEtc(StIn:String;Var StOut:String);
-
- Var
- SpPos:Byte;
-
- Begin
- StOut:=StIn;
-
- SpPos:=Pos('Desc:',StOut);
- If SpPos>0 Then
- Begin
- Delete(StOut,SpPos,5);
- Insert('^BDesc:^B',StOut,SpPos);
- End;
-
- SpPos:=Pos('Note:',StOut);
- If SpPos>0 Then
- Begin
- OLn;
- Delete(StOut,SpPos,5);
- Insert('^BNote:^B',StOut,SpPos);
- End;
-
- SpPos:=Pos('SeeAlso:',StOut);
- If SpPos>0 Then
- Begin
- OLn;
- Delete(StOut,SpPos,8);
- Insert('^BSee Also:^B',StOut,SpPos);
- End;
-
- SpPos:=Pos('Return:',StOut);
- If SpPos>0 Then
- Begin
- OLn;
- Delete(StOut,SpPos,7);
- Insert('^BReturn:^B',StOut,SpPos);
- End;
-
- SpPos:=Pos('Notes:',StOut);
- If SpPos>0 Then
- Begin
- OLn;
- Delete(StOut,SpPos,6);
- Insert('^BNotes:^B',StOut,SpPos);
- End;
- End;
-
- Procedure TabTo(StIn:String;Var StOut:String;TabSize:Byte);
-
- Var
- SpPos:Byte;
- Spc :String;
-
- Begin
- StOut:=StIn;
-
- Repeat
- SpPos:=Pos(#9,StOut);
- If SpPos>0 Then
- Begin
- Delete(StOut,SpPos,1);
- PadVar('',Spc,TabSize - (SpPos Mod TabSize));
- Insert(Spc,StOut,SpPos);
- End;
- Until SpPos=0;
- End;
-
- Procedure LoadConvertList(FromFile:String;Var CList:ConvertType);
-
- Var
- F :Text;
- Cnt :Word;
- St :String;
- SpPos :Byte;
-
- Begin
- FillChar(CList,SizeOf(CList),0);
- Cnt:=0;
- Assign(F,FromFile);
- Reset(F);
- If IOResult>0 Then Exit;
- While (Not EOF(F)) And (Cnt<99) do
- Begin
- Inc(Cnt);
- ReadLn(F,St);
- SpPos:=Pos('|',St);
- If SpPos>0 Then
- Begin
- If SpPos>11 Then SpPos:=11;
- CList[Cnt].IfThis:=Copy(St,1,SpPos-1);
- Delete(St,1,SpPos);
- CList[Cnt].ThenThis:=Copy(St,1,10);
- End;
- End;
- Close(F);
- End;
-
- Var
- UserStyle2 :String[20]; {Sub & Fn}
- UserStyle1 :String[20]; {Fn}
- UserStyle0 :String[20]; {Niether}
- PercentFn :String[2]; {Function Number}
- PercentSubFn :String[2]; {Sub Function Number}
- OtherCode :String[9]; {Code after the Interrupt Number}
-
- Procedure UserModify(Var S:String);
-
- Var
- y, z :Byte;
- c :Byte;
- Style :String[20];
-
- Begin
- If (PercentFn<>' ') And (PercentSubFn<>' ') Then
- Style:=UserStyle2
- Else
- If PercentFn<>' ' Then
- Style:=UserStyle1
- Else
- Style:=UserStyle0;
-
- y:=Pos('%f',Style);
- z:=Pos('%s',Style);
- c:=Pos('%c',Style);
-
- If (y>0) Then
- Begin
- Delete(Style,y,2);
- Insert(PercentFn,Style,y);
- End;
-
- If (z>0) Then
- Begin
- Delete(Style,z,2);
- Insert(PercentSubFn,Style,z);
- End;
-
- If (c>0) Then
- Begin
- Delete(Style,c,2);
- Insert(OtherCode,Style,c);
- End;
-
- S:=S+Style;
- End;
-
- Const
- TabSize = 4;
- ConvertFile = 'CONVERT.TXT';
- MainRBFile = 'RBINT';
- BatchFile = 'CRB.BAT';
- NGC = 'CALL NGC';
- NGML = 'CALL NGML';
-
- Var
- IntCount :Word;
- Cnt :LongInt;
- CodeLetter,
- C :Char;
- TempLine,
- LastIntComment,
- IntComment :String;
- RBDir :String;
- OutDir :String;
- NewNumber :Boolean;
- IntLetter :Char;
- IntListFile,
- FName :String[12];
- LongCount :Word;
- CList :ConvertType;
- StopProc :Boolean;
-
- Procedure CapWords(StIn:String;Var StOut:String);
-
- Var
- X :Word;
- SpPos :Byte;
-
- Begin
- PasStr.CapWords(StIn,StOut);
- X:=1;
- While CList[X].IfThis<>'' do
- Begin
- SpPos:=Pos(CList[X].IfThis,StOut);
- If SpPos>0 Then
- Begin
- Delete(StOut,SpPos,Length(CList[X].IfThis));
- Insert(CList[X].ThenThis,StOut,SpPos);
- End;
- Inc(X);
- End;
- End;
-
- Var
- LastWasBlank :Boolean; {For CMOS Convert}
-
- Begin
- PercentFn:=' ';
- PercentSubFn:=' ';
- SeeAlsoLine:='';
-
- RBDir:='';
- OutDir:='';
- StopProc:=False;
- IntLetter:='A';
-
- ClrScr;
- WriteLn('Ralf Brown''s Text Format to .NG Source Format Version 1.16');
- WriteLn('Copyright (c) Michael Gallias, 1995');
- WriteLn;
- WriteLn('Note that this program does NOT convert directly to .NG format, it converts');
- WriteLn('the files to a new text format so that they can be compiled with the Norton');
- WriteLn('Guides Compiler. You thus require the Norton Guides Compiler to convert the');
- WriteLn('files. If you do not have this program, Ralf''s list is available in .NG');
- WriteLn('format already. It should be at the same FTP site where you obtained this');
- WriteLn('file.');
- WriteLn;
- WriteLn('Also note that the process requires 16 megabytes of free disk space.');
- WriteLn('The program will run about 10 times faster if you use the SmartDrv write cache.');
- WriteLn('For further details, please see the documentation.');
- WriteLn;
- WriteLn('If you don''t want GLOSSARY.LST, PORTS.LST, 86BUGS.LST, CMOS.LST and MEMORY.LST');
- WriteLn('included, delete them before running this program and they will not be included');
- WriteLn('in the .NG file.');
- WriteLn;
- WriteLn('Copy your CONVERT.TXT file to the directory with the INTERUPT.? files.');
- WriteLn;
- WriteLn('* This program has only been tested on release 46, but it might work on other');
- WriteLn(' releases too. If you find this program useful, please send me a postcard.');
- WriteLn;
- Write('Do you want to continue (Y)es (N)o ?');
- C:=UpCase(ReadKey);
- If C<>'Y' Then Halt;
- ClrScr;
-
- WriteLn('Specify the directory where this program and the original text files');
- WriteLn('are to be found.');
- WriteLn;
- EditString(1,WhereY,60,True,RBDir);
- If Length(RBDir)>2 Then
- If RBDir[Length(RBDir)]<>'\' Then RBDir:=RBDir+'\';
- WriteLn;
- WriteLn;
- WriteLn;
- WriteLn('Specify the output directory for the new text files which need compiling.');
- WriteLn;
- EditString(1,WhereY,60,True,OutDir);
- If Length(OutDir)>2 Then
- If OutDir[Length(OutDir)]<>'\' Then OutDir:=OutDir+'\';
- ClrScr;
- WriteLn('Select a style for the headings:');
- WriteLn;
- WriteLn(' xx is the Interrpt Number, yy the Function Number, zz is the Subfunction');
- WriteLn(' Number and cc are the code letters found after the Interrupt Number in');
- WriteLn(' Ralf''s List. Format 2 is how it appears in Ralf''s List.');
- WriteLn;
- WriteLn(' 1. Int xx Description');
- WriteLn(' 2. Int xx cc - Description');
- WriteLn(' 3. Int xx Fn yyzz cc - Description');
- WriteLn(' 4. Int xx, yyzz (cc) - Description');
- WriteLn(' 5. Int xxyyzz cc - Description');
- WriteLn;
- WriteLn(' U. User defined style');
- WriteLn;
- Repeat
- C:=UpCase(ReadKey);
- Until C in ['1','2','3','4','5','U'];
- If C<>'U' Then
- Case C Of
- '2': Begin
- UserStyle2:=' %c -';
- UserStyle1:=' %c -';
- UserStyle0:=' %c -';
- End;
- '3': Begin
- UserStyle2:=' Fn %f%s %c -';
- UserStyle1:=' Fn %f %c -';
- UserStyle0:=' %c -';
- End;
- '4': Begin
- UserStyle2:=', %f%s (%c) -';
- UserStyle1:=', %f (%c) -';
- UserStyle0:=' (%c) -';
- End;
- '5': Begin
- UserStyle2:='%f%s %c -';
- UserStyle1:='%f %c -';
- UserStyle0:=' %c -';
- End;
- Else
- Begin
- UserStyle2:='';
- UserStyle1:='';
- UserStyle0:='';
- End;
- End
- Else
- Begin
- ClrScr;
- WriteLn('Examples (don''t type the quotes):');
- WriteLn;
- WriteLn(' Int xx Description ""');
- WriteLn(' Int xx - Description " -"');
- WriteLn(' Int xx Fn yyzz cc - Description " Fn %f%s %c -"');
- WriteLn(' Int xx, yyzz (cc) - Description ", %f%s (%c) -"');
- WriteLn(' Int xx, Fn yy, SubFn zz -> Description "Fn %f, SubFn %s ->"');
- WriteLn;
- WriteLn('Type in the style you would like, %f is the Function number, %s is the');
- WriteLn('Subfunction number. What you type will be appended to the Int xx and');
- WriteLn('then a space followed by the description will follow it.');
- WriteLn;
- WriteLn('Note that when you type the %f and %s, they must be lower case!');
- WriteLn;
- WriteLn('Assuming a function and subfunction number do exist, enter the format:');
- WriteLn;
- Write('Int xx');
- EditString(WhereX,WhereY,18,False,UserStyle2);
- WriteLn;
- WriteLn;
- WriteLn('Assuming a function number do exists, but no subfunction, enter the format:');
- WriteLn;
- Write('Int xx');
- EditString(WhereX,WhereY,18,False,UserStyle1);
- WriteLn;
- WriteLn;
- WriteLn('Assuming no function and subfunction numbers exist, enter the format:');
- WriteLn;
- Write('Int xx');
- EditString(WhereX,WhereY,18,False,UserStyle0);
- End;
- ClrScr;
- WriteLn;
- WriteLn;
- WriteLn;
- WriteLn;
- WriteLn('Press any key to start the process or [Esc] to quit to DOS.');
- C:=ReadKey;
- If C=#27 Then Halt;
- ClrScr;
- WriteLn('Converting Ralf''s list:');
- WriteLn;
-
- LoadConvertList(RBDir+ConvertFile,CList);
-
- Assign(MenuLink,OutDir+MainRBFile);
- Rewrite(MenuLink);
- WriteLn(MenuLink,'!Name: Ralf Brown');
- WriteLn(MenuLink,'!Credits: Ralf Brown''s Interrupt List Converted by Michael Gallias');
- WriteLn(MenuLink,'!Menu: Lists');
-
- Assign(BatchJob,OutDir+BatchFile);
- Rewrite(BatchJob);
- WriteLn(BatchJob,'@Echo Off');
-
- Assign(F,RBDir+'INTERRUP.'+IntLetter);
- Reset(F);
-
- FName:=NextOutputFileName;
- NewBatchItem(NGC+' '+FName);
- NewMenuItem('Comments',FName);
- Assign(G,OutDir+FName);
- Rewrite(G);
-
- O('!Short: Credits');
- OLn;
- O('^UCredits^U');
- OLn;
- Repeat
- I(L);
- If Copy(L,1,5)<>'-----' Then O(L);
- Until Copy(L,1,5)='-----';
- OLn;
- O('This list was converted from the released text format to the');
- O('Norton Guides / Expert Help Popup format by Michael Gallias.');
- OLn;
- O('Michael Gallias');
- O('P O Box 51231');
- O('Musgrave Road');
- O('4062');
- O('South Africa');
- OLn;
- O('gallias@iafrica.com');
- OLn;
-
- Cnt:=1;
- Repeat
- Str(Cnt,L);
- L:='Ralf''s Comment '+L;
- O('!Short: '+L);
- OLn;
- O('^U'+L+'^U');
- OLn;
- Repeat
- I(L);
- If Copy(L,1,5)<>'-----' Then O(L);
- Until Copy(L,1,5)='-----';
- OLn;
- Inc(Cnt);
- CodeLetter:=L[9];
- Delete(L,1,10);
- Until L='00---------------------------------';
-
- Close(G);
-
- FName:=NextOutputFileName;
- NewMenuItem('Interrupts',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
- WriteLn;
-
- Cnt:=1;
- IntCount:=1;
- Repeat
- I(L);
- If Copy(L,1,3)='INT' Then
- Begin
- TempLine:=Copy(L,1,6); {INT xx}
- TempLine[2]:='n';
- TempLine[3]:='t'; {Int xx}
- Delete(L,1,6); {Delete 'INT xx' Part From L}
- OtherCode:=Copy(L,1,Pos('-',L)); {Get Code Letters and the '-'}
- Delete(L,1,Length(OtherCode)); {Get the int. description into L}
- Delete(OtherCode,Length(OtherCode)-1,2); {Get rid of the ' -'}
- LowerCase(L,L);
- CapWords(L,L); {Set Caps Nicely}
- UserModify(TempLine); {Append user Fn and SubFn style}
- L:=TempLine+L; {Append description}
- End
- Else
- Begin
- LowerCase(L,L);
- CapWords(L,L);
- End;
-
- CheckIntNumber(L,NewNumber,IntComment,IntCount);
-
- If (NewNumber) And (IntComment<>'$$NO$$') Then
- Begin
- LastIntComment:=IntComment;
- Close(G);
- Assign(G,OutDir+IntListFile);
- Append(G);
- FName:=NextOutputFileName;
- O('!Short: '+IntComment);
- O('!File:'+NGOFName(FName));
- OLn;
- Close(G);
- NewBatchItem(NGC+' '+FName);
- Assign(G,OutDir+FName);
- Rewrite(G);
- End;
-
- If IntCount>200 Then
- Begin
- IntCount:=1;
- Close(G);
- Assign(G,OutDir+IntListFile);
- Append(G);
- FName:=NextOutputFileName;
- O('!Short: '+LastIntComment+' ^B(Cont.)^B');
- O('!File:'+NGOFName(FName));
- OLn;
- Close(G);
- NewBatchItem(NGC+' '+FName);
- Assign(G,OutDir+FName);
- Rewrite(G);
- End;
-
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- OLn;
- If Copy(L,1,3)='Int' Then
- Begin
- TempLine:=Copy(L,1,73);
- FormatVar(TempLine,TempLine,73,LeftText);
- TempLine:='^U'+TempLine+'^U [^B'+CodeLetter+'^B]';
- End
- Else
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- IntComment:=L;
- LongCount:=0;
- Repeat
- I(L);
- BoldEtc(L,L);
- TabTo(L,L,TabSize);
- Inc(LongCount,Length(L));
-
- If (LongCount>11500) And (Copy(L,1,5)<>'-----') Then
- Begin
- Inc(IntCount);
- LongCount:=0;
- OLn;
- O('^B.NG limit reached, continued in next section...^B');
- OLn;
- O('!Short: '+IntComment+' ^B(Cont.)^B');
- OLn;
- O('^U'+IntComment+' ^B(Cont.)^B');
- OLn;
- End;
-
- If Copy(L,1,5)<>'-----' Then
- O(L);
-
- Until (Copy(L,1,5)='-----') Or (EOF(F));
- CodeLetter:=L[9];
- PercentFn:=Copy(L,13,2);
- PercentSubFn:=Copy(L,15,2);
- If PercentFn='--' Then PercentFn:=' ';
- If PercentSubFn='--' Then PercentSubFn:=' ';
- OLn;
- Inc(Cnt);
-
- If EOF(F) Then
- Begin
- Close(F);
- IntLetter:=Chr(Ord(IntLetter)+1);
- Assign(F,RBDir+'INTERRUP.'+IntLetter);
- Reset(F);
- If IOResult=0 Then
- Begin
- ReadLn(F);
- ReadLn(F);
- ReadLn(F);
- End
- Else
- StopProc:=True;
- End;
-
- Until StopProc;
-
- Close(G);
-
- {End Interrupts}
-
- {Check For Glossary}
-
- Assign(F,RBDir+'GLOSSARY.LST');
- Reset(F);
- If IOResult=0 Then
- Begin
- I(L);
- I(L);
- I(L);
- I(L);
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('Glossary',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
-
- Repeat
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- OLn;
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- Repeat
- I(L);
- BoldEtc(L,L);
- TabTo(L,L,TabSize);
- If L<>'' Then O(L);
- Until (L='') Or (EOF(F));
- OLn;
- If Not EOF(F) Then I(L);
- Inc(Cnt);
- Until EOF(F);
-
- Close(F);
- Close(G);
- End;
-
- {End Check For Glossary}
-
- {Check For Low Memory}
-
- Assign(F,RBDir+'MEMORY.LST');
- Reset(F);
- If IOResult=0 Then
- Begin
- I(L);
- I(L);
- I(L);
- I(L);
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('Memory',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
-
- Repeat
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- If (L[Length(L)]=':') Then Delete(L,Length(L),1);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- LastIntComment:=Copy(L,1,68);
- OLn;
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- I(L);
- IntCount:=1;
- Repeat
- BoldEtc(L,L);
- If L<>'' Then O(L);
- If Not EOF(F) Then I(L);
- TabTo(L,L,TabSize);
-
- {Check for >12kb entries}
-
- Inc(IntCount);
- If IntCount>200 Then
- Begin
- O('!Short: '+LastIntComment+' ^B(Cont.)^B');
- OLn;
- TempLine:='^U'+LastIntComment+' ^B(Cont.)^B';
- O(TempLine);
- OLn;
- IntCount:=1;
- End;
-
- Until (Copy(L,1,9)='Format of') Or (EOF(F));
- OLn;
- Inc(Cnt);
- Until EOF(F);
-
- Close(F);
- Close(G);
- End;
-
- {End Check For Low Memory}
-
- {Check For Ports}
-
- Assign(F,RBDir+'PORTS.LST');
- Reset(F);
- If IOResult=0 Then
- Begin
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('Ports',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
-
- Repeat
-
- If Cnt>200 Then {File too long for one NGO file}
- Begin
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('More Ports',FName);
- IntListFile:=FName;
- Close(G);
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
- End;
-
- Repeat
- I(L)
- Until L<>'';
-
- TabTo(L,L,TabSize);
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- OLn;
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- I(L);
- Repeat
- BoldEtc(L,L);
- If Copy(L,1,9)<>'---------' Then O(L);
- If Not EOF(F) Then I(L);
- TabTo(L,L,TabSize);
- Until (Copy(L,1,9)='---------') Or (EOF(F));
- OLn;
- Inc(Cnt);
- Until EOF(F);
-
- Close(F);
- Close(G);
- End;
-
- {End Check For Ports}
-
- {Check For CMOS}
-
- Assign(F,RBDir+'CMOS.LST');
- Reset(F);
- If IOResult=0 Then
- Begin
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('CMOS',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
-
- I(L);
- While (L='') And Not EOF(F) do
- I(L);
-
- TabTo(L,L,TabSize);
- UnPadVar(L,L);
- Repeat
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- LastIntComment:=Copy(L,1,68);
- OLn;
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- If L='' Then LastWasBlank:=True Else LastWasBlank:=False;
- I(L);
- IntCount:=0;
- Repeat
- Inc(IntCount);
- If (IntCount>250) And LastWasBlank And (Copy(L,1,7)<>' ') Then
- Begin
- O('!Short: '+LastIntComment+' ^B(Cont.)^B');
- OLn;
- TempLine:='^U'+LastIntComment+' ^B(Cont.)^B';
- O(TempLine);
- OLn;
- IntCount:=1;
- End;
-
- BoldEtc(L,L);
- If Not ((Copy(L,1,7)=' ') And (LastWasBlank)) Then O(L);
- If L='' Then LastWasBlank:=True Else LastWasBlank:=False;
- If (Not EOF(F)) And (Not ((Copy(L,1,7)=' ') And (LastWasBlank))) Then I(L);
- TabTo(L,L,TabSize);
- Until ((Copy(L,1,7)=' ') And (LastWasBlank)) Or (EOF(F));
- If Not EOF(F) Then UnPadVar(L,L);
- OLn;
- Inc(Cnt);
- Until EOF(F);
-
- Close(F);
- Close(G);
- End;
-
- {End Check For CMOS}
-
- {Check For 86BUGS}
-
- Assign(F,RBDir+'86BUGS.LST');
- Reset(F);
- If IOResult=0 Then
- Begin
- Cnt:=1;
- FName:=NextOutputFileName;
- NewMenuItem('86 Bugs',FName);
- IntListFile:=FName;
- Assign(G,OutDir+IntListFile);
- Rewrite(G);
- OLn;
- NewBatchItem(NGC+' '+IntListFile);
-
- I(L);
- Repeat
- While (L='') And Not EOF(F) do
- I(L);
-
- GotoXY(1,WhereY-1);
- Write(' ');
- GotoXY(1,WhereY);
- WriteLn(Cnt,' ',Copy(L,1,60));
- O('!Short: '+Copy(L,1,76));
- OLn;
- TempLine:='^U'+Copy(L,1,76)+'^U';
- O(TempLine);
- OLn;
- I(L);
- Repeat
- BoldEtc(L,L);
- If Pos(':',Copy(L,1,9))=0 Then O(L);
- If Not EOF(F) Then I(L);
- TabTo(L,L,TabSize);
- Until (Pos(':',Copy(L,1,9))>0) Or (EOF(F));
- OLn;
- Inc(Cnt);
- Until EOF(F);
-
- Close(F);
- Close(G);
- End;
-
- {End Check For 86BUGS}
-
-
- NewBatchItem(NGML+' '+MainRBFile);
-
- Close(MenuLink);
- Close(BatchJob);
-
- ClrScr;
- WriteLn('Complete.');
- WriteLn;
- WriteLn('Now, go to the output directory and type CRB to compile the database.');
- WriteLn('The database will be around 4 megabytes when complete.');
- WriteLn;
- WriteLn('Make sure the NGC (Norton Guides Compiler) and the NGML (Norton Guides');
- WriteLn('Menu Linker) programs are on the path (or setup a batch file).');
- WriteLn;
- End.
-