mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-01-30 16:41:05 +08:00
Fix documentation building for non-srcdir builds. Still bugs in .ps implementation.
Add Mach-O documentation.
This commit is contained in:
parent
a5f0000db0
commit
1e0de6e913
@ -24,6 +24,10 @@ PS2PDF = ps2pdf -dOptimize=true # Part of GhostScript
|
||||
SRCS = nasmdoc.src
|
||||
OUT = nasm.info nasmdoc.ps nasmdoc.pdf
|
||||
|
||||
# exports
|
||||
export srcdir
|
||||
export PERL
|
||||
|
||||
all: $(OUT)
|
||||
|
||||
os2: nasm.inf
|
||||
@ -37,12 +41,12 @@ nasmdoc.dip: nasmdoc.src rdsrc.pl
|
||||
nasmdoc.texi: nasmdoc.dip
|
||||
: Generated by side effect
|
||||
|
||||
nasmdoc.ps: nasmdoc.dip nasmlogo.eps ../version genpsdriver.pl \
|
||||
nasmdoc.ps: nasmdoc.dip nasmlogo.eps $(srcdir)/../version genpsdriver.pl \
|
||||
genps.pl psfonts.ph pswidth.ph head.ps
|
||||
$(PERL) $(srcdir)/genpsdriver.pl > nasmdoc.ps
|
||||
|
||||
nasmdoc.pdf: nasmdoc.ps
|
||||
$(PS2PDF) nasmdoc.ps nasmdoc.pdf
|
||||
$(PS2PDF) nasmdoc.ps
|
||||
|
||||
nasm.info: info/nasm.info
|
||||
|
||||
|
35
doc/genps.pl
35
doc/genps.pl
@ -3,6 +3,9 @@
|
||||
# Format the documentation as PostScript
|
||||
#
|
||||
|
||||
use Env;
|
||||
use lib $srcdir;
|
||||
|
||||
require 'psfonts.ph'; # The fonts we want to use
|
||||
require 'pswidth.ph'; # PostScript string width
|
||||
|
||||
@ -78,7 +81,7 @@ while ( $arg = shift(@ARGV) ) {
|
||||
|
||||
#
|
||||
# Document formatting parameters
|
||||
#
|
||||
#
|
||||
$paraskip = 6; # Space between paragraphs
|
||||
$chapstart = 30; # Space before a chapter heading
|
||||
$chapskip = 24; # Space after a chapter heading
|
||||
@ -204,7 +207,7 @@ sub int2base($$) {
|
||||
$i = int($i/$b);
|
||||
}
|
||||
return $n.$s;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Convert a string to a rendering array
|
||||
@ -213,7 +216,7 @@ sub string2array($)
|
||||
{
|
||||
my($s) = @_;
|
||||
my(@a) = ();
|
||||
|
||||
|
||||
$s =~ s/ \- / $charcode{'endash'} /g; # Replace " - " with en dash
|
||||
|
||||
while ( $s =~ /^(\s+|\S+)(.*)$/ ) {
|
||||
@ -280,7 +283,7 @@ sub ps_flow_lines($$$@) {
|
||||
foreach $e ( @data ) {
|
||||
if ( $$e[0] < 0 ) {
|
||||
# Type is metadata. Zero width.
|
||||
if ( $$e[0] == -6 ) {
|
||||
if ( $$e[0] == -6 ) {
|
||||
$pastmarker = 1;
|
||||
}
|
||||
if ( $$e[0] == -1 || $$e[0] == -6 ) {
|
||||
@ -299,7 +302,7 @@ sub ps_flow_lines($$$@) {
|
||||
my $esw = ps_width($sp, $fontset->{fonts}->[$$e[0]][1],
|
||||
\@NASMEncoding) *
|
||||
($fontset->{fonts}->[$$e[0]][0]/1000);
|
||||
|
||||
|
||||
if ( ($w+$ew) - $ps_space_squeeze*($sw+$esw) > $wid ) {
|
||||
# Begin new line
|
||||
# Search backwards for previous space chunk
|
||||
@ -398,7 +401,7 @@ sub ps_merge_chunks(@) {
|
||||
my(@ci) = @_;
|
||||
my($c, $lc);
|
||||
my(@co, $eco);
|
||||
|
||||
|
||||
undef $lc;
|
||||
@co = ();
|
||||
$eco = -1; # Index of the last entry in @co
|
||||
@ -444,7 +447,7 @@ sub mkparaarray($@) {
|
||||
foreach $chunk ( @chunks ) {
|
||||
my $type = substr($chunk,0,2);
|
||||
my $text = substr($chunk,2);
|
||||
|
||||
|
||||
if ( $type eq 'sp' ) {
|
||||
push(@para, [$in_e?1:0, ' ']);
|
||||
} elsif ( $type eq 'da' ) {
|
||||
@ -668,11 +671,11 @@ sub ps_break_lines($$) {
|
||||
my $refwidth = ps_width($refname, $BodyFont{fonts}->[0][1],
|
||||
\@NASMEncoding) *
|
||||
($BodyFont{fonts}->[0][0]/1000);
|
||||
|
||||
|
||||
@ls = ps_flow_lines($linewidth-$ntoc*$psconf{tocind}-
|
||||
$psconf{tocpnz}-$refwidth,
|
||||
\%BodyFont, $ptype, @data);
|
||||
|
||||
|
||||
# Auxilliary data: for the first line, the cross reference symbol
|
||||
# and the reference name; for all lines but the first, the
|
||||
# reference width; and for the last line, the page number
|
||||
@ -723,7 +726,7 @@ $nlines = scalar(@pslines);
|
||||
#
|
||||
sub ps_break_pages($$) {
|
||||
my($startline, $endline) = @_;
|
||||
|
||||
|
||||
# Paragraph types which should never be broken
|
||||
my $nobreakregexp = "^(chap|appn|head|subh|toc.|idx.)\$";
|
||||
# Paragraph types which are heading (meaning they should not be broken
|
||||
@ -756,22 +759,22 @@ sub ps_break_pages($$) {
|
||||
$columnstart = $curypos;
|
||||
$curcolumn = 0;
|
||||
}
|
||||
|
||||
|
||||
# Adjust position by the appropriate leading
|
||||
$curypos += $$linfo[3]->{leading};
|
||||
|
||||
|
||||
# Record the page and y-position
|
||||
$$linfo[4] = $curpage;
|
||||
$$linfo[5] = $curypos;
|
||||
$$linfo[5] = $curypos;
|
||||
$$linfo[6] = $curcolumn if ( defined($columnstart) );
|
||||
|
||||
|
||||
if ( $curypos > $upageheight ) {
|
||||
# We need to break the page before this line.
|
||||
my $broken = 0; # No place found yet
|
||||
while ( !$broken && $pslines[$i]->[0]->[4] == $curpage ) {
|
||||
my $linfo = $pslines[$i]->[0];
|
||||
my $pinfo = $pslines[$i-1]->[0];
|
||||
|
||||
|
||||
if ( $$linfo[1] == 2 ) {
|
||||
# This would be an orphan, don't break.
|
||||
} elsif ( $$linfo[1] & 1 ) {
|
||||
@ -1128,7 +1131,7 @@ $curpage = 2;
|
||||
ps_start_page();
|
||||
foreach $line ( @pslines ) {
|
||||
my $linfo = $line->[0];
|
||||
|
||||
|
||||
if ( $$linfo[4] != $curpage ) {
|
||||
ps_end_page($curpage > 2);
|
||||
ps_start_page();
|
||||
|
@ -11,11 +11,12 @@
|
||||
|
||||
use File::Spec;
|
||||
use Fcntl;
|
||||
use Env;
|
||||
|
||||
$perl = $ENV{'PERL'} || 'perl';
|
||||
$srcdir = $ENV{'srcdir'} || File::Spec->curdir();
|
||||
$perl = $ENV{PERL} || 'perl';
|
||||
$srcdir = $ENV{srcdir} || File::Spec->curdir();
|
||||
|
||||
$versionfile = File::Spec->catfile(File::Spec->updir($srcdir), 'version');
|
||||
$versionfile = File::Spec->catfile($srcdir, File::Spec->updir(), 'version');
|
||||
$genps = File::Spec->catfile($srcdir, 'genps.pl');
|
||||
|
||||
sysopen(VERSION, $versionfile, O_RDONLY)
|
||||
|
@ -224,7 +224,7 @@ Object File Format
|
||||
The Netwide Assembler, NASM, is an 80x86 assembler designed for
|
||||
portability and modularity. It supports a range of object file
|
||||
formats, including Linux and \c{NetBSD/FreeBSD} \c{a.out}, \c{ELF},
|
||||
\c{COFF}, Microsoft 16-bit \c{OBJ} and \c{Win32}. It will also output
|
||||
\c{COFF}, \c{Mach-O}, Microsoft 16-bit \c{OBJ} and \c{Win32}. It will also output
|
||||
plain binary files. Its syntax is designed to be simple and easy to
|
||||
understand, similar to Intel's but less complex. It supports \c{Pentium},
|
||||
\c{P6}, \c{MMX}, \c{3DNow!}, \c{SSE} and \c{SSE2} opcodes, and has
|
||||
@ -453,7 +453,7 @@ For Microsoft object file formats (\i\c{obj} and \i\c{win32}), it
|
||||
will remove the \c{.asm} \i{extension} (or whatever extension you
|
||||
like to use - NASM doesn't care) from your source file name and
|
||||
substitute \c{.obj}. For Unix object file formats (\i\c{aout},
|
||||
\i\c{coff}, \i\c{elf} and \i\c{as86}) it will substitute \c{.o}. For
|
||||
\i\c{coff}, \i\c{elf}, \i\c{macho} and \i\c{as86}) it will substitute \c{.o}. For
|
||||
\i\c{rdf}, it will use \c{.rdf}, and for the \i\c{bin} format it
|
||||
will simply remove the extension, so that \c{myfile.asm} produces
|
||||
the output file \c{myfile}.
|
||||
@ -3378,7 +3378,7 @@ operating in 16-bit mode, or code designed to run on a processor
|
||||
operating in 32-bit mode. The syntax is \c{BITS 16} or \c{BITS 32}.
|
||||
|
||||
In most cases, you should not need to use \c{BITS} explicitly. The
|
||||
\c{aout}, \c{coff}, \c{elf} and \c{win32} object formats, which are
|
||||
\c{aout}, \c{coff}, \c{elf}, \c{macho} and \c{win32} object formats, which are
|
||||
designed for use in 32-bit operating systems, all cause NASM to
|
||||
select 32-bit mode by default. The \c{obj} object format allows you
|
||||
to specify each segment you define as either \c{USE16} or \c{USE32},
|
||||
@ -4232,6 +4232,12 @@ The \c{coff} format supports the same extensions to the \c{SECTION}
|
||||
directive as \c{win32} does, except that the \c{align} qualifier and
|
||||
the \c{info} section type are not supported.
|
||||
|
||||
\H{machofmt} \i\c{macho}: \i{Mach Object File Format}
|
||||
|
||||
The \c{macho} output type produces \c{Mach-O} object files suitable for
|
||||
linking with the \i{Mac OSX} linker.
|
||||
|
||||
\c{macho} provides a default output file-name extension of \c{.o}.
|
||||
|
||||
\H{elffmt} \i\c{elf}: \I{ELF}\I{linux, elf}\i{Executable and Linkable
|
||||
Format} Object Files
|
||||
|
Loading…
Reference in New Issue
Block a user