Annotation of 43BSDReno/share/doc/ucs/sumacc/pc68.1, revision 1.1

1.1     ! root        1: .TH PC68 1 MC68000
        !             2: .SU
        !             3: .SH NAME
        !             4: pc68 \- Pascal compiler for the MC68000
        !             5: .SH SYNOPSIS
        !             6: .B pc68
        !             7: [ option ] name ...
        !             8: .SH DESCRIPTION
        !             9: .I Pc68
        !            10: is the version of the portable Pascal* compiler that generates code for 
        !            11: the MC68000.
        !            12: .I Pc68
        !            13: is a flexible program for translating between various types of files.  The
        !            14: types catered for in order of appearance during translation are `.p' 
        !            15: (Pascal source files), `.a68' or '.s' (assembly language files), 
        !            16: `.b' (relocatable binary files),
        !            17: `b.out' (absolute binary files), `.r' (byte-reversed files, cf.
        !            18: .I rev68(1)
        !            19: ).
        !            20: and `.dl' (Macsbug download format, cf.
        !            21: .I dl68(1)
        !            22: ).
        !            23: .PP
        !            24: Arguments to pc68 are either flags or input files.
        !            25: The type of an input file is normally determined by its suffix.  When an
        !            26: argument to pc68 is not a flag and has none of the above suffixes, it is
        !            27: assumed to be of one of the types `.p', `.b', or `b.out', namely the latest of
        !            28: these three consistent with the type of the output (e.g. if the output type
        !            29: were `.s' or `.b' then the input would have to be `.p').
        !            30: .PP
        !            31: Translation proceeds as follows.  
        !            32: Each `.p' and `.s' program is translated to a `.b' relocatable using upas68, 
        !            33: ugen68, and as68 as necessary.  Then all .b files including those produced by
        !            34: translation are link edited into the one file, called `b.out'.  If the only
        !            35: input file was a single `.p' program then the `.b' file is deleted, otherwise
        !            36: all `.b' files are preserved.
        !            37: .PP
        !            38: The amount of processing performed by cc68 may be decreased or increased with
        !            39: some of the options.  The -S option takes translation no further than `.s'
        !            40: files, i.e. only upas68 and ugen68 are applied.  
        !            41: The -c option takes translation up to `.b' files, omitting the link-editing 
        !            42: and not deleting any `.b' files.
        !            43: The -d option goes beyond `b.out' to produce a `.dl' file (using dl68) that
        !            44: may be downloaded by the Motorola MACSBUG monitor and the Sun1 monitor.  The
        !            45: -r option similarly goes beyond `b.out' to produce a `.r' file (using rev68)
        !            46: that may be loaded directly by 68000 code based on ld68.  Both -d and -r may
        !            47: be used together.
        !            48: .PP
        !            49: The output may be named explicitly with the -o option; the output file's name
        !            50: should follow -o.  Otherwise the name is `b.out' in the normal case, or
        !            51: `filename.dl' for the -d option, or `filename.r' for the -r option, where
        !            52: `filename' is the first `.p', `.a68', `.s', or `.b' file named as an input.  
        !            53: If the input is not in any of those three categories, the names `d.out' 
        !            54: and `r.out' are used respectively for -d and -r.
        !            55: .PP
        !            56: The version of the target machine may be given as the flag
        !            57: .BI \-v n
        !            58: where 
        !            59: .I n
        !            60: is the version.
        !            61: -vm is "Version Macsbug."
        !            62: -vV means to run under the Vkernal. This is pretty much a hack:
        !            63: File I/O is not supported and you can't refer to C routines
        !            64: containing upper-case letters in their names.
        !            65: It's also rather minimally tested.
        !            66: .PP
        !            67: A complete list of options interpreted by pc68 follows:
        !            68: .TP 6
        !            69: \#flag
        !            70: Pass
        !            71: .I flag
        !            72: to the compiler. See the SOURCE FLAGS section below.
        !            73: .TP 6
        !            74: .B \-c
        !            75: Suppress loading and produce `.b' file(s) from source file(s).
        !            76: .TP 6
        !            77: .B \-g
        !            78: Have the compiler produce additional symbol table information for
        !            79: .IR pcdb68
        !            80: (not implemented).
        !            81: .TP 6
        !            82: .B \-e " entrypoint"
        !            83: Entrypoint specifies where to begin execution.
        !            84: .TP 6
        !            85: .BR \-o " output"
        !            86: Name the final output file
        !            87: .I output
        !            88: instead of
        !            89: .I b.out.
        !            90: .TP 6
        !            91: .B  \-s
        !            92: Accept standard Pascal only;
        !            93: non-standard constructs cause warning diagnostics (not implemented \- see 
        !            94: internally controlled options).
        !            95: .TP 6
        !            96: .B  \-v n
        !            97: Use the 'n' version of the runtime support.
        !            98: .TP 6
        !            99: .BR \-w
        !           100: Suppress warning messages (not implemented).
        !           101: .TP 6
        !           102: .B \-\-x
        !           103: Suppress passing the '\-x' flag to the loader, retaining local symbols.
        !           104: .TP 6
        !           105: .B \-E
        !           106: Run only the preprocessor (not implemented).
        !           107: .TP 6
        !           108: .B  \-L
        !           109: Make an assembly listing in filename.ls for each file assembled.
        !           110: .TP 6
        !           111: .SM
        !           112: .B \-O
        !           113: Invoke an
        !           114: object-code improver (not implemented).
        !           115: .TP 6
        !           116: .B  \-R
        !           117: Preserve relocation information in b.out.
        !           118: .TP 6
        !           119: .SM
        !           120: .B \-S
        !           121: Compile the named program, and leave the
        !           122: assembler-language output on the corresponding file suffixed `.s'.
        !           123: (No `.b' is created.).
        !           124: .TP 6
        !           125: .B \-T " org"
        !           126: Org specifies in hexadecimal where to begin loading the program.
        !           127: .TP 6
        !           128: .B \-V
        !           129: Show the various stages of the compilation by printing images of the processes
        !           130: forked off to perform the actual work of the compilation.
        !           131: .TP 6
        !           132: .B \-U
        !           133: Save the ucode associated with filname.p in filename.u (and filename.z,
        !           134: depending on the -W option).
        !           135: .TP 6
        !           136: .B \-W
        !           137: Invoke the global ucode-to-ucode optimizer.  If -U option active, generates
        !           138: filename.z.
        !           139: .TP 6
        !           140: .B \-P
        !           141: Save all intermediate files.  Most useful in conjuntion with \-V (so that it
        !           142: is possible to find the intermediates).
        !           143: .PP
        !           144: Other arguments
        !           145: are taken
        !           146: to be loader option arguments,
        !           147: perhaps libraries of
        !           148: .IR pc68
        !           149: compatible routines.
        !           150: .SH SEPARATE COMPILATION
        !           151: Object files 
        !           152: created by other language processors may be loaded together with
        !           153: object files created by 
        !           154: .IR pc68 .
        !           155: Calling conventions are as in C,
        !           156: with
        !           157: .B var
        !           158: parameters and arrays passed by address.
        !           159: Don't pass structures except by VAR (pointer) if you call C, since here
        !           160: pc68 and cc68 differ.
        !           161: As a convenience, string constants are followed by a zero byte, so that you
        !           162: can use them as C strings when calling C routines.
        !           163: .PP
        !           164: To refer to a subroutine defined in a separate module, it must be declared.
        !           165: This follows the same syntax as
        !           166: .B forward
        !           167: declarations, except that the keyword
        !           168: .B FORWARD
        !           169: is replaced by
        !           170: .B EXTERN .
        !           171: .PP
        !           172: A file of subroutines is similar to a program except that there
        !           173: is no main program, and the
        !           174: .B program
        !           175: statement at the beginning of the file is replaced by a
        !           176: .b module
        !           177: statement:
        !           178: .br
        !           179:    MODULE modulename;
        !           180: .br
        !           181: The 'end;' of the last function in the file is followed by a period -
        !           182: there is no main program block.
        !           183: .br
        !           184: The modulename will become significant in Pascal*.
        !           185: .pp
        !           186: Note that in identifiers (such as subprogram names) upper case is
        !           187: changed to lower case, and the linker is asked to ignore case.
        !           188: 
        !           189: .SH OPENING FILES
        !           190: 
        !           191: To open a file for both input and output, use the standard
        !           192: procedure REVISE, which is analogous with RESET and REWRITE.
        !           193: NOT TESTED.
        !           194: .sp
        !           195: You can read and write files on machines which run a Leaf server.
        !           196: To open  a file for reading do:
        !           197: .sp
        !           198:    reset(file,'[hostname:username:password]filename');
        !           199: .sp
        !           200: The same syntax applies to rewrite.
        !           201: You can of course also use a Pascal string variable.
        !           202: Terminating spaces in hostname, username and password are ignored.
        !           203: (This should make it easier for a program to construct the appropriate
        !           204: filename string.)
        !           205: .sp
        !           206: You can leave out fields (or the entire second parameter), and the
        !           207: program will assume you want the same as before.
        !           208: If there is no "before", it will ask you.
        !           209: .sp
        !           210: Reset, Rewrite and Revise may have an optional third parameter,
        !           211: which is a string of switches. E.g.:
        !           212: .br
        !           213:     Reset(Input,'data1.txt','Nofilter;Prompt:"Try again!"');
        !           214: .sp
        !           215: Standard switches are:
        !           216: .br
        !           217:  - Prompt:  The string  is used as  a prompt  (interactive
        !           218: systems only).   If  a file  name  is NOT  given,  this
        !           219: prompt is used to get the file name from the user.   If
        !           220: one IS given (like in the example above), the prompt is
        !           221: used to get another file name from the user if the file
        !           222: can't be opened.
        !           223: .br
        !           224:  - Default:  The string is used are used as a default file
        !           225: name, which is used if the user types a carriage return
        !           226: in response to the prompt.
        !           227: .br
        !           228:  - Standard:  If Reset, the standard input file  is  used.
        !           229: If Rewrite, the standard output is used.
        !           230: .br
        !           231:  - Nofilter:    (Reset, Revise only.) Normally a text file
        !           232: is 'filtered' by the runtimes so that  it  conforms  to
        !           233: the  standard  Pascal  definition of a text file.  Most
        !           234: notably, any end-of-line characters  are  changed  into
        !           235: one  space.    The  inclusion  of  Nofilter  causes all
        !           236: characters to be passed through exactly as they  appear
        !           237: in  the  text file.  Eoln, Eopage and Readln still work
        !           238: as for standard files.
        !           239: 
        !           240: .SH EXTENSIONS TO READ AND WRITE
        !           241: 
        !           242: For all field widths (if there are two field-width-type
        !           243: parameters,  the first one only), a negative value will
        !           244: mean  that  the  value  written  will  be  left-aligned
        !           245: instead  of  right-aligned.    For string variables, if
        !           246: Abs(Fieldwidth)  <  Length,  then   the   last   Length
        !           247: - Abs(Fieldwidth) characters  of  the  string  will  be 
        !           248: written.
        !           249: .sp
        !           250: Variables  of enumerated types may be read and written.
        !           251: The field width is interpreted the same as for strings.
        !           252: Enumerated constant names are uppercased when they  are
        !           253: read in.
        !           254: .sp
        !           255: Sets  of  readable and writeable types may also be read
        !           256: and written.  They  appear  exactly  as  set  constants
        !           257: appear   in  Pascal  programs.    The  field  width  is
        !           258: interpreted for each element the same as  it  would  be
        !           259: for    the   set   element   type.
        !           260: .sp
        !           261: Integers may be written in other bases beside  base  10
        !           262: by  including  an  optional field-width-type parameter,
        !           263: which may be anywhere from 1..16.  The field  width  is
        !           264: the  same  as  for  base 10.  Integers may also be read
        !           265: from a file in other  than  base  10,  by  including  a
        !           266: field-width-type  parameter  in  the  call  to  Read or
        !           267: Readln.
        !           268: .sp
        !           269: Real numbers may have a capital  "E"  as  well  as  the
        !           270: standard small "e" in the exponent part.
        !           271: 
        !           272: .SH MORE ABOUT INPUT-OUTPUT
        !           273: Lazy lokahead is used for text files, so that terminal input
        !           274: works reasonably.
        !           275: .sp
        !           276: The procedure Eopage is true iff a page marker has just been read, and
        !           277: the corresponding space in now in the file buffer.
        !           278: .sp
        !           279: Random-access in files is done with the standard procedure
        !           280: .br
        !           281:     seek (File, N);
        !           282: .br
        !           283: This positions the file so that the next read/write will apply
        !           284: to component no. N of the file.
        !           285: .sp
        !           286: To close a file immediately do: close(file);
        !           287: .sp
        !           288: Function Filesize (var Filevar: Anyfile): 0..Maxint  
        !           289: returns the current number of components in a file.
        !           290: .sp
        !           291: Function Curpos (var Filevar: Anyfile): 0..Maxint:  Returns the
        !           292: current file position.
        !           293: .sp
        !           294: Procedure Filepos (var Filevar:  Text; var Pagenum, Linenum, Charnum: 0..Maxint):
        !           295: Returns page, line number, and column number of the next
        !           296: character that will be read from the file (must be open for input).
        !           297: Does not work for random access.
        !           298: 
        !           299: .SH TIME AND DATE ROUTINES
        !           300: .nf
        !           301:     Clock -returns milli-seconds since the monitor was booted.
        !           302: .fi
        !           303: .sp
        !           304: The following routines routines don't work if you want to run stand-alone,
        !           305: but need an operating system (V or Unix).
        !           306: .nf
        !           307: 
        !           308:     Ptime -returns (in theory) milli-seconds since midnight.
        !           309:     (under V, actually returns seconds*1000)
        !           310: 
        !           311:     Pdate(day, month, year) -set day, month & year (say 1982).
        !           312: 
        !           313:     Time(string) -sets string to 'HH:MM:SS'
        !           314: 
        !           315:     Date(string) -sets string to 'MM/DD/YY'.
        !           316: .fi
        !           317: For both time and date, the string is a packed array [1..n] of char,
        !           318: where n>=8. (Any overflow is set to spaces.)
        !           319: 
        !           320: .SH OTHER EXTENSIONS AND FEATURES
        !           321: An "others" label in as CASE statement, indicates a default case.
        !           322: .sp
        !           323: To include a file as part of the program source do:
        !           324: .br
        !           325:     INCLUDE 'filename';
        !           326: .br
        !           327: This is especially useful for declarations for
        !           328: seperately compiled modules.
        !           329: .sp
        !           330: Records declared as "packed" will be packed down to individual bits;
        !           331: however elements of packed arrays are at least a byte.
        !           332: .sp
        !           333: Function Min (X,Y:  T):  T -- returns the minimum of two arguments,
        !           334: which may be of any ordinal or real type.
        !           335: .sp
        !           336: Function Max (X,Y:  T):  T -- returns the maximum of two arguments.
        !           337: .sp
        !           338: Procedure Halt (Exitcode:  Integer):  Causes abnormal termaination of
        !           339: a program.  Passes a system-dependent exit code to the operating system.
        !           340: .sp
        !           341: The comment pairs '{ }' and '(* *) match independently, allowing
        !           342: limited nesting of comments.
        !           343: 
        !           344: .SH "SOURCE FLAGS"
        !           345: .PP
        !           346: These flags can be passed to the compiler either at the command
        !           347: level when invoking pc68, or as comments within the program.
        !           348: A sample option line is a comment with # as its first character:
        !           349: .ta 1.5i 3.0i
        !           350: .nf
        !           351: .na
        !           352: Sample option line: (*#g+,tdpy 1,tchk 1,U-8 *)
        !           353: WARNING: Only (* *)-style comments will work; {#...} is ignored!
        !           354: Sample command line: pc68 file.p #g:+ #tdpy:1 #tchk:1 #U:-8
        !           355: .sp
        !           356: .b
        !           357: Switch Meaning (Note that the default value is shown)
        !           358: 
        !           359: B+     Bounds and nil pointer checking
        !           360: C+     Print ucode
        !           361: D-     Load with debugger
        !           362: E+     Emit source code (for system debugging)
        !           363: G-     Write error messages only to listing file
        !           364: L-     Write full listing
        !           365: I16    Number of characters of identifiers that
        !           366:          are considered significant
        !           367: O-     Emit optimizer-compatible code
        !           368: P-     Keep execution profile
        !           369: R0     Put up to N local variables in (data) registers
        !           370:        (Register allocation should be done by the optimizer.)
        !           371: S-     Accept standard Pascal only
        !           372: T---   Code generator options 
        !           373: U+     Leave procedure names exactly as is
        !           374: V32    Number of bits (16 or 32) to allocate for 'Integer'.
        !           375: Wn     PRINT WARNINGS FOR:
        !           376: W1       unused variables, types, procs, etc.
        !           377: W10      nested comments
        !           378: Z---   Optimizer switches
        !           379: .fi
        !           380: .ad
        !           381: .SH FILES
        !           382: file.p pascal source files
        !           383: .br
        !           384: file.b binary files
        !           385: .br
        !           386: file.a68       assembler files
        !           387: .br
        !           388: file.s assembler files  
        !           389: .br
        !           390: file.ls        assembler listing
        !           391: .br
        !           392: file.err       pascal listing
        !           393: .SH BUGS
        !           394: Displacements off a frame pointer is limited to 16 bits signed,
        !           395: so very large locally-defined arrays will crash.
        !           396: .sp 2
        !           397: Some attempted bogus conversions (e.g. structure to real) aren't detected
        !           398: by the front end, and result in messages about 'Illegal CVT datatypes'
        !           399: from the code generator.
        !           400: .sp 2
        !           401: Sometimes formfeeds in the source get passed to the assembler, causing it to crash.
        !           402: .sp 2
        !           403: There is no macro processor.
        !           404: .SH GRIPES
        !           405: Complaints should be sent to:
        !           406: .br
        !           407:     Per Bothner (mail to bothner@score)
        !           408: .sp
        !           409: There is also a pc68 mailing list. To add yourself to it, send a
        !           410: message to mailer@su-whitney. The first line of the message body
        !           411: should say:
        !           412: .br
        !           413:    add me to pc68
        !           414: .sp
        !           415: To say messages to to list, mail to pc68 at shasta, diablo,
        !           416: navajo or whitney.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.