+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-Indirect:
-g77.info-1: 1697
-g77.info-2: 51504
-g77.info-3: 86652
-g77.info-4: 102421
-g77.info-5: 148200
-g77.info-6: 198176
-g77.info-7: 240263
-g77.info-8: 290181
-g77.info-9: 339800
-g77.info-10: 389391
-g77.info-11: 437993
-g77.info-12: 487886
-g77.info-13: 537704
-g77.info-14: 586061
-g77.info-15: 635100
-g77.info-16: 684261
-g77.info-17: 734128
-g77.info-18: 773211
-g77.info-19: 822559
-g77.info-20: 833284
-\1f
-Tag Table:
-(Indirect)
-Node: Top\7f1697
-Node: Copying\7f3654
-Node: Contributors\7f22836
-Node: Funding\7f25868
-Node: Funding GNU Fortran\7f28371
-Node: Look and Feel\7f31054
-Node: Getting Started\7f31556
-Node: What is GNU Fortran?\7f33874
-Node: G77 and GCC\7f43439
-Node: Invoking G77\7f44790
-Node: Option Summary\7f46941
-Node: Overall Options\7f51504
-Node: Shorthand Options\7f57592
-Node: Fortran Dialect Options\7f60070
-Node: Warning Options\7f70755
-Node: Debugging Options\7f79641
-Node: Optimize Options\7f80714
-Node: Preprocessor Options\7f84159
-Node: Directory Options\7f85340
-Node: Code Gen Options\7f86652
-Node: Environment Variables\7f101963
-Node: News\7f102421
-Node: Changes\7f148200
-Node: Language\7f162250
-Node: Direction of Language Development\7f164190
-Node: Standard Support\7f170429
-Node: No Passing External Assumed-length\7f171150
-Node: No Passing Dummy Assumed-length\7f171627
-Node: No Pathological Implied-DO\7f172142
-Node: No Useless Implied-DO\7f172829
-Node: Conformance\7f173560
-Node: Notation Used\7f175583
-Node: Terms and Concepts\7f179788
-Node: Syntactic Items\7f180300
-Node: Statements Comments Lines\7f180982
-Node: Scope of Names and Labels\7f182847
-Node: Characters Lines Sequence\7f183277
-Node: Character Set\7f183858
-Node: Lines\7f184859
-Node: Continuation Line\7f187335
-Node: Statements\7f188290
-Node: Statement Labels\7f189246
-Node: Order\7f189938
-Node: INCLUDE\7f190823
-Node: Data Types and Constants\7f193566
-Node: Types\7f197087
-Node: Double Notation\7f198176
-Node: Star Notation\7f199248
-Node: Kind Notation\7f202193
-Node: Constants\7f210613
-Node: Integer Type\7f211925
-Node: Character Type\7f212523
-Node: Expressions\7f213287
-Node: %LOC()\7f213703
-Node: Specification Statements\7f216404
-Node: NAMELIST\7f216861
-Node: DOUBLE COMPLEX\7f217143
-Node: Control Statements\7f217397
-Node: DO WHILE\7f217889
-Node: END DO\7f218115
-Node: Construct Names\7f219122
-Node: CYCLE and EXIT\7f219862
-Node: Functions and Subroutines\7f222626
-Node: %VAL()\7f223272
-Node: %REF()\7f224636
-Node: %DESCR()\7f226464
-Node: Generics and Specifics\7f228597
-Node: REAL() and AIMAG() of Complex\7f235792
-Node: CMPLX() of DOUBLE PRECISION\7f237625
-Node: MIL-STD 1753\7f239351
-Node: f77/f2c Intrinsics\7f239693
-Node: Table of Intrinsic Functions\7f240263
-Node: Abort Intrinsic\7f256970
-Node: Abs Intrinsic\7f257234
-Node: Access Intrinsic\7f258102
-Node: AChar Intrinsic\7f258938
-Node: ACos Intrinsic\7f259460
-Node: AdjustL Intrinsic\7f259921
-Node: AdjustR Intrinsic\7f260246
-Node: AImag Intrinsic\7f260572
-Node: AInt Intrinsic\7f261377
-Node: Alarm Intrinsic\7f262005
-Node: All Intrinsic\7f262841
-Node: Allocated Intrinsic\7f263153
-Node: ALog Intrinsic\7f263482
-Node: ALog10 Intrinsic\7f263872
-Node: AMax0 Intrinsic\7f264270
-Node: AMax1 Intrinsic\7f264755
-Node: AMin0 Intrinsic\7f265208
-Node: AMin1 Intrinsic\7f265692
-Node: AMod Intrinsic\7f266144
-Node: And Intrinsic\7f266570
-Node: ANInt Intrinsic\7f267076
-Node: Any Intrinsic\7f267840
-Node: ASin Intrinsic\7f268147
-Node: Associated Intrinsic\7f268605
-Node: ATan Intrinsic\7f268939
-Node: ATan2 Intrinsic\7f269405
-Node: BesJ0 Intrinsic\7f269956
-Node: BesJ1 Intrinsic\7f270417
-Node: BesJN Intrinsic\7f270878
-Node: BesY0 Intrinsic\7f271377
-Node: BesY1 Intrinsic\7f271839
-Node: BesYN Intrinsic\7f272301
-Node: Bit_Size Intrinsic\7f272804
-Node: BTest Intrinsic\7f273463
-Node: CAbs Intrinsic\7f274183
-Node: CCos Intrinsic\7f274570
-Node: Ceiling Intrinsic\7f274962
-Node: CExp Intrinsic\7f275284
-Node: Char Intrinsic\7f275676
-Node: ChDir Intrinsic (subroutine)\7f276930
-Node: ChMod Intrinsic (subroutine)\7f277739
-Node: CLog Intrinsic\7f279008
-Node: Cmplx Intrinsic\7f279412
-Node: Complex Intrinsic\7f280213
-Node: Conjg Intrinsic\7f281659
-Node: Cos Intrinsic\7f282083
-Node: CosH Intrinsic\7f282546
-Node: Count Intrinsic\7f282921
-Node: Cpu_Time Intrinsic\7f283239
-Node: CShift Intrinsic\7f283702
-Node: CSin Intrinsic\7f284024
-Node: CSqRt Intrinsic\7f284416
-Node: CTime Intrinsic (subroutine)\7f284826
-Node: CTime Intrinsic (function)\7f285581
-Node: DAbs Intrinsic\7f286215
-Node: DACos Intrinsic\7f286611
-Node: DASin Intrinsic\7f287002
-Node: DATan Intrinsic\7f287394
-Node: DATan2 Intrinsic\7f287787
-Node: Date_and_Time Intrinsic\7f288242
-Node: DbesJ0 Intrinsic\7f288592
-Node: DbesJ1 Intrinsic\7f288985
-Node: DbesJN Intrinsic\7f289371
-Node: DbesY0 Intrinsic\7f289795
-Node: DbesY1 Intrinsic\7f290181
-Node: DbesYN Intrinsic\7f290567
-Node: Dble Intrinsic\7f290989
-Node: DCos Intrinsic\7f291695
-Node: DCosH Intrinsic\7f292079
-Node: DDiM Intrinsic\7f292469
-Node: DErF Intrinsic\7f292901
-Node: DErFC Intrinsic\7f293270
-Node: DExp Intrinsic\7f293645
-Node: Digits Intrinsic\7f294031
-Node: DiM Intrinsic\7f294348
-Node: DInt Intrinsic\7f294847
-Node: DLog Intrinsic\7f295231
-Node: DLog10 Intrinsic\7f295616
-Node: DMax1 Intrinsic\7f296014
-Node: DMin1 Intrinsic\7f296468
-Node: DMod Intrinsic\7f296920
-Node: DNInt Intrinsic\7f297348
-Node: Dot_Product Intrinsic\7f297747
-Node: DProd Intrinsic\7f298087
-Node: DSign Intrinsic\7f298469
-Node: DSin Intrinsic\7f298908
-Node: DSinH Intrinsic\7f299293
-Node: DSqRt Intrinsic\7f299684
-Node: DTan Intrinsic\7f300075
-Node: DTanH Intrinsic\7f300460
-Node: Dtime Intrinsic (subroutine)\7f300864
-Node: EOShift Intrinsic\7f301799
-Node: Epsilon Intrinsic\7f302138
-Node: ErF Intrinsic\7f302462
-Node: ErFC Intrinsic\7f302868
-Node: ETime Intrinsic (subroutine)\7f303426
-Node: ETime Intrinsic (function)\7f304253
-Node: Exit Intrinsic\7f304957
-Node: Exp Intrinsic\7f305434
-Node: Exponent Intrinsic\7f305896
-Node: Fdate Intrinsic (subroutine)\7f306235
-Node: Fdate Intrinsic (function)\7f306923
-Node: FGet Intrinsic (subroutine)\7f307473
-Node: FGetC Intrinsic (subroutine)\7f308310
-Node: Float Intrinsic\7f309187
-Node: Floor Intrinsic\7f309587
-Node: Flush Intrinsic\7f309903
-Node: FNum Intrinsic\7f310482
-Node: FPut Intrinsic (subroutine)\7f310930
-Node: FPutC Intrinsic (subroutine)\7f311727
-Node: Fraction Intrinsic\7f312574
-Node: FSeek Intrinsic\7f312915
-Node: FStat Intrinsic (subroutine)\7f313640
-Node: FStat Intrinsic (function)\7f315109
-Node: FTell Intrinsic (subroutine)\7f316343
-Node: FTell Intrinsic (function)\7f317016
-Node: GError Intrinsic\7f317533
-Node: GetArg Intrinsic\7f317907
-Node: GetCWD Intrinsic (subroutine)\7f318543
-Node: GetCWD Intrinsic (function)\7f319399
-Node: GetEnv Intrinsic\7f320019
-Node: GetGId Intrinsic\7f320606
-Node: GetLog Intrinsic\7f320912
-Node: GetPId Intrinsic\7f321236
-Node: GetUId Intrinsic\7f321544
-Node: GMTime Intrinsic\7f321849
-Node: HostNm Intrinsic (subroutine)\7f322857
-Node: HostNm Intrinsic (function)\7f323729
-Node: Huge Intrinsic\7f324354
-Node: IAbs Intrinsic\7f324677
-Node: IAChar Intrinsic\7f325068
-Node: IAnd Intrinsic\7f325608
-Node: IArgC Intrinsic\7f326096
-Node: IBClr Intrinsic\7f326472
-Node: IBits Intrinsic\7f326982
-Node: IBSet Intrinsic\7f327696
-Node: IChar Intrinsic\7f328197
-Node: IDate Intrinsic (UNIX)\7f329416
-Node: IDiM Intrinsic\7f329997
-Node: IDInt Intrinsic\7f330446
-Node: IDNInt Intrinsic\7f330839
-Node: IEOr Intrinsic\7f331238
-Node: IErrNo Intrinsic\7f331736
-Node: IFix Intrinsic\7f332063
-Node: Imag Intrinsic\7f332451
-Node: ImagPart Intrinsic\7f333456
-Node: Index Intrinsic\7f334482
-Node: Int Intrinsic\7f335035
-Node: Int2 Intrinsic\7f335750
-Node: Int8 Intrinsic\7f336438
-Node: IOr Intrinsic\7f337126
-Node: IRand Intrinsic\7f337606
-Node: IsaTty Intrinsic\7f338526
-Node: IShft Intrinsic\7f338950
-Node: IShftC Intrinsic\7f339800
-Node: ISign Intrinsic\7f340728
-Node: ITime Intrinsic\7f341178
-Node: Kill Intrinsic (subroutine)\7f341580
-Node: Kind Intrinsic\7f342417
-Node: LBound Intrinsic\7f342742
-Node: Len Intrinsic\7f343059
-Node: Len_Trim Intrinsic\7f343695
-Node: LGe Intrinsic\7f344107
-Node: LGt Intrinsic\7f345520
-Node: Link Intrinsic (subroutine)\7f346426
-Node: LLe Intrinsic\7f347391
-Node: LLt Intrinsic\7f348297
-Node: LnBlnk Intrinsic\7f349192
-Node: Loc Intrinsic\7f349595
-Node: Log Intrinsic\7f350026
-Node: Log10 Intrinsic\7f350606
-Node: Logical Intrinsic\7f351179
-Node: Long Intrinsic\7f351502
-Node: LShift Intrinsic\7f352026
-Node: LStat Intrinsic (subroutine)\7f353062
-Node: LStat Intrinsic (function)\7f354818
-Node: LTime Intrinsic\7f356325
-Node: MatMul Intrinsic\7f357329
-Node: Max Intrinsic\7f357647
-Node: Max0 Intrinsic\7f358198
-Node: Max1 Intrinsic\7f358649
-Node: MaxExponent Intrinsic\7f359133
-Node: MaxLoc Intrinsic\7f359473
-Node: MaxVal Intrinsic\7f359800
-Node: MClock Intrinsic\7f360122
-Node: MClock8 Intrinsic\7f360849
-Node: Merge Intrinsic\7f361567
-Node: Min Intrinsic\7f361883
-Node: Min0 Intrinsic\7f362434
-Node: Min1 Intrinsic\7f362885
-Node: MinExponent Intrinsic\7f363369
-Node: MinLoc Intrinsic\7f363709
-Node: MinVal Intrinsic\7f364036
-Node: Mod Intrinsic\7f364355
-Node: Modulo Intrinsic\7f364878
-Node: MvBits Intrinsic\7f365197
-Node: Nearest Intrinsic\7f366063
-Node: NInt Intrinsic\7f366387
-Node: Not Intrinsic\7f367225
-Node: Or Intrinsic\7f367620
-Node: Pack Intrinsic\7f368118
-Node: PError Intrinsic\7f368428
-Node: Precision Intrinsic\7f368882
-Node: Present Intrinsic\7f369217
-Node: Product Intrinsic\7f369547
-Node: Radix Intrinsic\7f369873
-Node: Rand Intrinsic\7f370190
-Node: Random_Number Intrinsic\7f371077
-Node: Random_Seed Intrinsic\7f371430
-Node: Range Intrinsic\7f371778
-Node: Real Intrinsic\7f372099
-Node: RealPart Intrinsic\7f373105
-Node: Rename Intrinsic (subroutine)\7f374138
-Node: Repeat Intrinsic\7f375110
-Node: Reshape Intrinsic\7f375446
-Node: RRSpacing Intrinsic\7f375775
-Node: RShift Intrinsic\7f376110
-Node: Scale Intrinsic\7f377108
-Node: Scan Intrinsic\7f377424
-Node: Second Intrinsic (function)\7f377748
-Node: Second Intrinsic (subroutine)\7f378288
-Node: Selected_Int_Kind Intrinsic\7f378934
-Node: Selected_Real_Kind Intrinsic\7f379325
-Node: Set_Exponent Intrinsic\7f379712
-Node: Shape Intrinsic\7f380069
-Node: Short Intrinsic\7f380392
-Node: Sign Intrinsic\7f381088
-Node: Signal Intrinsic (subroutine)\7f381688
-Node: Sin Intrinsic\7f382987
-Node: SinH Intrinsic\7f383462
-Node: Sleep Intrinsic\7f383835
-Node: Sngl Intrinsic\7f384177
-Node: Spacing Intrinsic\7f384566
-Node: Spread Intrinsic\7f384890
-Node: SqRt Intrinsic\7f385211
-Node: SRand Intrinsic\7f385815
-Node: Stat Intrinsic (subroutine)\7f386192
-Node: Stat Intrinsic (function)\7f387751
-Node: Sum Intrinsic\7f389059
-Node: SymLnk Intrinsic (subroutine)\7f389391
-Node: System Intrinsic (subroutine)\7f390423
-Node: System_Clock Intrinsic\7f391362
-Node: Tan Intrinsic\7f392130
-Node: TanH Intrinsic\7f392590
-Node: Time Intrinsic (UNIX)\7f392972
-Node: Time8 Intrinsic\7f393786
-Node: Tiny Intrinsic\7f394499
-Node: Transfer Intrinsic\7f394814
-Node: Transpose Intrinsic\7f395145
-Node: Trim Intrinsic\7f395479
-Node: TtyNam Intrinsic (subroutine)\7f395809
-Node: TtyNam Intrinsic (function)\7f396508
-Node: UBound Intrinsic\7f397077
-Node: UMask Intrinsic (subroutine)\7f397422
-Node: Unlink Intrinsic (subroutine)\7f398119
-Node: Unpack Intrinsic\7f399017
-Node: Verify Intrinsic\7f399352
-Node: XOr Intrinsic\7f399671
-Node: ZAbs Intrinsic\7f400187
-Node: ZCos Intrinsic\7f400556
-Node: ZExp Intrinsic\7f400929
-Node: ZLog Intrinsic\7f401302
-Node: ZSin Intrinsic\7f401675
-Node: ZSqRt Intrinsic\7f402049
-Node: Scope and Classes of Names\7f402406
-Node: Underscores in Symbol Names\7f402876
-Node: Other Dialects\7f403123
-Node: Source Form\7f404282
-Node: Carriage Returns\7f405633
-Node: Tabs\7f405962
-Node: Short Lines\7f407671
-Node: Long Lines\7f408645
-Node: Ampersands\7f409256
-Node: Trailing Comment\7f409510
-Node: Debug Line\7f410286
-Node: Dollar Signs\7f410955
-Node: Case Sensitivity\7f411241
-Node: VXT Fortran\7f419857
-Node: Double Quote Meaning\7f421040
-Node: Exclamation Point\7f421968
-Node: Fortran 90\7f423011
-Node: Pedantic Compilation\7f424063
-Node: Distensions\7f428027
-Node: Ugly Implicit Argument Conversion\7f429558
-Node: Ugly Assumed-Size Arrays\7f430172
-Node: Ugly Complex Part Extraction\7f431893
-Node: Ugly Null Arguments\7f433515
-Node: Ugly Conversion of Initializers\7f435120
-Node: Ugly Integer Conversions\7f436885
-Node: Ugly Assigned Labels\7f437993
-Node: Compiler\7f439924
-Node: Compiler Limits\7f440530
-Node: Compiler Types\7f441413
-Node: Compiler Constants\7f446112
-Node: Compiler Intrinsics\7f446971
-Node: Intrinsic Groups\7f447898
-Node: Other Intrinsics\7f451339
-Node: ACosD Intrinsic\7f458937
-Node: AIMax0 Intrinsic\7f459218
-Node: AIMin0 Intrinsic\7f459527
-Node: AJMax0 Intrinsic\7f459837
-Node: AJMin0 Intrinsic\7f460147
-Node: ASinD Intrinsic\7f460456
-Node: ATan2D Intrinsic\7f460762
-Node: ATanD Intrinsic\7f461070
-Node: BITest Intrinsic\7f461376
-Node: BJTest Intrinsic\7f461685
-Node: CDAbs Intrinsic\7f461994
-Node: CDCos Intrinsic\7f462367
-Node: CDExp Intrinsic\7f462742
-Node: CDLog Intrinsic\7f463117
-Node: CDSin Intrinsic\7f463492
-Node: CDSqRt Intrinsic\7f463868
-Node: ChDir Intrinsic (function)\7f464261
-Node: ChMod Intrinsic (function)\7f464895
-Node: CosD Intrinsic\7f466007
-Node: DACosD Intrinsic\7f466319
-Node: DASinD Intrinsic\7f466627
-Node: DATan2D Intrinsic\7f466938
-Node: DATanD Intrinsic\7f467252
-Node: Date Intrinsic\7f467561
-Node: DbleQ Intrinsic\7f468190
-Node: DCmplx Intrinsic\7f468494
-Node: DConjg Intrinsic\7f470125
-Node: DCosD Intrinsic\7f470510
-Node: DFloat Intrinsic\7f470816
-Node: DFlotI Intrinsic\7f471188
-Node: DFlotJ Intrinsic\7f471498
-Node: DImag Intrinsic\7f471807
-Node: DReal Intrinsic\7f472184
-Node: DSinD Intrinsic\7f473331
-Node: DTanD Intrinsic\7f473635
-Node: Dtime Intrinsic (function)\7f473950
-Node: FGet Intrinsic (function)\7f474844
-Node: FGetC Intrinsic (function)\7f475617
-Node: FloatI Intrinsic\7f476433
-Node: FloatJ Intrinsic\7f476753
-Node: FPut Intrinsic (function)\7f477072
-Node: FPutC Intrinsic (function)\7f477808
-Node: IDate Intrinsic (VXT)\7f478601
-Node: IIAbs Intrinsic\7f479320
-Node: IIAnd Intrinsic\7f479630
-Node: IIBClr Intrinsic\7f479935
-Node: IIBits Intrinsic\7f480244
-Node: IIBSet Intrinsic\7f480554
-Node: IIDiM Intrinsic\7f480863
-Node: IIDInt Intrinsic\7f481169
-Node: IIDNnt Intrinsic\7f481478
-Node: IIEOr Intrinsic\7f481787
-Node: IIFix Intrinsic\7f482092
-Node: IInt Intrinsic\7f482395
-Node: IIOr Intrinsic\7f482694
-Node: IIQint Intrinsic\7f482994
-Node: IIQNnt Intrinsic\7f483302
-Node: IIShftC Intrinsic\7f483613
-Node: IISign Intrinsic\7f483927
-Node: IMax0 Intrinsic\7f484237
-Node: IMax1 Intrinsic\7f484542
-Node: IMin0 Intrinsic\7f484846
-Node: IMin1 Intrinsic\7f485150
-Node: IMod Intrinsic\7f485453
-Node: INInt Intrinsic\7f485753
-Node: INot Intrinsic\7f486055
-Node: IZExt Intrinsic\7f486355
-Node: JIAbs Intrinsic\7f486658
-Node: JIAnd Intrinsic\7f486962
-Node: JIBClr Intrinsic\7f487267
-Node: JIBits Intrinsic\7f487576
-Node: JIBSet Intrinsic\7f487886
-Node: JIDiM Intrinsic\7f488195
-Node: JIDInt Intrinsic\7f488501
-Node: JIDNnt Intrinsic\7f488810
-Node: JIEOr Intrinsic\7f489119
-Node: JIFix Intrinsic\7f489424
-Node: JInt Intrinsic\7f489727
-Node: JIOr Intrinsic\7f490026
-Node: JIQint Intrinsic\7f490326
-Node: JIQNnt Intrinsic\7f490634
-Node: JIShft Intrinsic\7f490944
-Node: JIShftC Intrinsic\7f491255
-Node: JISign Intrinsic\7f491569
-Node: JMax0 Intrinsic\7f491879
-Node: JMax1 Intrinsic\7f492184
-Node: JMin0 Intrinsic\7f492488
-Node: JMin1 Intrinsic\7f492792
-Node: JMod Intrinsic\7f493095
-Node: JNInt Intrinsic\7f493395
-Node: JNot Intrinsic\7f493697
-Node: JZExt Intrinsic\7f493997
-Node: Kill Intrinsic (function)\7f494310
-Node: Link Intrinsic (function)\7f494992
-Node: QAbs Intrinsic\7f495804
-Node: QACos Intrinsic\7f496114
-Node: QACosD Intrinsic\7f496418
-Node: QASin Intrinsic\7f496726
-Node: QASinD Intrinsic\7f497032
-Node: QATan Intrinsic\7f497340
-Node: QATan2 Intrinsic\7f497646
-Node: QATan2D Intrinsic\7f497956
-Node: QATanD Intrinsic\7f498270
-Node: QCos Intrinsic\7f498579
-Node: QCosD Intrinsic\7f498880
-Node: QCosH Intrinsic\7f499183
-Node: QDiM Intrinsic\7f499486
-Node: QExp Intrinsic\7f499785
-Node: QExt Intrinsic\7f500083
-Node: QExtD Intrinsic\7f500382
-Node: QFloat Intrinsic\7f500686
-Node: QInt Intrinsic\7f500993
-Node: QLog Intrinsic\7f501293
-Node: QLog10 Intrinsic\7f501593
-Node: QMax1 Intrinsic\7f501900
-Node: QMin1 Intrinsic\7f502205
-Node: QMod Intrinsic\7f502508
-Node: QNInt Intrinsic\7f502808
-Node: QSin Intrinsic\7f503110
-Node: QSinD Intrinsic\7f503410
-Node: QSinH Intrinsic\7f503713
-Node: QSqRt Intrinsic\7f504017
-Node: QTan Intrinsic\7f504320
-Node: QTanD Intrinsic\7f504620
-Node: QTanH Intrinsic\7f504923
-Node: Rename Intrinsic (function)\7f505239
-Node: Secnds Intrinsic\7f506044
-Node: Signal Intrinsic (function)\7f506419
-Node: SinD Intrinsic\7f507530
-Node: SnglQ Intrinsic\7f507842
-Node: SymLnk Intrinsic (function)\7f508157
-Node: System Intrinsic (function)\7f509025
-Node: TanD Intrinsic\7f510352
-Node: Time Intrinsic (VXT)\7f510669
-Node: UMask Intrinsic (function)\7f511200
-Node: Unlink Intrinsic (function)\7f511808
-Node: ZExt Intrinsic\7f512537
-Node: Other Compilers\7f512825
-Node: Dropping f2c Compatibility\7f515205
-Node: Compilers Other Than f2c\7f518031
-Node: Other Languages\7f519830
-Node: Interoperating with C and C++\7f520082
-Node: C Interfacing Tools\7f521115
-Node: C Access to Type Information\7f522043
-Node: f2c Skeletons and Prototypes\7f522730
-Node: C++ Considerations\7f524428
-Node: Startup Code\7f525083
-Node: Installation\7f525994
-Node: Prerequisites\7f527150
-Node: Problems Installing\7f535614
-Node: General Problems\7f536240
-Node: GNU C Required\7f537003
-Node: Patching GNU CC Necessary\7f537704
-Node: Building GNU CC Necessary\7f538554
-Node: Missing strtoul\7f538900
-Node: Object File Differences\7f540314
-Node: Cleanup Kills Stage Directories\7f541011
-Node: Missing gperf?\7f541431
-Node: Cross-compiler Problems\7f542819
-Node: Settings\7f545024
-Node: Larger File Unit Numbers\7f546102
-Node: Always Flush Output\7f547685
-Node: Maximum Stackable Size\7f549545
-Node: Floating-point Bit Patterns\7f550401
-Node: Large Initialization\7f551142
-Node: Alpha Problems Fixed\7f552731
-Node: Quick Start\7f553618
-Node: Complete Installation\7f564031
-Node: Unpacking\7f564611
-Node: Merging Distributions\7f567700
-Node: Installing f77\7f573149
-Node: Installing f2c\7f574494
-Node: Patching GNU Fortran\7f577419
-Node: Where to Install\7f578937
-Node: Configuring gcc\7f582282
-Node: Building gcc\7f584054
-Node: Bootstrap Build\7f586061
-Node: Straight Build\7f587807
-Node: Pre-installation Checks\7f589196
-Node: Installation of Binaries\7f592622
-Node: Updating Documentation\7f593983
-Node: Missing bison?\7f594837
-Node: Missing makeinfo?\7f596183
-Node: Distributing Binaries\7f596708
-Node: Debugging and Interfacing\7f602653
-Node: Main Program Unit\7f605337
-Node: Procedures\7f607834
-Node: Functions\7f610495
-Node: Names\7f612113
-Node: Common Blocks\7f615254
-Node: Local Equivalence Areas\7f617287
-Node: Complex Variables\7f619974
-Node: Arrays\7f621304
-Node: Adjustable Arrays\7f624638
-Node: Alternate Entry Points\7f627497
-Node: Alternate Returns\7f634199
-Node: Assigned Statement Labels\7f635100
-Node: Run-time Library Errors\7f636945
-Node: Collected Fortran Wisdom\7f638897
-Node: Advantages Over f2c\7f640333
-Node: Language Extensions\7f641242
-Node: Compiler Options\7f641749
-Node: Compiler Speed\7f642201
-Node: Program Speed\7f642911
-Node: Ease of Debugging\7f644496
-Node: Character and Hollerith Constants\7f646926
-Node: Block Data and Libraries\7f647720
-Node: Loops\7f651044
-Node: Working Programs\7f656260
-Node: Not My Type\7f656940
-Node: Variables Assumed To Be Zero\7f658871
-Node: Variables Assumed To Be Saved\7f659925
-Node: Unwanted Variables\7f661295
-Node: Unused Arguments\7f662175
-Node: Surprising Interpretations of Code\7f662638
-Node: Aliasing Assumed To Work\7f663484
-Node: Output Assumed To Flush\7f669400
-Node: Large File Unit Numbers\7f670806
-Node: Overly Convenient Options\7f672088
-Node: Faster Programs\7f675698
-Node: Aligned Data\7f676144
-Node: Prefer Automatic Uninitialized Variables\7f679988
-Node: Avoid f2c Compatibility\7f681354
-Node: Use Submodel Options\7f681822
-Node: Trouble\7f682645
-Node: But-bugs\7f684261
-Node: Signal 11 and Friends\7f686035
-Node: Cannot Link Fortran Programs\7f688114
-Node: Large Common Blocks\7f689397
-Node: Debugger Problems\7f689823
-Node: NeXTStep Problems\7f690345
-Node: Stack Overflow\7f692167
-Node: Nothing Happens\7f694180
-Node: Strange Behavior at Run Time\7f695794
-Node: Floating-point Errors\7f698087
-Node: Actual Bugs\7f702664
-Node: Missing Features\7f713415
-Node: Better Source Model\7f715132
-Node: Fortran 90 Support\7f716901
-Node: Intrinsics in PARAMETER Statements\7f718002
-Node: SELECT CASE on CHARACTER Type\7f718888
-Node: RECURSIVE Keyword\7f719186
-Node: Increasing Precision/Range\7f719613
-Node: Popular Non-standard Types\7f721150
-Node: Full Support for Compiler Types\7f721567
-Node: Array Bounds Expressions\7f722239
-Node: POINTER Statements\7f722686
-Node: Sensible Non-standard Constructs\7f723569
-Node: FLUSH Statement\7f725894
-Node: Expressions in FORMAT Statements\7f726280
-Node: Explicit Assembler Code\7f727459
-Node: Q Edit Descriptor\7f727748
-Node: Old-style PARAMETER Statements\7f728252
-Node: TYPE and ACCEPT I/O Statements\7f728986
-Node: STRUCTURE UNION RECORD MAP\7f729552
-Node: OPEN CLOSE and INQUIRE Keywords\7f730038
-Node: ENCODE and DECODE\7f730470
-Node: Suppressing Space Padding\7f731571
-Node: Fortran Preprocessor\7f732797
-Node: Bit Operations on Floating-point Data\7f733370
-Node: POSIX Standard\7f733884
-Node: Floating-point Exception Handling\7f734128
-Node: Nonportable Conversions\7f735170
-Node: Large Automatic Arrays\7f735706
-Node: Support for Threads\7f736113
-Node: Gracefully Handle Sensible Bad Code\7f736538
-Node: Non-standard Conversions\7f737293
-Node: Non-standard Intrinsics\7f737636
-Node: Modifying DO Variable\7f738052
-Node: Better Pedantic Compilation\7f738728
-Node: Warn About Implicit Conversions\7f739356
-Node: Invalid Use of Hollerith Constant\7f739943
-Node: Dummy Array Without Dimensioning Dummy\7f740486
-Node: Invalid FORMAT Specifiers\7f741399
-Node: Ambiguous Dialects\7f741800
-Node: Unused Labels\7f742211
-Node: Informational Messages\7f742433
-Node: Uninitialized Variables at Run Time\7f742836
-Node: Bounds Checking at Run Time\7f743443
-Node: Labels Visible to Debugger\7f743891
-Node: Disappointments\7f744297
-Node: Mangling of Names\7f744935
-Node: Multiple Definitions of External Names\7f745785
-Node: Limitation on Implicit Declarations\7f747148
-Node: Non-bugs\7f747432
-Node: Backslash in Constants\7f748557
-Node: Initializing Before Specifying\7f753446
-Node: Context-Sensitive Intrinsicness\7f754588
-Node: Context-Sensitive Constants\7f756484
-Node: Equivalence Versus Equality\7f759441
-Node: Order of Side Effects\7f761951
-Node: Warnings and Errors\7f763679
-Node: Open Questions\7f765363
-Node: Bugs\7f766511
-Node: Bug Criteria\7f768016
-Node: Bug Lists\7f772439
-Node: Bug Reporting\7f773211
-Node: Sending Patches\7f786658
-Node: Service\7f792142
-Node: Adding Options\7f792610
-Node: Projects\7f796659
-Node: Efficiency\7f797504
-Node: Better Optimization\7f800401
-Node: Simplify Porting\7f803771
-Node: More Extensions\7f805526
-Node: Machine Model\7f808727
-Node: Internals Documentation\7f810013
-Node: Internals Improvements\7f810327
-Node: Better Diagnostics\7f813871
-Node: Diagnostics\7f814788
-Node: CMPAMBIG\7f816085
-Node: EXPIMP\7f822559
-Node: INTGLOB\7f823795
-Node: LEX\7f826039
-Node: GLOBALS\7f831431
-Node: Index\7f833284
-\1f
-End Tag Table
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Top, Next: Copying, Up: (DIR)
-
-Introduction
-************
-
- This manual documents how to run, install and port the GNU Fortran
-compiler, as well as its new features and incompatibilities, and how to
-report bugs. It corresponds to GNU Fortran version 0.5.21.
-
-* Menu:
-
-* Copying:: GNU General Public License says
- how you can copy and share GNU Fortran.
-* Contributors:: People who have contributed to GNU Fortran.
-* Funding:: How to help assure continued work for free software.
-* Funding GNU Fortran:: How to help assure continued work on GNU Fortran.
-* Look and Feel:: Protect your freedom--fight "look and feel".
-
-* Getting Started:: Finding your way around this manual.
-* What is GNU Fortran?:: How `g77' fits into the universe.
-* G77 and GCC:: You can compile Fortran, C, or other programs.
-* Invoking G77:: Command options supported by `g77'.
-* News:: News about recent releases of `g77'.
-* Changes:: User-visible changes to recent releases of `g77'.
-* Language:: The GNU Fortran language.
-* Compiler:: The GNU Fortran compiler.
-* Other Dialects:: Dialects of Fortran supported by `g77'.
-* Other Compilers:: Fortran compilers other than `g77'.
-* Other Languages:: Languages other than Fortran.
-* Installation:: How to configure, compile and install GNU Fortran.
-* Debugging and Interfacing:: How `g77' generates code.
-* Collected Fortran Wisdom:: How to avoid Trouble.
-* Trouble:: If you have trouble with GNU Fortran.
-* Open Questions:: Things we'd like to know.
-* Bugs:: How, why, and where to report bugs.
-* Service:: How to find suppliers of support for GNU Fortran.
-
-* Adding Options:: Guidance on teaching `g77' about new options.
-* Projects:: Projects for `g77' internals hackers.
-
-* M: Diagnostics. Diagnostics produced by `g77'.
-
-* Index:: Index of concepts and symbol names.
-
-\1f
-File: g77.info, Node: Copying, Next: Contributors, Prev: Top, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-=============================================
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) 19YY NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-\1f
-File: g77.info, Node: Contributors, Next: Funding, Prev: Copying, Up: Top
-
-Contributors to GNU Fortran
-***************************
-
- In addition to James Craig Burley, who wrote the front end, many
-people have helped create and improve GNU Fortran.
-
- * The packaging and compiler portions of GNU Fortran are based
- largely on the GNU CC compiler. *Note Contributors to GNU CC:
- (gcc)Contributors, for more information.
-
- * The run-time library used by GNU Fortran is a repackaged version
- of the `libf2c' library (combined from the `libF77' and `libI77'
- libraries) provided as part of `f2c', available for free from
- `netlib' sites on the Internet.
-
- * Cygnus Support and The Free Software Foundation contributed
- significant money and/or equipment to Craig's efforts.
-
- * The following individuals served as alpha testers prior to `g77''s
- public release. This work consisted of testing, researching,
- sometimes debugging, and occasionally providing small amounts of
- code and fixes for `g77', plus offering plenty of helpful advice
- to Craig:
-
- Jonathan Corbet
-
- Dr. Mark Fernyhough
-
- Takafumi Hayashi (The University of
- AIzu)--<takafumi@u-aizu.ac.jp>
-
- Kate Hedstrom
-
- Michel Kern (INRIA and Rice
- University)--<Michel.Kern@inria.fr>
-
- Dr. A. O. V. Le Blanc
-
- Dave Love
-
- Rick Lutowski
-
- Toon Moene
-
- Rick Niles
-
- Derk Reefman
-
- Wayne K. Schroll
-
- Bill Thorson
-
- Pedro A. M. Vazquez
-
- Ian Watson
-
- * Scott Snyder (<snyder@d0sgif.fnal.gov>) provided the patch to add
- rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'.
- This inspired Craig to add further support, even though the
- resulting support would still be incomplete, because version 0.6
- is still a ways off.
-
- * David Ronis (<ronis@onsager.chem.mcgill.ca>) inspired and
- encouraged Craig to rewrite the documentation in texinfo format by
- contributing a first pass at a translation of the old
- `g77-0.5.16/f/DOC' file.
-
- * Toon Moene (<toon@moene.indiv.nluug.nl>) performed some analysis
- of generated code as part of an overall project to improve `g77'
- code generation to at least be as good as `f2c' used in
- conjunction with `gcc'. So far, this has resulted in the three,
- somewhat experimental, options added by `g77' to the `gcc'
- compiler and its back end.
-
- * John Carr (<jfc@mit.edu>) wrote the alias analysis improvements.
-
- * Thanks to Mary Cortani and the staff at Craftwork Solutions
- (<support@craftwork.com>) for all of their support.
-
- * Many other individuals have helped debug, test, and improve `g77'
- over the past several years, and undoubtedly more people will be
- doing so in the future. If you have done so, and would like to
- see your name listed in the above list, please ask! The default
- is that people wish to remain anonymous.
-
-\1f
-File: g77.info, Node: Funding, Next: Funding GNU Fortran, Prev: Contributors, Up: Top
-
-Funding Free Software
-*********************
-
- If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development. The most effective approach known is to encourage
-commercial redistributors to donate.
-
- Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers--the Free Software Foundation, and others.
-
- The way to convince distributors to do this is to demand it and
-expect it from them. So when you compare distributors, judge them
-partly by how much they give to free software development. Show
-distributors they must compete to be the one who gives the most.
-
- To make this approach work, you must insist on numbers that you can
-compare, such as, "We will donate ten dollars to the Frobnitz project
-for each disk sold." Don't be satisfied with a vague promise, such as
-"A portion of the profits are donated," since it doesn't give a basis
-for comparison.
-
- Even a precise fraction "of the profits from this disk" is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably less
-than a dollar; it might be a few cents, or nothing at all.
-
- Some redistributors do development work themselves. This is useful
-too; but to keep everyone honest, you need to inquire how much they do,
-and what kind. Some kinds of development make much more long-term
-difference than others. For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much. Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU C compiler contribute more;
-major new features or packages contribute the most.
-
- By establishing the idea that supporting further development is "the
-proper thing to do" when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
- Copyright (C) 1994 Free Software Foundation, Inc.
- Verbatim copying and redistribution of this section is permitted
- without royalty; alteration is not permitted.
-
-\1f
-File: g77.info, Node: Funding GNU Fortran, Next: Look and Feel, Prev: Funding, Up: Top
-
-Funding GNU Fortran
-*******************
-
- Work on GNU Fortran is still being done mostly by its author, James
-Craig Burley (<burley@gnu.ai.mit.edu>), who is a volunteer for, not an
-employee of, the Free Software Foundation (FSF). As with other GNU
-software, funding is important because it can pay for needed equipment,
-personnel, and so on.
-
- The FSF provides information on the best way to fund ongoing
-development of GNU software (such as GNU Fortran) in documents such as
-the "GNUS Bulletin". Email <gnu@prep.ai.mit.edu> for information on
-funding the FSF.
-
- To fund specific GNU Fortran work in particular, the FSF might
-provide a means for that, but the FSF does not provide direct funding
-to the author of GNU Fortran to continue his work. The FSF has
-employee salary restrictions that can be incompatible with the
-financial needs of some volunteers, who therefore choose to remain
-volunteers and thus be able to be free to do contract work and
-otherwise make their own schedules for doing GNU work.
-
- Still, funding the FSF at least indirectly benefits work on specific
-projects like GNU Fortran because it ensures the continuing operation
-of the FSF offices, their workstations, their network connections, and
-so on, which are invaluable to volunteers. (Similarly, hiring Cygnus
-Support can help a project like GNU Fortran--Cygnus has been a
-long-time donor of equipment usage to the author of GNU Fortran, and
-this too has been invaluable--*Note Contributors::.)
-
- Currently, the only way to directly fund the author of GNU Fortran
-in his work on that project is to hire him for the work you want him to
-do, or donate money to him. Several people have done this already,
-with the result that he has not needed to immediately find contract
-work on a few occasions. If more people did this, he would be able to
-plan on not doing contract work for many months and could thus devote
-that time to work on projects (such as the planned changes for 0.6)
-that require longer timeframes to complete. For the latest information
-on the status of the author, do `finger -l burley@gate.gnu.ai.mit.edu'
-on a UNIX system (or any system with a command like UNIX `finger').
-
- Another important way to support work on GNU Fortran is to volunteer
-to help out. Work is needed on documentation, testing, porting to
-various machines, and in some cases, coding (although major changes
-planned for version 0.6 make it difficult to add manpower to this area).
-Email <fortran@gnu.ai.mit.edu> to volunteer for this work.
-
- *Note Funding Free Software: Funding, for more information.
-
-\1f
-File: g77.info, Node: Look and Feel, Next: Getting Started, Prev: Funding GNU Fortran, Up: Top
-
-Protect Your Freedom--Fight "Look And Feel"
-*******************************************
-
- To preserve the ability to write free software, including
-replacements for proprietary software, authors must be free to
-replicate the user interface to which users of existing software have
-become accustomed.
-
- *Note Protect Your Freedom--Fight "Look And Feel": (gcc)Look and
-Feel, for more information.
-
-\1f
-File: g77.info, Node: Getting Started, Next: What is GNU Fortran?, Prev: Look and Feel, Up: Top
-
-Getting Started
-***************
-
- If you don't need help getting started reading the portions of this
-manual that are most important to you, you should skip this portion of
-the manual.
-
- If you are new to compilers, especially Fortran compilers, or new to
-how compilers are structured under UNIX and UNIX-like systems, you'll
-want to see *Note What is GNU Fortran?::.
-
- If you are new to GNU compilers, or have used only one GNU compiler
-in the past and not had to delve into how it lets you manage various
-versions and configurations of `gcc', you should see *Note G77 and
-GCC::.
-
- Everyone except experienced `g77' users should see *Note Invoking
-G77::.
-
- If you're acquainted with previous versions of `g77', you should see
-*Note News::. Further, if you've actually used previous versions of
-`g77', especially if you've written or modified Fortran code to be
-compiled by previous versions of `g77', you should see *Note Changes::.
-
- If you intend to write or otherwise compile code that is not already
-strictly conforming ANSI FORTRAN 77--and this is probably everyone--you
-should see *Note Language::.
-
- If you don't already have `g77' installed on your system, you must
-see *Note Installation::.
-
- If you run into trouble getting Fortran code to compile, link, run,
-or work properly, you might find answers if you see *Note Debugging and
-Interfacing::, see *Note Collected Fortran Wisdom::, and see *Note
-Trouble::. You might also find that the problems you are encountering
-are bugs in `g77'--see *Note Bugs::, for information on reporting them,
-after reading the other material.
-
- If you need further help with `g77', or with freely redistributable
-software in general, see *Note Service::.
-
- If you would like to help the `g77' project, see *Note Funding GNU
-Fortran::, for information on helping financially, and see *Note
-Projects::, for information on helping in other ways.
-
- If you're generally curious about the future of `g77', see *Note
-Projects::. If you're curious about its past, see *Note Contributors::,
-and see *Note Funding GNU Fortran::.
-
- To see a few of the questions maintainers of `g77' have, and that
-you might be able to answer, see *Note Open Questions::.
-
-\1f
-File: g77.info, Node: What is GNU Fortran?, Next: G77 and GCC, Prev: Getting Started, Up: Top
-
-What is GNU Fortran?
-********************
-
- GNU Fortran, or `g77', is designed initially as a free replacement
-for, or alternative to, the UNIX `f77' command. (Similarly, `gcc' is
-designed as a replacement for the UNIX `cc' command.)
-
- `g77' also is designed to fit in well with the other fine GNU
-compilers and tools.
-
- Sometimes these design goals conflict--in such cases, resolution
-often is made in favor of fitting in well with Project GNU. These
-cases are usually identified in the appropriate sections of this manual.
-
- As compilers, `g77', `gcc', and `f77' share the following
-characteristics:
-
- * They read a user's program, stored in a file and containing
- instructions written in the appropriate language (Fortran, C, and
- so on). This file contains "source code".
-
- * They translate the user's program into instructions a computer can
- carry out more quickly than it takes to translate the instructions
- in the first place. These instructions are called "machine
- code"--code designed to be efficiently translated and processed by
- a machine such as a computer. Humans usually aren't as good
- writing machine code as they are at writing Fortran or C, because
- it is easy to make tiny mistakes writing machine code. When
- writing Fortran or C, it is easy to make big mistakes.
-
- * They provide information in the generated machine code that can
- make it easier to find bugs in the program (using a debugging
- tool, called a "debugger", such as `gdb').
-
- * They locate and gather machine code already generated to perform
- actions requested by statements in the user's program. This
- machine code is organized into "libraries" and is located and
- gathered during the "link" phase of the compilation process.
- (Linking often is thought of as a separate step, because it can be
- directly invoked via the `ld' command. However, the `g77' and
- `gcc' commands, as with most compiler commands, automatically
- perform the linking step by calling on `ld' directly, unless asked
- to not do so by the user.)
-
- * They attempt to diagnose cases where the user's program contains
- incorrect usages of the language. The "diagnostics" produced by
- the compiler indicate the problem and the location in the user's
- source file where the problem was first noticed. The user can use
- this information to locate and fix the problem. (Sometimes an
- incorrect usage of the language leads to a situation where the
- compiler can no longer make any sense of what follows--while a
- human might be able to--and thus ends up complaining about many
- "problems" it encounters that, in fact, stem from just one
- problem, usually the first one reported.)
-
- * They attempt to diagnose cases where the user's program contains a
- correct usage of the language, but instructs the computer to do
- something questionable. These diagnostics often are in the form
- of "warnings", instead of the "errors" that indicate incorrect
- usage of the language.
-
- How these actions are performed is generally under the control of
-the user. Using command-line options, the user can specify how
-persnickety the compiler is to be regarding the program (whether to
-diagnose questionable usage of the language), how much time to spend
-making the generated machine code run faster, and so on.
-
- `g77' consists of several components:
-
- * A modified version of the `gcc' command, which also might be
- installed as the system's `cc' command. (In many cases, `cc'
- refers to the system's "native" C compiler, which might be a
- non-GNU compiler, or an older version of `gcc' considered more
- stable or that is used to build the operating system kernel.)
-
- * The `g77' command itself, which also might be installed as the
- system's `f77' command.
-
- * The `libf2c' run-time library. This library contains the machine
- code needed to support capabilities of the Fortran language that
- are not directly provided by the machine code generated by the
- `g77' compilation phase.
-
- * The compiler itself, internally named `f771'.
-
- Note that `f771' does not generate machine code directly--it
- generates "assembly code" that is a more readable form of machine
- code, leaving the conversion to actual machine code to an
- "assembler", usually named `as'.
-
- `gcc' is often thought of as "the C compiler" only, but it does more
-than that. Based on command-line options and the names given for files
-on the command line, `gcc' determines which actions to perform,
-including preprocessing, compiling (in a variety of possible
-languages), assembling, and linking.
-
- For example, the command `gcc foo.c' "drives" the file `foo.c'
-through the preprocessor `cpp', then the C compiler (internally named
-`cc1'), then the assembler (usually `as'), then the linker (`ld'),
-producing an executable program named `a.out' (on UNIX systems).
-
- As another example, the command `gcc foo.cc' would do much the same
-as `gcc foo.c', but instead of using the C compiler named `cc1', `gcc'
-would use the C++ compiler (named `cc1plus').
-
- In a GNU Fortran installation, `gcc' recognizes Fortran source files
-by name just like it does C and C++ source files. It knows to use the
-Fortran compiler named `f771', instead of `cc1' or `cc1plus', to
-compile Fortran files.
-
- Non-Fortran-related operation of `gcc' is generally unaffected by
-installing the GNU Fortran version of `gcc'. However, without the
-installed version of `gcc' being the GNU Fortran version, `gcc' will
-not be able to compile and link Fortran programs--and since `g77' uses
-`gcc' to do most of the actual work, neither will `g77'!
-
- The `g77' command is essentially just a front-end for the `gcc'
-command. Fortran users will normally use `g77' instead of `gcc',
-because `g77' knows how to specify the libraries needed to link with
-Fortran programs (`libf2c' and `lm'). `g77' can still compile and link
-programs and source files written in other languages, just like `gcc'.
-
- The command `g77 -v' is a quick way to display lots of version
-information for the various programs used to compile a typical
-preprocessed Fortran source file--this produces much more output than
-`gcc -v' currently does. (If it produces an error message near the end
-of the output--diagnostics from the linker, usually `ld'--you might
-have an out-of-date `libf2c' that improperly handles complex
-arithmetic.) In the output of this command, the line beginning `GNU
-Fortran Front End' identifies the version number of GNU Fortran;
-immediately preceding that line is a line identifying the version of
-`gcc' with which that version of `g77' was built.
-
- The `libf2c' library is distributed with GNU Fortran for the
-convenience of its users, but is not part of GNU Fortran. It contains
-the procedures needed by Fortran programs while they are running.
-
- For example, while code generated by `g77' is likely to do
-additions, subtractions, and multiplications "in line"--in the actual
-compiled code--it is not likely to do trigonometric functions this way.
-
- Instead, operations like trigonometric functions are compiled by the
-`f771' compiler (invoked by `g77' when compiling Fortran code) into
-machine code that, when run, calls on functions in `libf2c', so
-`libf2c' must be linked with almost every useful program having any
-component compiled by GNU Fortran. (As mentioned above, the `g77'
-command takes care of all this for you.)
-
- The `f771' program represents most of what is unique to GNU Fortran.
-While much of the `libf2c' component is really part of `f2c', a free
-Fortran-to-C converter distributed by Bellcore (AT&T), plus `libU77',
-provided by Dave Love, and the `g77' command is just a small front-end
-to `gcc', `f771' is a combination of two rather large chunks of code.
-
- One chunk is the so-called "GNU Back End", or GBE, which knows how
-to generate fast code for a wide variety of processors. The same GBE
-is used by the C, C++, and Fortran compiler programs `cc1', `cc1plus',
-and `f771', plus others. Often the GBE is referred to as the "gcc back
-end" or even just "gcc"--in this manual, the term GBE is used whenever
-the distinction is important.
-
- The other chunk of `f771' is the majority of what is unique about
-GNU Fortran--the code that knows how to interpret Fortran programs to
-determine what they are intending to do, and then communicate that
-knowledge to the GBE for actual compilation of those programs. This
-chunk is called the "Fortran Front End" (FFE). The `cc1' and `cc1plus'
-programs have their own front ends, for the C and C++ languages,
-respectively. These fronts ends are responsible for diagnosing
-incorrect usage of their respective languages by the programs the
-process, and are responsible for most of the warnings about
-questionable constructs as well. (The GBE handles producing some
-warnings, like those concerning possible references to undefined
-variables.)
-
- Because so much is shared among the compilers for various languages,
-much of the behavior and many of the user-selectable options for these
-compilers are similar. For example, diagnostics (error messages and
-warnings) are similar in appearance; command-line options like `-Wall'
-have generally similar effects; and the quality of generated code (in
-terms of speed and size) is roughly similar (since that work is done by
-the shared GBE).
-
-\1f
-File: g77.info, Node: G77 and GCC, Next: Invoking G77, Prev: What is GNU Fortran?, Up: Top
-
-Compile Fortran, C, or Other Programs
-*************************************
-
- A GNU Fortran installation includes a modified version of the `gcc'
-command.
-
- In a non-Fortran installation, `gcc' recognizes C, C++, and
-Objective-C source files.
-
- In a GNU Fortran installation, `gcc' also recognizes Fortran source
-files and accepts Fortran-specific command-line options, plus some
-command-line options that are designed to cater to Fortran users but
-apply to other languages as well.
-
- *Note Compile C; C++; or Objective-C: (gcc)G++ and GCC, for
-information on the way different languages are handled by the GNU CC
-compiler (`gcc').
-
- Also provided as part of GNU Fortran is the `g77' command. The
-`g77' command is designed to make compiling and linking Fortran
-programs somewhat easier than when using the `gcc' command for these
-tasks. It does this by analyzing the command line somewhat and
-changing it appropriately before submitting it to the `gcc' command.
-
- Use the `-v' option with `g77' to see what is going on--the first
-line of output is the invocation of the `gcc' command. Use
-`--driver=true' to disable actual invocation of `gcc' (this works
-because `true' is the name of a UNIX command that simply returns
-success status).
-
-\1f
-File: g77.info, Node: Invoking G77, Next: News, Prev: G77 and GCC, Up: Top
-
-GNU Fortran Command Options
-***************************
-
- The `g77' command supports all the options supported by the `gcc'
-command. *Note GNU CC Command Options: (gcc)Invoking GCC, for
-information on the non-Fortran-specific aspects of the `gcc' command
-(and, therefore, the `g77' command).
-
- The `g77' command supports one option not supported by the `gcc'
-command:
-
-`--driver=COMMAND'
- Specifies that COMMAND, rather than `gcc', is to be invoked by
- `g77' to do its job. For example, within the `gcc' build
- directory after building GNU Fortran (but without having to
- install it), `./g77 --driver=./xgcc foo.f -B./'.
-
- All other options are supported both by `g77' and by `gcc' as
-modified (and reinstalled) by the `g77' distribution. In some cases,
-options have positive and negative forms; the negative form of `-ffoo'
-would be `-fno-foo'. This manual documents only one of these two
-forms, whichever one is not the default.
-
-* Menu:
-
-* Option Summary:: Brief list of all `g77' options,
- without explanations.
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-* Environment Variables:: Env vars that affect GNU Fortran.
-
-\1f
-File: g77.info, Node: Option Summary, Next: Overall Options, Up: Invoking G77
-
-Option Summary
-==============
-
- Here is a summary of all the options specific to GNU Fortran, grouped
-by type. Explanations are in the following sections.
-
-*Overall Options*
- *Note Options Controlling the Kind of Output: Overall Options.
- --driver -fversion -fset-g77-defaults -fno-silent
-
-*Shorthand Options*
- *Note Shorthand Options::.
- -ff66 -fno-f66 -ff77 -fno-f77 -fugly -fno-ugly
-
-*Fortran Language Options*
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options.
- -ffree-form -fno-fixed-form -ff90
- -fvxt -fdollar-ok -fno-backslash
- -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
- -fugly-comma -fugly-complex -fugly-init -fugly-logint
- -fonetrip -ftypeless-boz
- -fintrin-case-initcap -fintrin-case-upper
- -fintrin-case-lower -fintrin-case-any
- -fmatch-case-initcap -fmatch-case-upper
- -fmatch-case-lower -fmatch-case-any
- -fsource-case-upper -fsource-case-lower -fsource-case-preserve
- -fsymbol-case-initcap -fsymbol-case-upper
- -fsymbol-case-lower -fsymbol-case-any
- -fcase-strict-upper -fcase-strict-lower
- -fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
- -ff2c-intrinsics-delete -ff2c-intrinsics-hide
- -ff2c-intrinsics-disable -ff2c-intrinsics-enable
- -ff90-intrinsics-delete -ff90-intrinsics-hide
- -ff90-intrinsics-disable -ff90-intrinsics-enable
- -fgnu-intrinsics-delete -fgnu-intrinsics-hide
- -fgnu-intrinsics-disable -fgnu-intrinsics-enable
- -fmil-intrinsics-delete -fmil-intrinsics-hide
- -fmil-intrinsics-disable -fmil-intrinsics-enable
- -funix-intrinsics-delete -funix-intrinsics-hide
- -funix-intrinsics-disable -funix-intrinsics-enable
- -fvxt-intrinsics-delete -fvxt-intrinsics-hide
- -fvxt-intrinsics-disable -fvxt-intrinsics-enable
- -ffixed-line-length-N -ffixed-line-length-none
-
-*Warning Options*
- *Note Options to Request or Suppress Warnings: Warning Options.
- -fsyntax-only -pedantic -pedantic-errors -fpedantic
- -w -Wno-globals -Wimplicit -Wunused -Wuninitialized
- -Wall -Wsurprising
- -Werror -W
-
-*Debugging Options*
- *Note Options for Debugging Your Program or GCC: Debugging Options.
- -g
-
-*Optimization Options*
- *Note Options that Control Optimization: Optimize Options.
- -malign-double
- -ffloat-store -fforce-mem -fforce-addr -fno-inline
- -ffast-math -fstrength-reduce -frerun-cse-after-loop
- -fexpensive-optimizations -fdelayed-branch
- -fschedule-insns -fschedule-insn2 -fcaller-saves
- -funroll-loops -funroll-all-loops
- -fno-move-all-movables -fno-reduce-all-givs
- -fno-rerun-loop-opt
-
-*Directory Options*
- *Note Options for Directory Search: Directory Options.
- -IDIR -I-
-
-*Code Generation Options*
- *Note Options for Code Generation Conventions: Code Gen Options.
- -fno-automatic -finit-local-zero -fno-f2c
- -ff2c-library -fno-underscoring -fno-ident
- -fpcc-struct-return -freg-struct-return
- -fshort-double -fno-common -fpack-struct
- -fzeros -fno-second-underscore
- -fdebug-kludge -fno-emulate-complex
- -falias-check -fargument-alias
- -fargument-noalias -fno-argument-noalias-global
- -fno-globals
-
-* Menu:
-
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: SymLnk Intrinsic (subroutine), Next: System Intrinsic (subroutine), Prev: Sum Intrinsic, Up: Table of Intrinsic Functions
-
-SymLnk Intrinsic (subroutine)
-.............................
-
- CALL SymLnk(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Makes a symbolic link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return (`ENOSYS' if the system does not provide `symlink(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note SymLnk
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: System Intrinsic (subroutine), Next: System_Clock Intrinsic, Prev: SymLnk Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-System Intrinsic (subroutine)
-.............................
-
- CALL System(COMMAND, STATUS)
-
-COMMAND: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Passes the command COMMAND to a shell (see `system(3)'). If
-argument STATUS is present, it contains the value returned by
-`system(3)', presumably 0 if the shell command succeeded. Note that
-which shell is used to invoke the command is system-dependent and
-environment-dependent.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note System
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: System_Clock Intrinsic, Next: Tan Intrinsic, Prev: System Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-System_Clock Intrinsic
-......................
-
- CALL System_Clock(COUNT, RATE, MAX)
-
-COUNT: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-RATE: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-MAX: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns in COUNT the current value of the system clock; this is the
-value returned by the UNIX function `times(2)' in this implementation,
-but isn't in general. RATE is the number of clock ticks per second and
-MAX is the maximum value this can take, which isn't very useful in this
-implementation since it's just the maximum C `unsigned int' value.
-
-\1f
-File: g77.info, Node: Tan Intrinsic, Next: TanH Intrinsic, Prev: System_Clock Intrinsic, Up: Table of Intrinsic Functions
-
-Tan Intrinsic
-.............
-
- Tan(X)
-
-Tan: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the tangent of X, an angle measured in radians.
-
- *Note ATan Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: TanH Intrinsic, Next: Time Intrinsic (UNIX), Prev: Tan Intrinsic, Up: Table of Intrinsic Functions
-
-TanH Intrinsic
-..............
-
- TanH(X)
-
-TanH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic tangent of X.
-
-\1f
-File: g77.info, Node: Time Intrinsic (UNIX), Next: Time8 Intrinsic, Prev: TanH Intrinsic, Up: Table of Intrinsic Functions
-
-Time Intrinsic (UNIX)
-.....................
-
- Time()
-
-Time: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current time encoded as an integer (in the manner of the
-UNIX function `time(3)'). This value is suitable for passing to
-`CTIME', `GMTIME', and `LTIME'.
-
- This intrinsic is not fully portable, such as to systems with 32-bit
-`INTEGER' types but supporting times wider than 32 bits. *Note Time8
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more GNU Fortran implementations, though to fewer Fortran
-compilers.
-
- For information on other intrinsics with the same name: *Note Time
-Intrinsic (VXT)::.
-
-\1f
-File: g77.info, Node: Time8 Intrinsic, Next: Tiny Intrinsic, Prev: Time Intrinsic (UNIX), Up: Table of Intrinsic Functions
-
-Time8 Intrinsic
-...............
-
- Time8()
-
-Time8: `INTEGER(KIND=2)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current time encoded as a long integer (in the manner of
-the UNIX function `time(3)'). This value is suitable for passing to
-`CTIME', `GMTIME', and `LTIME'.
-
- No Fortran implementations other than GNU Fortran are known to
-support this intrinsic at the time of this writing. *Note Time
-Intrinsic (UNIX)::, for information on a similar intrinsic that might
-be portable to more Fortran compilers, though to fewer GNU Fortran
-implementations.
-
-\1f
-File: g77.info, Node: Tiny Intrinsic, Next: Transfer Intrinsic, Prev: Time8 Intrinsic, Up: Table of Intrinsic Functions
-
-Tiny Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Tiny' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Transfer Intrinsic, Next: Transpose Intrinsic, Prev: Tiny Intrinsic, Up: Table of Intrinsic Functions
-
-Transfer Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Transfer' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Transpose Intrinsic, Next: Trim Intrinsic, Prev: Transfer Intrinsic, Up: Table of Intrinsic Functions
-
-Transpose Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Transpose' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: Trim Intrinsic, Next: TtyNam Intrinsic (subroutine), Prev: Transpose Intrinsic, Up: Table of Intrinsic Functions
-
-Trim Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Trim' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: TtyNam Intrinsic (subroutine), Next: TtyNam Intrinsic (function), Prev: Trim Intrinsic, Up: Table of Intrinsic Functions
-
-TtyNam Intrinsic (subroutine)
-.............................
-
- CALL TtyNam(NAME, UNIT)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets NAME to the name of the terminal device open on logical unit
-UNIT or a blank string if UNIT is not connected to a terminal.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note TtyNam
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: TtyNam Intrinsic (function), Next: UBound Intrinsic, Prev: TtyNam Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-TtyNam Intrinsic (function)
-...........................
-
- TtyNam(UNIT)
-
-TtyNam: `CHARACTER*(*)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the name of the terminal device open on logical unit UNIT or
-a blank string if UNIT is not connected to a terminal.
-
- For information on other intrinsics with the same name: *Note TtyNam
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: UBound Intrinsic, Next: UMask Intrinsic (subroutine), Prev: TtyNam Intrinsic (function), Up: Table of Intrinsic Functions
-
-UBound Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL UBound' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: UMask Intrinsic (subroutine), Next: Unlink Intrinsic (subroutine), Prev: UBound Intrinsic, Up: Table of Intrinsic Functions
-
-UMask Intrinsic (subroutine)
-............................
-
- CALL UMask(MASK, OLD)
-
-MASK: `INTEGER'; scalar; INTENT(IN).
-
-OLD: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets the file creation mask to MASK and returns the old value in
-argument OLD if it is supplied. See `umask(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note UMask
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Unlink Intrinsic (subroutine), Next: Unpack Intrinsic, Prev: UMask Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Unlink Intrinsic (subroutine)
-.............................
-
- CALL Unlink(FILE, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Unlink the file FILE. A null character (`CHAR(0)') marks the end of
-the name in FILE--otherwise, trailing blanks in FILE are ignored. If
-the STATUS argument is supplied, it contains 0 on success or a non-zero
-error code upon return. See `unlink(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Unlink
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Unpack Intrinsic, Next: Verify Intrinsic, Prev: Unlink Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Unpack Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Unpack' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Verify Intrinsic, Next: XOr Intrinsic, Prev: Unpack Intrinsic, Up: Table of Intrinsic Functions
-
-Verify Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Verify' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: XOr Intrinsic, Next: ZAbs Intrinsic, Prev: Verify Intrinsic, Up: Table of Intrinsic Functions
-
-XOr Intrinsic
-.............
-
- XOr(I, J)
-
-XOr: `INTEGER' or `LOGICAL' function, the exact type being the result
-of cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean exclusive-OR of pair of bits in
-each of I and J.
-
-\1f
-File: g77.info, Node: ZAbs Intrinsic, Next: ZCos Intrinsic, Prev: XOr Intrinsic, Up: Table of Intrinsic Functions
-
-ZAbs Intrinsic
-..............
-
- ZAbs(A)
-
-ZAbs: `REAL(KIND=2)' function.
-
-A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-\1f
-File: g77.info, Node: ZCos Intrinsic, Next: ZExp Intrinsic, Prev: ZAbs Intrinsic, Up: Table of Intrinsic Functions
-
-ZCos Intrinsic
-..............
-
- ZCos(X)
-
-ZCos: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-\1f
-File: g77.info, Node: ZExp Intrinsic, Next: ZLog Intrinsic, Prev: ZCos Intrinsic, Up: Table of Intrinsic Functions
-
-ZExp Intrinsic
-..............
-
- ZExp(X)
-
-ZExp: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-\1f
-File: g77.info, Node: ZLog Intrinsic, Next: ZSin Intrinsic, Prev: ZExp Intrinsic, Up: Table of Intrinsic Functions
-
-ZLog Intrinsic
-..............
-
- ZLog(X)
-
-ZLog: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-\1f
-File: g77.info, Node: ZSin Intrinsic, Next: ZSqRt Intrinsic, Prev: ZLog Intrinsic, Up: Table of Intrinsic Functions
-
-ZSin Intrinsic
-..............
-
- ZSin(X)
-
-ZSin: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-\1f
-File: g77.info, Node: ZSqRt Intrinsic, Prev: ZSin Intrinsic, Up: Table of Intrinsic Functions
-
-ZSqRt Intrinsic
-...............
-
- ZSqRt(X)
-
-ZSqRt: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-\1f
-File: g77.info, Node: Scope and Classes of Names, Prev: Functions and Subroutines, Up: Language
-
-Scope and Classes of Symbolic Names
-===================================
-
- (The following information augments or overrides the information in
-Chapter 18 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 18 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Underscores in Symbol Names::
-
-\1f
-File: g77.info, Node: Underscores in Symbol Names, Up: Scope and Classes of Names
-
-Underscores in Symbol Names
----------------------------
-
- Underscores (`_') are accepted in symbol names after the first
-character (which must be a letter).
-
-\1f
-File: g77.info, Node: Other Dialects, Next: Other Compilers, Prev: Compiler, Up: Top
-
-Other Dialects
-**************
-
- GNU Fortran supports a variety of features that are not considered
-part of the GNU Fortran language itself, but are representative of
-various dialects of Fortran that `g77' supports in whole or in part.
-
- Any of the features listed below might be disallowed by `g77' unless
-some command-line option is specified. Currently, some of the features
-are accepted using the default invocation of `g77', but that might
-change in the future.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Source Form:: Details of fixed-form and free-form source.
-* Trailing Comment:: Use of `/*' to start a comment.
-* Debug Line:: Use of `D' in column 1.
-* Dollar Signs:: Use of `$' in symbolic names.
-* Case Sensitivity:: Uppercase and lowercase in source files.
-* VXT Fortran:: ...versus the GNU Fortran language.
-* Fortran 90:: ...versus the GNU Fortran language.
-* Pedantic Compilation:: Enforcing the standard.
-* Distensions:: Misfeatures supported by GNU Fortran.
-
-\1f
-File: g77.info, Node: Source Form, Next: Trailing Comment, Up: Other Dialects
-
-Source Form
-===========
-
- GNU Fortran accepts programs written in either fixed form or free
-form.
-
- Fixed form corresponds to ANSI FORTRAN 77 (plus popular extensions,
-such as allowing tabs) and Fortran 90's fixed form.
-
- Free form corresponds to Fortran 90's free form (though possibly not
-entirely up-to-date, and without complaining about some things that for
-which Fortran 90 requires diagnostics, such as the spaces in the
-constant in `R = 3 . 1').
-
- The way a Fortran compiler views source files depends entirely on the
-implementation choices made for the compiler, since those choices are
-explicitly left to the implementation by the published Fortran
-standards. GNU Fortran currently tries to be somewhat like a few
-popular compilers (`f2c', Digital ("DEC") Fortran, and so on), though a
-cleaner default definition along with more flexibility offered by
-command-line options is likely to be offered in version 0.6.
-
- This section describes how `g77' interprets source lines.
-
-* Menu:
-
-* Carriage Returns:: Carriage returns ignored.
-* Tabs:: Tabs converted to spaces.
-* Short Lines:: Short lines padded with spaces (fixed-form only).
-* Long Lines:: Long lines truncated.
-* Ampersands:: Special Continuation Lines.
-
-\1f
-File: g77.info, Node: Carriage Returns, Next: Tabs, Up: Source Form
-
-Carriage Returns
-----------------
-
- Carriage returns (`\r') in source lines are ignored. This is
-somewhat different from `f2c', which seems to treat them as spaces
-outside character/Hollerith constants, and encodes them as `\r' inside
-such constants.
-
-\1f
-File: g77.info, Node: Tabs, Next: Short Lines, Prev: Carriage Returns, Up: Source Form
-
-Tabs
-----
-
- A source line with a <TAB> character anywhere in it is treated as
-entirely significant--however long it is--instead of ending in column
-72 (for fixed-form source) or 132 (for free-form source). This also is
-different from `f2c', which encodes tabs as `\t' (the ASCII <TAB>
-character) inside character and Hollerith constants, but nevertheless
-seems to treat the column position as if it had been affected by the
-canonical tab positioning.
-
- `g77' effectively translates tabs to the appropriate number of
-spaces (a la the default for the UNIX `expand' command) before doing
-any other processing, other than (currently) noting whether a tab was
-found on a line and using this information to decide how to interpret
-the length of the line and continued constants.
-
- Note that this default behavior probably will change for version 0.6,
-when it will presumably be available via a command-line option. The
-default as of version 0.6 is planned to be a "pure visual" model, where
-tabs are immediately converted to spaces and otherwise have no effect,
-so the way a typical user sees source lines produces a consistent
-result no matter how the spacing in those source lines is actually
-implemented via tabs, spaces, and trailing tabs/spaces before newline.
-Command-line options are likely to be added to specify whether all or
-just-tabbed lines are to be extended to 132 or full input-line length,
-and perhaps even an option will be added to specify the truncated-line
-behavior to which some Digital compilers default (and which affects the
-way continued character/Hollerith constants are interpreted).
-
-\1f
-File: g77.info, Node: Short Lines, Next: Long Lines, Prev: Tabs, Up: Source Form
-
-Short Lines
------------
-
- Source lines shorter than the applicable fixed-form length are
-treated as if they were padded with spaces to that length. (None of
-this is relevant to source files written in free form.)
-
- This affects only continued character and Hollerith constants, and
-is a different interpretation than provided by some other popular
-compilers (although a bit more consistent with the traditional
-punched-card basis of Fortran and the way the Fortran standard
-expressed fixed source form).
-
- `g77' might someday offer an option to warn about cases where
-differences might be seen as a result of this treatment, and perhaps an
-option to specify the alternate behavior as well.
-
- Note that this padding cannot apply to lines that are effectively of
-infinite length--such lines are specified using command-line options
-like `-ffixed-line-length-none', for example.
-
-\1f
-File: g77.info, Node: Long Lines, Next: Ampersands, Prev: Short Lines, Up: Source Form
-
-Long Lines
-----------
-
- Source lines longer than the applicable length are truncated to that
-length. Currently, `g77' does not warn if the truncated characters are
-not spaces, to accommodate existing code written for systems that
-treated truncated text as commentary (especially in columns 73 through
-80).
-
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
-for information on the `-ffixed-line-length-N' option, which can be
-used to set the line length applicable to fixed-form source files.
-
-\1f
-File: g77.info, Node: Ampersands, Prev: Long Lines, Up: Source Form
-
-Ampersand Continuation Line
----------------------------
-
- A `&' in column 1 of fixed-form source denotes an arbitrary-length
-continuation line, imitating the behavior of `f2c'.
-
-\1f
-File: g77.info, Node: Trailing Comment, Next: Debug Line, Prev: Source Form, Up: Other Dialects
-
-Trailing Comment
-================
-
- `g77' supports use of `/*' to start a trailing comment. In the GNU
-Fortran language, `!' is used for this purpose.
-
- `/*' is not in the GNU Fortran language because the use of `/*' in a
-program might suggest to some readers that a block, not trailing,
-comment is started (and thus ended by `*/', not end of line), since
-that is the meaning of `/*' in C.
-
- Also, such readers might think they can use `//' to start a trailing
-comment as an alternative to `/*', but `//' already denotes
-concatenation, and such a "comment" might actually result in a program
-that compiles without error (though it would likely behave incorrectly).
-
-\1f
-File: g77.info, Node: Debug Line, Next: Dollar Signs, Prev: Trailing Comment, Up: Other Dialects
-
-Debug Line
-==========
-
- Use of `D' or `d' as the first character (column 1) of a source line
-denotes a debug line.
-
- In turn, a debug line is treated as either a comment line or a
-normal line, depending on whether debug lines are enabled.
-
- When treated as a comment line, a line beginning with `D' or `d' is
-treated as if it the first character was `C' or `c', respectively.
-When treated as a normal line, such a line is treated as if the first
-character was <SPC> (space).
-
- (Currently, `g77' provides no means for treating debug lines as
-normal lines.)
-
-\1f
-File: g77.info, Node: Dollar Signs, Next: Case Sensitivity, Prev: Debug Line, Up: Other Dialects
-
-Dollar Signs in Symbol Names
-============================
-
- Dollar signs (`$') are allowed in symbol names (after the first
-character) when the `-fdollar-ok' option is specified.
-
-\1f
-File: g77.info, Node: Case Sensitivity, Next: VXT Fortran, Prev: Dollar Signs, Up: Other Dialects
-
-Case Sensitivity
-================
-
- GNU Fortran offers the programmer way too much flexibility in
-deciding how source files are to be treated vis-a-vis uppercase and
-lowercase characters. There are 66 useful settings that affect case
-sensitivity, plus 10 settings that are nearly useless, with the
-remaining 116 settings being either redundant or useless.
-
- None of these settings have any effect on the contents of comments
-(the text after a `c' or `C' in Column 1, for example) or of character
-or Hollerith constants. Note that things like the `E' in the statement
-`CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered
-built-in keywords, and so are affected by these settings.
-
- Low-level switches are identified in this section as follows:
-
- A Source Case Conversion:
-
- 0 Preserve (see Note 1)
-
- 1 Convert to Upper Case
-
- 2 Convert to Lower Case
-
- B Built-in Keyword Matching:
-
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- C Built-in Intrinsic Matching:
-
- 0 Match Any Case (per-character basis)
-
- 1 Match Upper Case Only
-
- 2 Match Lower Case Only
-
- 3 Match InitialCaps Only (see tables for spellings)
-
- D User-defined Symbol Possibilities (warnings only):
-
- 0 Allow Any Case (per-character basis)
-
- 1 Allow Upper Case Only
-
- 2 Allow Lower Case Only
-
- 3 Allow InitialCaps Only (see Note 2)
-
- Note 1: `g77' eventually will support `NAMELIST' in a manner that is
-consistent with these source switches--in the sense that input will be
-expected to meet the same requirements as source code in terms of
-matching symbol names and keywords (for the exponent letters).
-
- Currently, however, `NAMELIST' is supported by `libf2c', which
-uppercases `NAMELIST' input and symbol names for matching. This means
-not only that `NAMELIST' output currently shows symbol (and keyword)
-names in uppercase even if lower-case source conversion (option A2) is
-selected, but that `NAMELIST' cannot be adequately supported when
-source case preservation (option A0) is selected.
-
- If A0 is selected, a warning message will be output for each
-`NAMELIST' statement to this effect. The behavior of the program is
-undefined at run time if two or more symbol names appear in a given
-`NAMELIST' such that the names are identical when converted to upper
-case (e.g. `NAMELIST /X/ VAR, Var, var'). For complete and total
-elegance, perhaps there should be a warning when option A2 is selected,
-since the output of NAMELIST is currently in uppercase but will someday
-be lowercase (when a `libg77' is written), but that seems to be
-overkill for a product in beta test.
-
- Note 2: Rules for InitialCaps names are:
-
- - Must be a single uppercase letter, *or*
-
- - Must start with an uppercase letter and contain at least one
- lowercase letter.
-
- So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names,
-but `AB', `A2', and `ABC' are not. Note that most, but not all,
-built-in names meet these requirements--the exceptions are some of the
-two-letter format specifiers, such as `BN' and `BZ'.
-
- Here are the names of the corresponding command-line options:
-
- A0: -fsource-case-preserve
- A1: -fsource-case-upper
- A2: -fsource-case-lower
-
- B0: -fmatch-case-any
- B1: -fmatch-case-upper
- B2: -fmatch-case-lower
- B3: -fmatch-case-initcap
-
- C0: -fintrin-case-any
- C1: -fintrin-case-upper
- C2: -fintrin-case-lower
- C3: -fintrin-case-initcap
-
- D0: -fsymbol-case-any
- D1: -fsymbol-case-upper
- D2: -fsymbol-case-lower
- D3: -fsymbol-case-initcap
-
- Useful combinations of the above settings, along with abbreviated
-option names that set some of these combinations all at once:
-
- 1: A0-- B0--- C0--- D0--- -fcase-preserve
- 2: A0-- B0--- C0--- D-1--
- 3: A0-- B0--- C0--- D--2-
- 4: A0-- B0--- C0--- D---3
- 5: A0-- B0--- C-1-- D0---
- 6: A0-- B0--- C-1-- D-1--
- 7: A0-- B0--- C-1-- D--2-
- 8: A0-- B0--- C-1-- D---3
- 9: A0-- B0--- C--2- D0---
- 10: A0-- B0--- C--2- D-1--
- 11: A0-- B0--- C--2- D--2-
- 12: A0-- B0--- C--2- D---3
- 13: A0-- B0--- C---3 D0---
- 14: A0-- B0--- C---3 D-1--
- 15: A0-- B0--- C---3 D--2-
- 16: A0-- B0--- C---3 D---3
- 17: A0-- B-1-- C0--- D0---
- 18: A0-- B-1-- C0--- D-1--
- 19: A0-- B-1-- C0--- D--2-
- 20: A0-- B-1-- C0--- D---3
- 21: A0-- B-1-- C-1-- D0---
- 22: A0-- B-1-- C-1-- D-1-- -fcase-strict-upper
- 23: A0-- B-1-- C-1-- D--2-
- 24: A0-- B-1-- C-1-- D---3
- 25: A0-- B-1-- C--2- D0---
- 26: A0-- B-1-- C--2- D-1--
- 27: A0-- B-1-- C--2- D--2-
- 28: A0-- B-1-- C--2- D---3
- 29: A0-- B-1-- C---3 D0---
- 30: A0-- B-1-- C---3 D-1--
- 31: A0-- B-1-- C---3 D--2-
- 32: A0-- B-1-- C---3 D---3
- 33: A0-- B--2- C0--- D0---
- 34: A0-- B--2- C0--- D-1--
- 35: A0-- B--2- C0--- D--2-
- 36: A0-- B--2- C0--- D---3
- 37: A0-- B--2- C-1-- D0---
- 38: A0-- B--2- C-1-- D-1--
- 39: A0-- B--2- C-1-- D--2-
- 40: A0-- B--2- C-1-- D---3
- 41: A0-- B--2- C--2- D0---
- 42: A0-- B--2- C--2- D-1--
- 43: A0-- B--2- C--2- D--2- -fcase-strict-lower
- 44: A0-- B--2- C--2- D---3
- 45: A0-- B--2- C---3 D0---
- 46: A0-- B--2- C---3 D-1--
- 47: A0-- B--2- C---3 D--2-
- 48: A0-- B--2- C---3 D---3
- 49: A0-- B---3 C0--- D0---
- 50: A0-- B---3 C0--- D-1--
- 51: A0-- B---3 C0--- D--2-
- 52: A0-- B---3 C0--- D---3
- 53: A0-- B---3 C-1-- D0---
- 54: A0-- B---3 C-1-- D-1--
- 55: A0-- B---3 C-1-- D--2-
- 56: A0-- B---3 C-1-- D---3
- 57: A0-- B---3 C--2- D0---
- 58: A0-- B---3 C--2- D-1--
- 59: A0-- B---3 C--2- D--2-
- 60: A0-- B---3 C--2- D---3
- 61: A0-- B---3 C---3 D0---
- 62: A0-- B---3 C---3 D-1--
- 63: A0-- B---3 C---3 D--2-
- 64: A0-- B---3 C---3 D---3 -fcase-initcap
- 65: A-1- B01-- C01-- D01-- -fcase-upper
- 66: A--2 B0-2- C0-2- D0-2- -fcase-lower
-
- Number 22 is the "strict" ANSI FORTRAN 77 model wherein all input
-(except comments, character constants, and Hollerith strings) must be
-entered in uppercase. Use `-fcase-strict-upper' to specify this
-combination.
-
- Number 43 is like Number 22 except all input must be lowercase. Use
-`-fcase-strict-lower' to specify this combination.
-
- Number 65 is the "classic" ANSI FORTRAN 77 model as implemented on
-many non-UNIX machines whereby all the source is translated to
-uppercase. Use `-fcase-upper' to specify this combination.
-
- Number 66 is the "canonical" UNIX model whereby all the source is
-translated to lowercase. Use `-fcase-lower' to specify this
-combination.
-
- There are a few nearly useless combinations:
-
- 67: A-1- B01-- C01-- D--2-
- 68: A-1- B01-- C01-- D---3
- 69: A-1- B01-- C--23 D01--
- 70: A-1- B01-- C--23 D--2-
- 71: A-1- B01-- C--23 D---3
- 72: A--2 B01-- C0-2- D-1--
- 73: A--2 B01-- C0-2- D---3
- 74: A--2 B01-- C-1-3 D0-2-
- 75: A--2 B01-- C-1-3 D-1--
- 76: A--2 B01-- C-1-3 D---3
-
- The above allow some programs to be compiled but with restrictions
-that make most useful programs impossible: Numbers 67 and 72 warn about
-*any* user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68
-and 73 warn about any user-defined symbol names longer than one
-character that don't have at least one non-alphabetic character after
-the first; Numbers 69 and 74 disallow any references to intrinsics; and
-Numbers 70, 71, 75, and 76 are combinations of the restrictions in
-67+69, 68+69, 72+74, and 73+74, respectively.
-
- All redundant combinations are shown in the above tables anyplace
-where more than one setting is shown for a low-level switch. For
-example, `B0-2-' means either setting 0 or 2 is valid for switch B.
-The "proper" setting in such a case is the one that copies the setting
-of switch A--any other setting might slightly reduce the speed of the
-compiler, though possibly to an unmeasurable extent.
-
- All remaining combinations are useless in that they prevent
-successful compilation of non-null source files (source files with
-something other than comments).
-
-\1f
-File: g77.info, Node: VXT Fortran, Next: Fortran 90, Prev: Case Sensitivity, Up: Other Dialects
-
-VXT Fortran
-===========
-
- `g77' supports certain constructs that have different meanings in
-VXT Fortran than they do in the GNU Fortran language.
-
- Generally, this manual uses the invented term VXT Fortran to refer
-VAX FORTRAN (circa v4). That compiler offered many popular features,
-though not necessarily those that are specific to the VAX processor
-architecture, the VMS operating system, or Digital Equipment
-Corporation's Fortran product line. (VAX and VMS probably are
-trademarks of Digital Equipment Corporation.)
-
- An extension offered by a Digital Fortran product that also is
-offered by several other Fortran products for different kinds of
-systems is probably going to be considered for inclusion in `g77'
-someday, and is considered a VXT Fortran feature.
-
- The `-fvxt' option generally specifies that, where the meaning of a
-construct is ambiguous (means one thing in GNU Fortran and another in
-VXT Fortran), the VXT Fortran meaning is to be assumed.
-
-* Menu:
-
-* Double Quote Meaning:: `"2000' as octal constant.
-* Exclamation Point:: `!' in column 6.
-
-\1f
-File: g77.info, Node: Double Quote Meaning, Next: Exclamation Point, Up: VXT Fortran
-
-Meaning of Double Quote
------------------------
-
- `g77' treats double-quote (`"') as beginning an octal constant of
-`INTEGER(KIND=1)' type when the `-fvxt' option is specified. The form
-of this octal constant is
-
- "OCTAL-DIGITS
-
-where OCTAL-DIGITS is a nonempty string of characters in the set
-`01234567'.
-
- For example, the `-fvxt' option permits this:
-
- PRINT *, "20
- END
-
-The above program would print the value `16'.
-
- *Note Integer Type::, for information on the preferred construct for
-integer constants specified using GNU Fortran's octal notation.
-
- (In the GNU Fortran language, the double-quote character (`"')
-delimits a character constant just as does apostrophe (`''). There is
-no way to allow both constructs in the general case, since statements
-like `PRINT *,"2000 !comment?"' would be ambiguous.)
-
-\1f
-File: g77.info, Node: Exclamation Point, Prev: Double Quote Meaning, Up: VXT Fortran
-
-Meaning of Exclamation Point in Column 6
-----------------------------------------
-
- `g77' treats an exclamation point (`!') in column 6 of a fixed-form
-source file as a continuation character rather than as the beginning of
-a comment (as it does in any other column) when the `-fvxt' option is
-specified.
-
- The following program, when run, prints a message indicating whether
-it is interpreted according to GNU Fortran (and Fortran 90) rules or
-VXT Fortran rules:
-
- C234567 (This line begins in column 1.)
- I = 0
- !1
- IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program'
- IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program'
- IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer'
- END
-
- (In the GNU Fortran and Fortran 90 languages, exclamation point is a
-valid character and, unlike space (<SPC>) or zero (`0'), marks a line
-as a continuation line when it appears in column 6.)
-
-\1f
-File: g77.info, Node: Fortran 90, Next: Pedantic Compilation, Prev: VXT Fortran, Up: Other Dialects
-
-Fortran 90
-==========
-
- The GNU Fortran language includes a number of features that are part
-of Fortran 90, even when the `-ff90' option is not specified. The
-features enabled by `-ff90' are intended to be those that, when `-ff90'
-is not specified, would have another meaning to `g77'--usually meaning
-something invalid in the GNU Fortran language.
-
- So, the purpose of `-ff90' is not to specify whether `g77' is to
-gratuitously reject Fortran 90 constructs. The `-pedantic' option
-specified with `-fno-f90' is intended to do that, although its
-implementation is certainly incomplete at this point.
-
- When `-ff90' is specified:
-
- * The type of `REAL(EXPR)' and `AIMAG(EXPR)', where EXPR is
- `COMPLEX' type, is the same type as the real part of EXPR.
-
- For example, assuming `Z' is type `COMPLEX(KIND=2)', `REAL(Z)'
- would return a value of type `REAL(KIND=2)', not of type
- `REAL(KIND=1)', since `-ff90' is specified.
-
-\1f
-File: g77.info, Node: Pedantic Compilation, Next: Distensions, Prev: Fortran 90, Up: Other Dialects
-
-Pedantic Compilation
-====================
-
- The `-fpedantic' command-line option specifies that `g77' is to warn
-about code that is not standard-conforming. This is useful for finding
-some extensions `g77' accepts that other compilers might not accept.
-(Note that the `-pedantic' and `-pedantic-errors' options always imply
-`-fpedantic'.)
-
- With `-fno-f90' in force, ANSI FORTRAN 77 is used as the standard
-for conforming code. With `-ff90' in force, Fortran 90 is used.
-
- The constructs for which `g77' issues diagnostics when `-fpedantic'
-and `-fno-f90' are in force are:
-
- * Automatic arrays, as in
-
- SUBROUTINE X(N)
- REAL A(N)
- ...
-
- where `A' is not listed in any `ENTRY' statement, and thus is not
- a dummy argument.
-
- * The commas in `READ (5), I' and `WRITE (10), J'.
-
- These commas are disallowed by FORTRAN 77, but, while strictly
- superfluous, are syntactically elegant, especially given that
- commas are required in statements such as `READ 99, I' and `PRINT
- *, J'. Many compilers permit the superfluous commas for this
- reason.
-
- * `DOUBLE COMPLEX', either explicitly or implicitly.
-
- An explicit use of this type is via a `DOUBLE COMPLEX' or
- `IMPLICIT DOUBLE COMPLEX' statement, for examples.
-
- An example of an implicit use is the expression `C*D', where `C'
- is `COMPLEX(KIND=1)' and `D' is `DOUBLE PRECISION'. This
- expression is prohibited by ANSI FORTRAN 77 because the rules of
- promotion would suggest that it produce a `DOUBLE COMPLEX'
- result--a type not provided for by that standard.
-
- * Automatic conversion of numeric expressions to `INTEGER(KIND=1)'
- in contexts such as:
-
- - Array-reference indexes.
-
- - Alternate-return values.
-
- - Computed `GOTO'.
-
- - `FORMAT' run-time expressions (not yet supported).
-
- - Dimension lists in specification statements.
-
- - Numbers for I/O statements (such as `READ (UNIT=3.2), I')
-
- - Sizes of `CHARACTER' entities in specification statements.
-
- - Kind types in specification entities (a Fortran 90 feature).
-
- - Initial, terminal, and incrementation parameters for
- implied-`DO' constructs in `DATA' statements.
-
- * Automatic conversion of `LOGICAL' expressions to `INTEGER' in
- contexts such as arithmetic `IF' (where `COMPLEX' expressions are
- disallowed anyway).
-
- * Zero-size array dimensions, as in:
-
- INTEGER I(10,20,4:2)
-
- * Zero-length `CHARACTER' entities, as in:
-
- PRINT *, ''
-
- * Substring operators applied to character constants and named
- constants, as in:
-
- PRINT *, 'hello'(3:5)
-
- * Null arguments passed to statement function, as in:
-
- PRINT *, FOO(,3)
-
- * Disagreement among program units regarding whether a given `COMMON'
- area is `SAVE'd (for targets where program units in a single source
- file are "glued" together as they typically are for UNIX
- development environments).
-
- * Disagreement among program units regarding the size of a named
- `COMMON' block.
-
- * Specification statements following first `DATA' statement.
-
- (In the GNU Fortran language, `DATA I/1/' may be followed by
- `INTEGER J', but not `INTEGER I'. The `-fpedantic' option
- disallows both of these.)
-
- * Semicolon as statement separator, as in:
-
- CALL FOO; CALL BAR
-
- * Use of `&' in column 1 of fixed-form source (to indicate
- continuation).
-
- * Use of `CHARACTER' constants to initialize numeric entities, and
- vice versa.
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'.
-
- If `-fpedantic' is specified along with `-ff90', the following
-constructs result in diagnostics:
-
- * Use of semicolon as a statement separator on a line that has an
- `INCLUDE' directive.
-
-\1f
-File: g77.info, Node: Distensions, Prev: Pedantic Compilation, Up: Other Dialects
-
-Distensions
-===========
-
- The `-fugly-*' command-line options determine whether certain
-features supported by VAX FORTRAN and other such compilers, but
-considered too ugly to be in code that can be changed to use safer
-and/or more portable constructs, are accepted. These are humorously
-referred to as "distensions", extensions that just plain look ugly in
-the harsh light of day.
-
- *Note:* The `-fugly' option, which currently serves as shorthand to
-enable all of the distensions below, is likely to be removed in a
-future version of `g77'. That's because it's likely new distensions
-will be added that conflict with existing ones in terms of assigning
-meaning to a given chunk of code. (Also, it's pretty clear that users
-should not use `-fugly' as shorthand when the next release of `g77'
-might add a distension to that that causes their existing code, when
-recompiled, to behave differently--perhaps even fail to compile or run
-correctly.)
-
-* Menu:
-
-* Ugly Implicit Argument Conversion:: Disabled via `-fno-ugly-args'.
-* Ugly Assumed-Size Arrays:: Enabled via `-fugly-assumed'.
-* Ugly Null Arguments:: Enabled via `-fugly-comma'.
-* Ugly Complex Part Extraction:: Enabled via `-fugly-complex'.
-* Ugly Conversion of Initializers:: Disabled via `-fno-ugly-init'.
-* Ugly Integer Conversions:: Enabled via `-fugly-logint'.
-* Ugly Assigned Labels:: Enabled via `-fugly-assign'.
-
-\1f
-File: g77.info, Node: Ugly Implicit Argument Conversion, Next: Ugly Assumed-Size Arrays, Up: Distensions
-
-Implicit Argument Conversion
-----------------------------
-
- The `-fno-ugly-args' option disables passing typeless and Hollerith
-constants as actual arguments in procedure invocations. For example:
-
- CALL FOO(4HABCD)
- CALL BAR('123'O)
-
-These constructs can be too easily used to create non-portable code,
-but are not considered as "ugly" as others. Further, they are widely
-used in existing Fortran source code in ways that often are quite
-portable. Therefore, they are enabled by default.
-
-\1f
-File: g77.info, Node: Ugly Assumed-Size Arrays, Next: Ugly Null Arguments, Prev: Ugly Implicit Argument Conversion, Up: Distensions
-
-Ugly Assumed-Size Arrays
-------------------------
-
- The `-fugly-assumed' option enables the treatment of any array with
-a final dimension specified as `1' as an assumed-size array, as if `*'
-had been specified instead.
-
- For example, `DIMENSION X(1)' is treated as if it had read
-`DIMENSION X(*)' if `X' is listed as a dummy argument in a preceding
-`SUBROUTINE', `FUNCTION', or `ENTRY' statement in the same program unit.
-
- Use an explicit lower bound to avoid this interpretation. For
-example, `DIMENSION X(1:1)' is never treated as if it had read
-`DIMENSION X(*)' or `DIMENSION X(1:*)'. Nor is `DIMENSION X(2-1)'
-affected by this option, since that kind of expression is unlikely to
-have been intended to designate an assumed-size array.
-
- This option is used to prevent warnings being issued about apparent
-out-of-bounds reference such as `X(2) = 99'.
-
- It also prevents the array from being used in contexts that disallow
-assumed-size arrays, such as `PRINT *,X'. In such cases, a diagnostic
-is generated and the source file is not compiled.
-
- The construct affected by this option is used only in old code that
-pre-exists the widespread acceptance of adjustable and assumed-size
-arrays in the Fortran community.
-
- *Note:* This option does not affect how `DIMENSION X(1)' is treated
-if `X' is listed as a dummy argument only *after* the `DIMENSION'
-statement (presumably in an `ENTRY' statement). For example,
-`-fugly-assumed' has no effect on the following program unit:
-
- SUBROUTINE X
- REAL A(1)
- RETURN
- ENTRY Y(A)
- PRINT *, A
- END
-
-\1f
-File: g77.info, Node: Ugly Complex Part Extraction, Next: Ugly Conversion of Initializers, Prev: Ugly Null Arguments, Up: Distensions
-
-Ugly Complex Part Extraction
-----------------------------
-
- The `-fugly-complex' option enables use of the `REAL()' and `AIMAG()'
-intrinsics with arguments that are `COMPLEX' types other than
-`COMPLEX(KIND=1)'.
-
- With `-ff90' in effect, these intrinsics return the unconverted real
-and imaginary parts (respectively) of their argument.
-
- With `-fno-f90' in effect, these intrinsics convert the real and
-imaginary parts to `REAL(KIND=1)', and return the result of that
-conversion.
-
- Due to this ambiguity, the GNU Fortran language defines these
-constructs as invalid, except in the specific case where they are
-entirely and solely passed as an argument to an invocation of the
-`REAL()' intrinsic. For example,
-
- REAL(REAL(Z))
-
-is permitted even when `Z' is `COMPLEX(KIND=2)' and `-fno-ugly-complex'
-is in effect, because the meaning is clear.
-
- `g77' enforces this restriction, unless `-fugly-complex' is
-specified, in which case the appropriate interpretation is chosen and
-no diagnostic is issued.
-
- *Note CMPAMBIG::, for information on how to cope with existing code
-with unclear expectations of `REAL()' and `AIMAG()' with
-`COMPLEX(KIND=2)' arguments.
-
- *Note RealPart Intrinsic::, for information on the `REALPART()'
-intrinsic, used to extract the real part of a complex expression
-without conversion. *Note ImagPart Intrinsic::, for information on the
-`IMAGPART()' intrinsic, used to extract the imaginary part of a complex
-expression without conversion.
-
-\1f
-File: g77.info, Node: Ugly Null Arguments, Next: Ugly Complex Part Extraction, Prev: Ugly Assumed-Size Arrays, Up: Distensions
-
-Ugly Null Arguments
--------------------
-
- The `-fugly-comma' option enables use of a single trailing comma to
-mean "pass an extra trailing null argument" in a list of actual
-arguments to a procedure other than a statement function, and use of an
-empty list of arguments to mean "pass a single null argument".
-
- (Null arguments often are used in some procedure-calling schemes to
-indicate omitted arguments.)
-
- For example, `CALL FOO(,)' means "pass two null arguments", rather
-than "pass one null argument". Also, `CALL BAR()' means "pass one null
-argument".
-
- This construct is considered "ugly" because it does not provide an
-elegant way to pass a single null argument that is syntactically
-distinct from passing no arguments. That is, this construct changes
-the meaning of code that makes no use of the construct.
-
- So, with `-fugly-comma' in force, `CALL FOO()' and `I = JFUNC()'
-pass a single null argument, instead of passing no arguments as
-required by the Fortran 77 and 90 standards.
-
- *Note:* Many systems gracefully allow the case where a procedure
-call passes one extra argument that the called procedure does not
-expect.
-
- So, in practice, there might be no difference in the behavior of a
-program that does `CALL FOO()' or `I = JFUNC()' and is compiled with
-`-fugly-comma' in force as compared to its behavior when compiled with
-the default, `-fno-ugly-comma', in force, assuming `FOO' and `JFUNC' do
-not expect any arguments to be passed.
-
-\1f
-File: g77.info, Node: Ugly Conversion of Initializers, Next: Ugly Integer Conversions, Prev: Ugly Complex Part Extraction, Up: Distensions
-
-Ugly Conversion of Initializers
--------------------------------
-
- The constructs disabled by `-fno-ugly-init' are:
-
- * Use of Hollerith and typeless constants in contexts where they set
- initial (compile-time) values for variables, arrays, and named
- constants--that is, `DATA' and `PARAMETER' statements, plus
- type-declaration statements specifying initial values.
-
- Here are some sample initializations that are disabled by the
- `-fno-ugly-init' option:
-
- PARAMETER (VAL='9A304FFE'X)
- REAL*8 STRING/8HOUTPUT00/
- DATA VAR/4HABCD/
-
- * In the same contexts as above, use of character constants to
- initialize numeric items and vice versa (one constant per item).
-
- Here are more sample initializations that are disabled by the
- `-fno-ugly-init' option:
-
- INTEGER IA
- CHARACTER BELL
- PARAMETER (IA = 'A')
- PARAMETER (BELL = 7)
-
- * Use of Hollerith and typeless constants on the right-hand side of
- assignment statements to numeric types, and in other contexts
- (such as passing arguments in invocations of intrinsic procedures
- and statement functions) that are treated as assignments to known
- types (the dummy arguments, in these cases).
-
- Here are sample statements that are disabled by the
- `-fno-ugly-init' option:
-
- IVAR = 4HABCD
- PRINT *, IMAX0(2HAB, 2HBA)
-
- The above constructs, when used, can tend to result in non-portable
-code. But, they are widely used in existing Fortran code in ways that
-often are quite portable. Therefore, they are enabled by default.
-
-\1f
-File: g77.info, Node: Ugly Integer Conversions, Next: Ugly Assigned Labels, Prev: Ugly Conversion of Initializers, Up: Distensions
-
-Ugly Integer Conversions
-------------------------
-
- The constructs enabled via `-fugly-logint' are:
-
- * Automatic conversion between `INTEGER' and `LOGICAL' as dictated by
- context (typically implies nonportable dependencies on how a
- particular implementation encodes `.TRUE.' and `.FALSE.').
-
- * Use of a `LOGICAL' variable in `ASSIGN' and assigned-`GOTO'
- statements.
-
- The above constructs are disabled by default because use of them
-tends to lead to non-portable code. Even existing Fortran code that
-uses that often turns out to be non-portable, if not outright buggy.
-
- Some of this is due to differences among implementations as far as
-how `.TRUE.' and `.FALSE.' are encoded as `INTEGER' values--Fortran
-code that assumes a particular coding is likely to use one of the above
-constructs, and is also likely to not work correctly on implementations
-using different encodings.
-
- *Note Equivalence Versus Equality::, for more information.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Ugly Assigned Labels, Prev: Ugly Integer Conversions, Up: Distensions
-
-Ugly Assigned Labels
---------------------
-
- The `-fugly-assign' option forces `g77' to use the same storage for
-assigned labels as it would for a normal assignment to the same
-variable.
-
- For example, consider the following code fragment:
-
- I = 3
- ASSIGN 10 TO I
-
-Normally, for portability and improved diagnostics, `g77' reserves
-distinct storage for a "sibling" of `I', used only for `ASSIGN'
-statements to that variable (along with the corresponding
-assigned-`GOTO' and assigned-`FORMAT'-I/O statements that reference the
-variable).
-
- However, some code (that violates the ANSI FORTRAN 77 standard)
-attempts to copy assigned labels among variables involved with `ASSIGN'
-statements, as in:
-
- ASSIGN 10 TO I
- ISTATE(5) = I
- ...
- J = ISTATE(ICUR)
- GOTO J
-
-Such code doesn't work under `g77' unless `-fugly-assign' is specified
-on the command-line, ensuring that the value of `I' referenced in the
-second line is whatever value `g77' uses to designate statement label
-`10', so the value may be copied into the `ISTATE' array, later
-retrieved into a variable of the appropriate type (`J'), and used as
-the target of an assigned-`GOTO' statement.
-
- *Note:* To avoid subtle program bugs, when `-fugly-assign' is
-specified, `g77' requires the type of variables specified in
-assigned-label contexts *must* be the same type returned by `%LOC()'.
-On many systems, this type is effectively the same as
-`INTEGER(KIND=1)', while, on others, it is effectively the same as
-`INTEGER(KIND=2)'.
-
- Do *not* depend on `g77' actually writing valid pointers to these
-variables, however. While `g77' currently chooses that implementation,
-it might be changed in the future.
-
- *Note Assigned Statement Labels (ASSIGN and GOTO): Assigned
-Statement Labels, for implementation details on assigned-statement
-labels.
-
-\1f
-File: g77.info, Node: Compiler, Next: Other Dialects, Prev: Language, Up: Top
-
-The GNU Fortran Compiler
-************************
-
- The GNU Fortran compiler, `g77', supports programs written in the
-GNU Fortran language and in some other dialects of Fortran.
-
- Some aspects of how `g77' works are universal regardless of dialect,
-and yet are not properly part of the GNU Fortran language itself.
-These are described below.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Compiler Limits::
-* Compiler Types::
-* Compiler Constants::
-* Compiler Intrinsics::
-
-\1f
-File: g77.info, Node: Compiler Limits, Next: Compiler Types, Up: Compiler
-
-Compiler Limits
-===============
-
- `g77', as with GNU tools in general, imposes few arbitrary
-restrictions on lengths of identifiers, number of continuation lines,
-number of external symbols in a program, and so on.
-
- For example, some other Fortran compiler have an option (such as
-`-NlX') to increase the limit on the number of continuation lines.
-Also, some Fortran compilation systems have an option (such as `-NxX')
-to increase the limit on the number of external symbols.
-
- `g77', `gcc', and GNU `ld' (the GNU linker) have no equivalent
-options, since they do not impose arbitrary limits in these areas.
-
- `g77' does currently limit the number of dimensions in an array to
-the same degree as do the Fortran standards--seven (7). This
-restriction might well be lifted in a future version.
-
-\1f
-File: g77.info, Node: Compiler Types, Next: Compiler Constants, Prev: Compiler Limits, Up: Compiler
-
-Compiler Types
-==============
-
- Fortran implementations have a fair amount of freedom given them by
-the standard as far as how much storage space is used and how much
-precision and range is offered by the various types such as
-`LOGICAL(KIND=1)', `INTEGER(KIND=1)', `REAL(KIND=1)', `REAL(KIND=2)',
-`COMPLEX(KIND=1)', and `CHARACTER'. Further, many compilers offer
-so-called `*N' notation, but the interpretation of N varies across
-compilers and target architectures.
-
- The standard requires that `LOGICAL(KIND=1)', `INTEGER(KIND=1)', and
-`REAL(KIND=1)' occupy the same amount of storage space, and that
-`COMPLEX(KIND=1)' and `REAL(KIND=2)' take twice as much storage space
-as `REAL(KIND=1)'. Further, it requires that `COMPLEX(KIND=1)'
-entities be ordered such that when a `COMPLEX(KIND=1)' variable is
-storage-associated (such as via `EQUIVALENCE') with a two-element
-`REAL(KIND=1)' array named `R', `R(1)' corresponds to the real element
-and `R(2)' to the imaginary element of the `COMPLEX(KIND=1)' variable.
-
- (Few requirements as to precision or ranges of any of these are
-placed on the implementation, nor is the relationship of storage sizes
-of these types to the `CHARACTER' type specified, by the standard.)
-
- `g77' follows the above requirements, warning when compiling a
-program requires placement of items in memory that contradict the
-requirements of the target architecture. (For example, a program can
-require placement of a `REAL(KIND=2)' on a boundary that is not an even
-multiple of its size, but still an even multiple of the size of a
-`REAL(KIND=1)' variable. On some target architectures, using the
-canonical mapping of Fortran types to underlying architectural types,
-such placement is prohibited by the machine definition or the
-Application Binary Interface (ABI) in force for the configuration
-defined for building `gcc' and `g77'. `g77' warns about such
-situations when it encounters them.)
-
- `g77' follows consistent rules for configuring the mapping between
-Fortran types, including the `*N' notation, and the underlying
-architectural types as accessed by a similarly-configured applicable
-version of the `gcc' compiler. These rules offer a widely portable,
-consistent Fortran/C environment, although they might well conflict
-with the expectations of users of Fortran compilers designed and
-written for particular architectures.
-
- These rules are based on the configuration that is in force for the
-version of `gcc' built in the same release as `g77' (and which was
-therefore used to build both the `g77' compiler components and the
-`libf2c' run-time library):
-
-`REAL(KIND=1)'
- Same as `float' type.
-
-`REAL(KIND=2)'
- Same as whatever floating-point type that is twice the size of a
- `float'--usually, this is a `double'.
-
-`INTEGER(KIND=1)'
- Same as an integral type that is occupies the same amount of
- memory storage as `float'--usually, this is either an `int' or a
- `long int'.
-
-`LOGICAL(KIND=1)'
- Same `gcc' type as `INTEGER(KIND=1)'.
-
-`INTEGER(KIND=2)'
- Twice the size, and usually nearly twice the range, as
- `INTEGER(KIND=1)'--usually, this is either a `long int' or a `long
- long int'.
-
-`LOGICAL(KIND=2)'
- Same `gcc' type as `INTEGER(KIND=2)'.
-
-`INTEGER(KIND=3)'
- Same `gcc' type as signed `char'.
-
-`LOGICAL(KIND=3)'
- Same `gcc' type as `INTEGER(KIND=3)'.
-
-`INTEGER(KIND=6)'
- Twice the size, and usually nearly twice the range, as
- `INTEGER(KIND=3)'--usually, this is a `short'.
-
-`LOGICAL(KIND=6)'
- Same `gcc' type as `INTEGER(KIND=6)'.
-
-`COMPLEX(KIND=1)'
- Two `REAL(KIND=1)' scalars (one for the real part followed by one
- for the imaginary part).
-
-`COMPLEX(KIND=2)'
- Two `REAL(KIND=2)' scalars.
-
-`NUMERIC-TYPE*N'
- (Where NUMERIC-TYPE is any type other than `CHARACTER'.) Same as
- whatever `gcc' type occupies N times the storage space of a `gcc'
- `char' item.
-
-`DOUBLE PRECISION'
- Same as `REAL(KIND=2)'.
-
-`DOUBLE COMPLEX'
- Same as `COMPLEX(KIND=2)'.
-
- Note that the above are proposed correspondences and might change in
-future versions of `g77'--avoid writing code depending on them.
-
- Other types supported by `g77' are derived from gcc types such as
-`char', `short', `int', `long int', `long long int', `long double', and
-so on. That is, whatever types `gcc' already supports, `g77' supports
-now or probably will support in a future version. The rules for the
-`NUMERIC-TYPE*N' notation apply to these types, and new values for
-`NUMERIC-TYPE(KIND=N)' will be assigned in a way that encourages
-clarity, consistency, and portability.
-
-\1f
-File: g77.info, Node: Compiler Constants, Next: Compiler Intrinsics, Prev: Compiler Types, Up: Compiler
-
-Compiler Constants
-==================
-
- `g77' strictly assigns types to *all* constants not documented as
-"typeless" (typeless constants including `'1'Z', for example). Many
-other Fortran compilers attempt to assign types to typed constants
-based on their context. This results in hard-to-find bugs, nonportable
-code, and is not in the spirit (though it strictly follows the letter)
-of the 77 and 90 standards.
-
- `g77' might offer, in a future release, explicit constructs by which
-a wider variety of typeless constants may be specified, and/or
-user-requested warnings indicating places where `g77' might differ from
-how other compilers assign types to constants.
-
- *Note Context-Sensitive Constants::, for more information on this
-issue.
-
-\1f
-File: g77.info, Node: Compiler Intrinsics, Prev: Compiler Constants, Up: Compiler
-
-Compiler Intrinsics
-===================
-
- `g77' offers an ever-widening set of intrinsics. Currently these
-all are procedures (functions and subroutines).
-
- Some of these intrinsics are unimplemented, but their names reserved
-to reduce future problems with existing code as they are implemented.
-Others are implemented as part of the GNU Fortran language, while yet
-others are provided for compatibility with other dialects of Fortran
-but are not part of the GNU Fortran language.
-
- To manage these distinctions, `g77' provides intrinsic *groups*, a
-facility that is simply an extension of the intrinsic groups provided
-by the GNU Fortran language.
-
-* Menu:
-
-* Intrinsic Groups:: How intrinsics are grouped for easy management.
-* Other Intrinsics:: Intrinsics other than those in the GNU
- Fortran language.
-
-\1f
-File: g77.info, Node: Intrinsic Groups, Next: Other Intrinsics, Up: Compiler Intrinsics
-
-Intrinsic Groups
-----------------
-
- A given specific intrinsic belongs in one or more groups. Each
-group is deleted, disabled, hidden, or enabled by default or a
-command-line option. The meaning of each term follows.
-
-Deleted
- No intrinsics are recognized as belonging to that group.
-
-Disabled
- Intrinsics are recognized as belonging to the group, but
- references to them (other than via the `INTRINSIC' statement) are
- disallowed through that group.
-
-Hidden
- Intrinsics in that group are recognized and enabled (if
- implemented) *only* if the first mention of the actual name of an
- intrinsic in a program unit is in an `INTRINSIC' statement.
-
-Enabled
- Intrinsics in that group are recognized and enabled (if
- implemented).
-
- The distinction between deleting and disabling a group is illustrated
-by the following example. Assume intrinsic `FOO' belongs only to group
-`FGR'. If group `FGR' is deleted, the following program unit will
-successfully compile, because `FOO()' will be seen as a reference to an
-external function named `FOO':
-
- PRINT *, FOO()
- END
-
-If group `FGR' is disabled, compiling the above program will produce
-diagnostics, either because the `FOO' intrinsic is improperly invoked
-or, if properly invoked, it is not enabled. To change the above
-program so it references an external function `FOO' instead of the
-disabled `FOO' intrinsic, add the following line to the top:
-
- EXTERNAL FOO
-
-So, deleting a group tells `g77' to pretend as though the intrinsics in
-that group do not exist at all, whereas disabling it tells `g77' to
-recognize them as (disabled) intrinsics in intrinsic-like contexts.
-
- Hiding a group is like enabling it, but the intrinsic must be first
-named in an `INTRINSIC' statement to be considered a reference to the
-intrinsic rather than to an external procedure. This might be the
-"safest" way to treat a new group of intrinsics when compiling old
-code, because it allows the old code to be generally written as if
-those new intrinsics never existed, but to be changed to use them by
-inserting `INTRINSIC' statements in the appropriate places. However,
-it should be the goal of development to use `EXTERNAL' for all names of
-external procedures that might be intrinsic names.
-
- If an intrinsic is in more than one group, it is enabled if any of
-its containing groups are enabled; if not so enabled, it is hidden if
-any of its containing groups are hidden; if not so hidden, it is
-disabled if any of its containing groups are disabled; if not so
-disabled, it is deleted. This extra complication is necessary because
-some intrinsics, such as `IBITS', belong to more than one group, and
-hence should be enabled if any of the groups to which they belong are
-enabled, and so on.
-
- The groups are:
-
-`badu77'
- UNIX intrinsics having inappropriate forms (usually functions that
- have intended side effects).
-
-`gnu'
- Intrinsics the GNU Fortran language supports that are extensions to
- the Fortran standards (77 and 90).
-
-`f2c'
- Intrinsics supported by AT&T's `f2c' converter and/or `libf2c'.
-
-`f90'
- Fortran 90 intrinsics.
-
-`mil'
- MIL-STD 1753 intrinsics (`MVBITS', `IAND', `BTEST', and so on).
-
-`unix'
- UNIX intrinsics (`IARGC', `EXIT', `ERF', and so on).
-
-`vxt'
- VAX/VMS FORTRAN (current as of v4) intrinsics.
-
-\1f
-File: g77.info, Node: Other Intrinsics, Prev: Intrinsic Groups, Up: Compiler Intrinsics
-
-Other Intrinsics
-----------------
-
- `g77' supports intrinsics other than those in the GNU Fortran
-language proper. This set of intrinsics is described below.
-
- (Note that the empty lines appearing in the menu below are not
-intentional--they result from a bug in the `makeinfo' program.)
-
-* Menu:
-
-
-* ACosD Intrinsic:: (Reserved for future use.)
-
-* AIMax0 Intrinsic:: (Reserved for future use.)
-* AIMin0 Intrinsic:: (Reserved for future use.)
-
-* AJMax0 Intrinsic:: (Reserved for future use.)
-* AJMin0 Intrinsic:: (Reserved for future use.)
-
-* ASinD Intrinsic:: (Reserved for future use.)
-
-* ATan2D Intrinsic:: (Reserved for future use.)
-* ATanD Intrinsic:: (Reserved for future use.)
-
-* BITest Intrinsic:: (Reserved for future use.)
-
-* BJTest Intrinsic:: (Reserved for future use.)
-
-* CDAbs Intrinsic:: Absolute value (archaic).
-* CDCos Intrinsic:: Cosine (archaic).
-* CDExp Intrinsic:: Exponential (archaic).
-* CDLog Intrinsic:: Natural logarithm (archaic).
-* CDSin Intrinsic:: Sine (archaic).
-* CDSqRt Intrinsic:: Square root (archaic).
-
-* ChDir Intrinsic (function):: Change directory.
-
-* ChMod Intrinsic (function):: Change file modes.
-
-* CosD Intrinsic:: (Reserved for future use.)
-
-* DACosD Intrinsic:: (Reserved for future use.)
-
-* DASinD Intrinsic:: (Reserved for future use.)
-
-* DATan2D Intrinsic:: (Reserved for future use.)
-* DATanD Intrinsic:: (Reserved for future use.)
-* Date Intrinsic:: Get current date as dd-Mon-yy.
-
-* DbleQ Intrinsic:: (Reserved for future use.)
-
-* DCmplx Intrinsic:: Construct `COMPLEX(KIND=2)' value.
-* DConjg Intrinsic:: Complex conjugate (archaic).
-
-* DCosD Intrinsic:: (Reserved for future use.)
-
-* DFloat Intrinsic:: Conversion (archaic).
-
-* DFlotI Intrinsic:: (Reserved for future use.)
-* DFlotJ Intrinsic:: (Reserved for future use.)
-
-* DImag Intrinsic:: Convert/extract imaginary part of complex (archaic).
-
-* DReal Intrinsic:: Convert value to type `REAL(KIND=2)'.
-
-* DSinD Intrinsic:: (Reserved for future use.)
-
-* DTanD Intrinsic:: (Reserved for future use.)
-
-* Dtime Intrinsic (function):: Get elapsed time since last time.
-
-* FGet Intrinsic (function):: Read a character from unit 5 stream-wise.
-
-* FGetC Intrinsic (function):: Read a character stream-wise.
-
-* FloatI Intrinsic:: (Reserved for future use.)
-* FloatJ Intrinsic:: (Reserved for future use.)
-
-* FPut Intrinsic (function):: Write a character to unit 6 stream-wise.
-
-* FPutC Intrinsic (function):: Write a character stream-wise.
-
-* IDate Intrinsic (VXT):: Get local time info (VAX/VMS).
-
-* IIAbs Intrinsic:: (Reserved for future use.)
-* IIAnd Intrinsic:: (Reserved for future use.)
-* IIBClr Intrinsic:: (Reserved for future use.)
-* IIBits Intrinsic:: (Reserved for future use.)
-* IIBSet Intrinsic:: (Reserved for future use.)
-* IIDiM Intrinsic:: (Reserved for future use.)
-* IIDInt Intrinsic:: (Reserved for future use.)
-* IIDNnt Intrinsic:: (Reserved for future use.)
-* IIEOr Intrinsic:: (Reserved for future use.)
-* IIFix Intrinsic:: (Reserved for future use.)
-* IInt Intrinsic:: (Reserved for future use.)
-* IIOr Intrinsic:: (Reserved for future use.)
-* IIQint Intrinsic:: (Reserved for future use.)
-* IIQNnt Intrinsic:: (Reserved for future use.)
-* IIShftC Intrinsic:: (Reserved for future use.)
-* IISign Intrinsic:: (Reserved for future use.)
-
-* IMax0 Intrinsic:: (Reserved for future use.)
-* IMax1 Intrinsic:: (Reserved for future use.)
-* IMin0 Intrinsic:: (Reserved for future use.)
-* IMin1 Intrinsic:: (Reserved for future use.)
-* IMod Intrinsic:: (Reserved for future use.)
-
-* INInt Intrinsic:: (Reserved for future use.)
-* INot Intrinsic:: (Reserved for future use.)
-
-* IZExt Intrinsic:: (Reserved for future use.)
-* JIAbs Intrinsic:: (Reserved for future use.)
-* JIAnd Intrinsic:: (Reserved for future use.)
-* JIBClr Intrinsic:: (Reserved for future use.)
-* JIBits Intrinsic:: (Reserved for future use.)
-* JIBSet Intrinsic:: (Reserved for future use.)
-* JIDiM Intrinsic:: (Reserved for future use.)
-* JIDInt Intrinsic:: (Reserved for future use.)
-* JIDNnt Intrinsic:: (Reserved for future use.)
-* JIEOr Intrinsic:: (Reserved for future use.)
-* JIFix Intrinsic:: (Reserved for future use.)
-* JInt Intrinsic:: (Reserved for future use.)
-* JIOr Intrinsic:: (Reserved for future use.)
-* JIQint Intrinsic:: (Reserved for future use.)
-* JIQNnt Intrinsic:: (Reserved for future use.)
-* JIShft Intrinsic:: (Reserved for future use.)
-* JIShftC Intrinsic:: (Reserved for future use.)
-* JISign Intrinsic:: (Reserved for future use.)
-* JMax0 Intrinsic:: (Reserved for future use.)
-* JMax1 Intrinsic:: (Reserved for future use.)
-* JMin0 Intrinsic:: (Reserved for future use.)
-* JMin1 Intrinsic:: (Reserved for future use.)
-* JMod Intrinsic:: (Reserved for future use.)
-* JNInt Intrinsic:: (Reserved for future use.)
-* JNot Intrinsic:: (Reserved for future use.)
-* JZExt Intrinsic:: (Reserved for future use.)
-
-* Kill Intrinsic (function):: Signal a process.
-
-* Link Intrinsic (function):: Make hard link in file system.
-
-* QAbs Intrinsic:: (Reserved for future use.)
-* QACos Intrinsic:: (Reserved for future use.)
-* QACosD Intrinsic:: (Reserved for future use.)
-* QASin Intrinsic:: (Reserved for future use.)
-* QASinD Intrinsic:: (Reserved for future use.)
-* QATan Intrinsic:: (Reserved for future use.)
-* QATan2 Intrinsic:: (Reserved for future use.)
-* QATan2D Intrinsic:: (Reserved for future use.)
-* QATanD Intrinsic:: (Reserved for future use.)
-* QCos Intrinsic:: (Reserved for future use.)
-* QCosD Intrinsic:: (Reserved for future use.)
-* QCosH Intrinsic:: (Reserved for future use.)
-* QDiM Intrinsic:: (Reserved for future use.)
-* QExp Intrinsic:: (Reserved for future use.)
-* QExt Intrinsic:: (Reserved for future use.)
-* QExtD Intrinsic:: (Reserved for future use.)
-* QFloat Intrinsic:: (Reserved for future use.)
-* QInt Intrinsic:: (Reserved for future use.)
-* QLog Intrinsic:: (Reserved for future use.)
-* QLog10 Intrinsic:: (Reserved for future use.)
-* QMax1 Intrinsic:: (Reserved for future use.)
-* QMin1 Intrinsic:: (Reserved for future use.)
-* QMod Intrinsic:: (Reserved for future use.)
-* QNInt Intrinsic:: (Reserved for future use.)
-* QSin Intrinsic:: (Reserved for future use.)
-* QSinD Intrinsic:: (Reserved for future use.)
-* QSinH Intrinsic:: (Reserved for future use.)
-* QSqRt Intrinsic:: (Reserved for future use.)
-* QTan Intrinsic:: (Reserved for future use.)
-* QTanD Intrinsic:: (Reserved for future use.)
-* QTanH Intrinsic:: (Reserved for future use.)
-
-* Rename Intrinsic (function):: Rename file.
-
-* Secnds Intrinsic:: Get local time offset since midnight.
-
-* Signal Intrinsic (function):: Muck with signal handling.
-
-* SinD Intrinsic:: (Reserved for future use.)
-
-* SnglQ Intrinsic:: (Reserved for future use.)
-
-* SymLnk Intrinsic (function):: Make symbolic link in file system.
-
-* System Intrinsic (function):: Invoke shell (system) command.
-
-* TanD Intrinsic:: (Reserved for future use.)
-
-* Time Intrinsic (VXT):: Get the time as a character value.
-
-* UMask Intrinsic (function):: Set file creation permissions mask.
-
-* Unlink Intrinsic (function):: Unlink file.
-
-* ZExt Intrinsic:: (Reserved for future use.)
-
-\1f
-File: g77.info, Node: ACosD Intrinsic, Next: AIMax0 Intrinsic, Up: Other Intrinsics
-
-ACosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ACosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: AIMax0 Intrinsic, Next: AIMin0 Intrinsic, Prev: ACosD Intrinsic, Up: Other Intrinsics
-
-AIMax0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AIMax0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: AIMin0 Intrinsic, Next: AJMax0 Intrinsic, Prev: AIMax0 Intrinsic, Up: Other Intrinsics
-
-AIMin0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AIMin0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: AJMax0 Intrinsic, Next: AJMin0 Intrinsic, Prev: AIMin0 Intrinsic, Up: Other Intrinsics
-
-AJMax0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AJMax0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: AJMin0 Intrinsic, Next: ASinD Intrinsic, Prev: AJMax0 Intrinsic, Up: Other Intrinsics
-
-AJMin0 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AJMin0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: ASinD Intrinsic, Next: ATan2D Intrinsic, Prev: AJMin0 Intrinsic, Up: Other Intrinsics
-
-ASinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ASinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: ATan2D Intrinsic, Next: ATanD Intrinsic, Prev: ASinD Intrinsic, Up: Other Intrinsics
-
-ATan2D Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ATan2D' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: ATanD Intrinsic, Next: BITest Intrinsic, Prev: ATan2D Intrinsic, Up: Other Intrinsics
-
-ATanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ATanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: BITest Intrinsic, Next: BJTest Intrinsic, Prev: ATanD Intrinsic, Up: Other Intrinsics
-
-BITest Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL BITest' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: BJTest Intrinsic, Next: CDAbs Intrinsic, Prev: BITest Intrinsic, Up: Other Intrinsics
-
-BJTest Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL BJTest' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: CDAbs Intrinsic, Next: CDCos Intrinsic, Prev: BJTest Intrinsic, Up: Other Intrinsics
-
-CDAbs Intrinsic
-...............
-
- CDAbs(A)
-
-CDAbs: `REAL(KIND=2)' function.
-
-A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-\1f
-File: g77.info, Node: CDCos Intrinsic, Next: CDExp Intrinsic, Prev: CDAbs Intrinsic, Up: Other Intrinsics
-
-CDCos Intrinsic
-...............
-
- CDCos(X)
-
-CDCos: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-\1f
-File: g77.info, Node: CDExp Intrinsic, Next: CDLog Intrinsic, Prev: CDCos Intrinsic, Up: Other Intrinsics
-
-CDExp Intrinsic
-...............
-
- CDExp(X)
-
-CDExp: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-\1f
-File: g77.info, Node: CDLog Intrinsic, Next: CDSin Intrinsic, Prev: CDExp Intrinsic, Up: Other Intrinsics
-
-CDLog Intrinsic
-...............
-
- CDLog(X)
-
-CDLog: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-\1f
-File: g77.info, Node: CDSin Intrinsic, Next: CDSqRt Intrinsic, Prev: CDLog Intrinsic, Up: Other Intrinsics
-
-CDSin Intrinsic
-...............
-
- CDSin(X)
-
-CDSin: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-\1f
-File: g77.info, Node: CDSqRt Intrinsic, Next: ChDir Intrinsic (function), Prev: CDSin Intrinsic, Up: Other Intrinsics
-
-CDSqRt Intrinsic
-................
-
- CDSqRt(X)
-
-CDSqRt: `COMPLEX(KIND=2)' function.
-
-X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-\1f
-File: g77.info, Node: ChDir Intrinsic (function), Next: ChMod Intrinsic (function), Prev: CDSqRt Intrinsic, Up: Other Intrinsics
-
-ChDir Intrinsic (function)
-..........................
-
- ChDir(DIR)
-
-ChDir: `INTEGER(KIND=1)' function.
-
-DIR: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sets the current working directory to be DIR. Returns 0 on success
-or a non-zero error code. See `chdir(3)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note ChDir
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: ChMod Intrinsic (function), Next: CosD Intrinsic, Prev: ChDir Intrinsic (function), Up: Other Intrinsics
-
-ChMod Intrinsic (function)
-..........................
-
- ChMod(NAME, MODE)
-
-ChMod: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Changes the access mode of file NAME according to the specification
-MODE, which is given in the format of `chmod(1)'. A null character
-(`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
-blanks in NAME are ignored. Currently, NAME must not contain the
-single quote character.
-
- Returns 0 on success or a non-zero error code otherwise.
-
- Note that this currently works by actually invoking `/bin/chmod' (or
-the `chmod' found when the library was configured) and so may fail in
-some circumstances and will, anyway, be slow.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note ChMod
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: CosD Intrinsic, Next: DACosD Intrinsic, Prev: ChMod Intrinsic (function), Up: Other Intrinsics
-
-CosD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL CosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DACosD Intrinsic, Next: DASinD Intrinsic, Prev: CosD Intrinsic, Up: Other Intrinsics
-
-DACosD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DACosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DASinD Intrinsic, Next: DATan2D Intrinsic, Prev: DACosD Intrinsic, Up: Other Intrinsics
-
-DASinD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DASinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DATan2D Intrinsic, Next: DATanD Intrinsic, Prev: DASinD Intrinsic, Up: Other Intrinsics
-
-DATan2D Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DATan2D' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: DATanD Intrinsic, Next: Date Intrinsic, Prev: DATan2D Intrinsic, Up: Other Intrinsics
-
-DATanD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DATanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Date Intrinsic, Next: DbleQ Intrinsic, Prev: DATanD Intrinsic, Up: Other Intrinsics
-
-Date Intrinsic
-..............
-
- CALL Date(DATE)
-
-DATE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns DATE in the form `DD-MMM-YY', representing the numeric day
-of the month DD, a three-character abbreviation of the month name MMM
-and the last two digits of the year YY, e.g. `25-Nov-96'.
-
- This intrinsic is not recommended, due to the year 2000 approaching.
-*Note CTime Intrinsic (subroutine)::, for information on obtaining more
-digits for the current (or any) date.
-
-\1f
-File: g77.info, Node: DbleQ Intrinsic, Next: DCmplx Intrinsic, Prev: Date Intrinsic, Up: Other Intrinsics
-
-DbleQ Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DbleQ' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DCmplx Intrinsic, Next: DConjg Intrinsic, Prev: DbleQ Intrinsic, Up: Other Intrinsics
-
-DCmplx Intrinsic
-................
-
- DCmplx(X, Y)
-
-DCmplx: `COMPLEX(KIND=2)' function.
-
-X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
-scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- If X is not type `COMPLEX', constructs a value of type
-`COMPLEX(KIND=2)' from the real and imaginary values specified by X and
-Y, respectively. If Y is omitted, `0D0' is assumed.
-
- If X is type `COMPLEX', converts it to type `COMPLEX(KIND=2)'.
-
- Although this intrinsic is not standard Fortran, it is a popular
-extension offered by many compilers that support `DOUBLE COMPLEX',
-since it offers the easiest way to convert to `DOUBLE COMPLEX' without
-using Fortran 90 features (such as the `KIND=' argument to the
-`CMPLX()' intrinsic).
-
- (`CMPLX(0D0, 0D0)' returns a single-precision `COMPLEX' result, as
-required by standard FORTRAN 77. That's why so many compilers provide
-`DCMPLX()', since `DCMPLX(0D0, 0D0)' returns a `DOUBLE COMPLEX' result.
-Still, `DCMPLX()' converts even `REAL*16' arguments to their `REAL*8'
-equivalents in most dialects of Fortran, so neither it nor `CMPLX()'
-allow easy construction of arbitrary-precision values without
-potentially forcing a conversion involving extending or reducing
-precision. GNU Fortran provides such an intrinsic, called `COMPLEX()'.)
-
- *Note Complex Intrinsic::, for information on easily constructing a
-`COMPLEX' value of arbitrary precision from `REAL' arguments.
-
-\1f
-File: g77.info, Node: DConjg Intrinsic, Next: DCosD Intrinsic, Prev: DCmplx Intrinsic, Up: Other Intrinsics
-
-DConjg Intrinsic
-................
-
- DConjg(Z)
-
-DConjg: `COMPLEX(KIND=2)' function.
-
-Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `CONJG()' that is specific to one type for Z. *Note
-Conjg Intrinsic::.
-
-\1f
-File: g77.info, Node: DCosD Intrinsic, Next: DFloat Intrinsic, Prev: DConjg Intrinsic, Up: Other Intrinsics
-
-DCosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DCosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DFloat Intrinsic, Next: DFlotI Intrinsic, Prev: DCosD Intrinsic, Up: Other Intrinsics
-
-DFloat Intrinsic
-................
-
- DFloat(A)
-
-DFloat: `REAL(KIND=2)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-\1f
-File: g77.info, Node: DFlotI Intrinsic, Next: DFlotJ Intrinsic, Prev: DFloat Intrinsic, Up: Other Intrinsics
-
-DFlotI Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DFlotI' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DFlotJ Intrinsic, Next: DImag Intrinsic, Prev: DFlotI Intrinsic, Up: Other Intrinsics
-
-DFlotJ Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DFlotJ' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DImag Intrinsic, Next: DReal Intrinsic, Prev: DFlotJ Intrinsic, Up: Other Intrinsics
-
-DImag Intrinsic
-...............
-
- DImag(Z)
-
-DImag: `REAL(KIND=2)' function.
-
-Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `vxt'.
-
-Description:
-
- Archaic form of `AIMAG()' that is specific to one type for Z. *Note
-AImag Intrinsic::.
-
-\1f
-File: g77.info, Node: DReal Intrinsic, Next: DSinD Intrinsic, Prev: DImag Intrinsic, Up: Other Intrinsics
-
-DReal Intrinsic
-...............
-
- DReal(A)
-
-DReal: `REAL(KIND=2)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Converts A to `REAL(KIND=2)'.
-
- If A is type `COMPLEX', its real part is converted (if necessary) to
-`REAL(KIND=2)', and its imaginary part is disregarded.
-
- Although this intrinsic is not standard Fortran, it is a popular
-extension offered by many compilers that support `DOUBLE COMPLEX',
-since it offers the easiest way to extract the real part of a `DOUBLE
-COMPLEX' value without using the Fortran 90 `REAL()' intrinsic in a way
-that produces a return value inconsistent with the way many FORTRAN 77
-compilers handle `REAL()' of a `DOUBLE COMPLEX' value.
-
- *Note RealPart Intrinsic::, for information on a GNU Fortran
-intrinsic that avoids these areas of confusion.
-
- *Note Dble Intrinsic::, for information on the standard FORTRAN 77
-replacement for `DREAL()'.
-
- *Note REAL() and AIMAG() of Complex::, for more information on this
-issue.
-
-\1f
-File: g77.info, Node: DSinD Intrinsic, Next: DTanD Intrinsic, Prev: DReal Intrinsic, Up: Other Intrinsics
-
-DSinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DSinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DTanD Intrinsic, Next: Dtime Intrinsic (function), Prev: DSinD Intrinsic, Up: Other Intrinsics
-
-DTanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL DTanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Dtime Intrinsic (function), Next: FGet Intrinsic (function), Prev: DTanD Intrinsic, Up: Other Intrinsics
-
-Dtime Intrinsic (function)
-..........................
-
- Dtime(TARRAY)
-
-Dtime: `REAL(KIND=1)' function.
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Initially, return the number of seconds of runtime since the start
-of the process's execution as the function value, and the user and
-system components of this in `TARRAY(1)' and `TARRAY(2)' respectively.
-The functions' value is equal to `TARRAY(1) + TARRAY(2)'.
-
- Subsequent invocations of `DTIME()' return values accumulated since
-the previous invocation.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Dtime
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FGet Intrinsic (function), Next: FGetC Intrinsic (function), Prev: Dtime Intrinsic (function), Up: Other Intrinsics
-
-FGet Intrinsic (function)
-.........................
-
- FGet(C)
-
-FGet: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Reads a single character into C in stream mode from unit 5
-(by-passing normal formatted input) using `getc(3)'. Returns 0 on
-success, -1 on end-of-file, and the error code from `ferror(3)'
-otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGet
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FGetC Intrinsic (function), Next: FloatI Intrinsic, Prev: FGet Intrinsic (function), Up: Other Intrinsics
-
-FGetC Intrinsic (function)
-..........................
-
- FGetC(UNIT, C)
-
-FGetC: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Reads a single character into C in stream mode from unit UNIT
-(by-passing normal formatted output) using `getc(3)'. Returns 0 on
-success, -1 on end-of-file, and the error code from `ferror(3)'
-otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGetC
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FloatI Intrinsic, Next: FloatJ Intrinsic, Prev: FGetC Intrinsic (function), Up: Other Intrinsics
-
-FloatI Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL FloatI' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: FloatJ Intrinsic, Next: FPut Intrinsic (function), Prev: FloatI Intrinsic, Up: Other Intrinsics
-
-FloatJ Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL FloatJ' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: FPut Intrinsic (function), Next: FPutC Intrinsic (function), Prev: FloatJ Intrinsic, Up: Other Intrinsics
-
-FPut Intrinsic (function)
-.........................
-
- FPut(C)
-
-FPut: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Writes the single character C in stream mode to unit 6 (by-passing
-normal formatted output) using `getc(3)'. Returns 0 on success, the
-error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPut
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FPutC Intrinsic (function), Next: IDate Intrinsic (VXT), Prev: FPut Intrinsic (function), Up: Other Intrinsics
-
-FPutC Intrinsic (function)
-..........................
-
- FPutC(UNIT, C)
-
-FPutC: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Writes the single character C in stream mode to unit UNIT
-(by-passing normal formatted output) using `putc(3)'. Returns 0 on
-success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPutC
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: IDate Intrinsic (VXT), Next: IIAbs Intrinsic, Prev: FPutC Intrinsic (function), Up: Other Intrinsics
-
-IDate Intrinsic (VXT)
-.....................
-
- CALL IDate(M, D, Y)
-
-M: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-D: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Y: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns the numerical values of the current local time. The month
-(in the range 1-12) is returned in M, the day (in the range 1-7) in D,
-and the year in Y (in the range 0-99).
-
- This intrinsic is not recommended, due to the year 2000 approaching.
-
- For information on other intrinsics with the same name: *Note IDate
-Intrinsic (UNIX)::.
-
-\1f
-File: g77.info, Node: IIAbs Intrinsic, Next: IIAnd Intrinsic, Prev: IDate Intrinsic (VXT), Up: Other Intrinsics
-
-IIAbs Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIAbs' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIAnd Intrinsic, Next: IIBClr Intrinsic, Prev: IIAbs Intrinsic, Up: Other Intrinsics
-
-IIAnd Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIAnd' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIBClr Intrinsic, Next: IIBits Intrinsic, Prev: IIAnd Intrinsic, Up: Other Intrinsics
-
-IIBClr Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBClr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIBits Intrinsic, Next: IIBSet Intrinsic, Prev: IIBClr Intrinsic, Up: Other Intrinsics
-
-IIBits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBits' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIBSet Intrinsic, Next: IIDiM Intrinsic, Prev: IIBits Intrinsic, Up: Other Intrinsics
-
-IIBSet Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIBSet' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIDiM Intrinsic, Next: IIDInt Intrinsic, Prev: IIBSet Intrinsic, Up: Other Intrinsics
-
-IIDiM Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDiM' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIDInt Intrinsic, Next: IIDNnt Intrinsic, Prev: IIDiM Intrinsic, Up: Other Intrinsics
-
-IIDInt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIDNnt Intrinsic, Next: IIEOr Intrinsic, Prev: IIDInt Intrinsic, Up: Other Intrinsics
-
-IIDNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIDNnt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIEOr Intrinsic, Next: IIFix Intrinsic, Prev: IIDNnt Intrinsic, Up: Other Intrinsics
-
-IIEOr Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIEOr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIFix Intrinsic, Next: IInt Intrinsic, Prev: IIEOr Intrinsic, Up: Other Intrinsics
-
-IIFix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIFix' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IInt Intrinsic, Next: IIOr Intrinsic, Prev: IIFix Intrinsic, Up: Other Intrinsics
-
-IInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIOr Intrinsic, Next: IIQint Intrinsic, Prev: IInt Intrinsic, Up: Other Intrinsics
-
-IIOr Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIOr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIQint Intrinsic, Next: IIQNnt Intrinsic, Prev: IIOr Intrinsic, Up: Other Intrinsics
-
-IIQint Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIQint' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIQNnt Intrinsic, Next: IIShftC Intrinsic, Prev: IIQint Intrinsic, Up: Other Intrinsics
-
-IIQNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIQNnt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IIShftC Intrinsic, Next: IISign Intrinsic, Prev: IIQNnt Intrinsic, Up: Other Intrinsics
-
-IIShftC Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IIShftC' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: IISign Intrinsic, Next: IMax0 Intrinsic, Prev: IIShftC Intrinsic, Up: Other Intrinsics
-
-IISign Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IISign' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IMax0 Intrinsic, Next: IMax1 Intrinsic, Prev: IISign Intrinsic, Up: Other Intrinsics
-
-IMax0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMax0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IMax1 Intrinsic, Next: IMin0 Intrinsic, Prev: IMax0 Intrinsic, Up: Other Intrinsics
-
-IMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMax1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IMin0 Intrinsic, Next: IMin1 Intrinsic, Prev: IMax1 Intrinsic, Up: Other Intrinsics
-
-IMin0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMin0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IMin1 Intrinsic, Next: IMod Intrinsic, Prev: IMin0 Intrinsic, Up: Other Intrinsics
-
-IMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMin1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IMod Intrinsic, Next: INInt Intrinsic, Prev: IMin1 Intrinsic, Up: Other Intrinsics
-
-IMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IMod' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: INInt Intrinsic, Next: INot Intrinsic, Prev: IMod Intrinsic, Up: Other Intrinsics
-
-INInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL INInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: INot Intrinsic, Next: IZExt Intrinsic, Prev: INInt Intrinsic, Up: Other Intrinsics
-
-INot Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL INot' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IZExt Intrinsic, Next: JIAbs Intrinsic, Prev: INot Intrinsic, Up: Other Intrinsics
-
-IZExt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL IZExt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIAbs Intrinsic, Next: JIAnd Intrinsic, Prev: IZExt Intrinsic, Up: Other Intrinsics
-
-JIAbs Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIAbs' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIAnd Intrinsic, Next: JIBClr Intrinsic, Prev: JIAbs Intrinsic, Up: Other Intrinsics
-
-JIAnd Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIAnd' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIBClr Intrinsic, Next: JIBits Intrinsic, Prev: JIAnd Intrinsic, Up: Other Intrinsics
-
-JIBClr Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBClr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIBits Intrinsic, Next: JIBSet Intrinsic, Prev: JIBClr Intrinsic, Up: Other Intrinsics
-
-JIBits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBits' to use this name for an
-external procedure.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: JIBSet Intrinsic, Next: JIDiM Intrinsic, Prev: JIBits Intrinsic, Up: Other Intrinsics
-
-JIBSet Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIBSet' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIDiM Intrinsic, Next: JIDInt Intrinsic, Prev: JIBSet Intrinsic, Up: Other Intrinsics
-
-JIDiM Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDiM' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIDInt Intrinsic, Next: JIDNnt Intrinsic, Prev: JIDiM Intrinsic, Up: Other Intrinsics
-
-JIDInt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIDNnt Intrinsic, Next: JIEOr Intrinsic, Prev: JIDInt Intrinsic, Up: Other Intrinsics
-
-JIDNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIDNnt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIEOr Intrinsic, Next: JIFix Intrinsic, Prev: JIDNnt Intrinsic, Up: Other Intrinsics
-
-JIEOr Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIEOr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIFix Intrinsic, Next: JInt Intrinsic, Prev: JIEOr Intrinsic, Up: Other Intrinsics
-
-JIFix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIFix' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JInt Intrinsic, Next: JIOr Intrinsic, Prev: JIFix Intrinsic, Up: Other Intrinsics
-
-JInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIOr Intrinsic, Next: JIQint Intrinsic, Prev: JInt Intrinsic, Up: Other Intrinsics
-
-JIOr Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIOr' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIQint Intrinsic, Next: JIQNnt Intrinsic, Prev: JIOr Intrinsic, Up: Other Intrinsics
-
-JIQint Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIQint' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIQNnt Intrinsic, Next: JIShft Intrinsic, Prev: JIQint Intrinsic, Up: Other Intrinsics
-
-JIQNnt Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIQNnt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIShft Intrinsic, Next: JIShftC Intrinsic, Prev: JIQNnt Intrinsic, Up: Other Intrinsics
-
-JIShft Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIShft' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JIShftC Intrinsic, Next: JISign Intrinsic, Prev: JIShft Intrinsic, Up: Other Intrinsics
-
-JIShftC Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JIShftC' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: JISign Intrinsic, Next: JMax0 Intrinsic, Prev: JIShftC Intrinsic, Up: Other Intrinsics
-
-JISign Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JISign' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JMax0 Intrinsic, Next: JMax1 Intrinsic, Prev: JISign Intrinsic, Up: Other Intrinsics
-
-JMax0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMax0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JMax1 Intrinsic, Next: JMin0 Intrinsic, Prev: JMax0 Intrinsic, Up: Other Intrinsics
-
-JMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMax1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JMin0 Intrinsic, Next: JMin1 Intrinsic, Prev: JMax1 Intrinsic, Up: Other Intrinsics
-
-JMin0 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMin0' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JMin1 Intrinsic, Next: JMod Intrinsic, Prev: JMin0 Intrinsic, Up: Other Intrinsics
-
-JMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMin1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JMod Intrinsic, Next: JNInt Intrinsic, Prev: JMin1 Intrinsic, Up: Other Intrinsics
-
-JMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JMod' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JNInt Intrinsic, Next: JNot Intrinsic, Prev: JMod Intrinsic, Up: Other Intrinsics
-
-JNInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JNInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JNot Intrinsic, Next: JZExt Intrinsic, Prev: JNInt Intrinsic, Up: Other Intrinsics
-
-JNot Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JNot' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: JZExt Intrinsic, Next: Kill Intrinsic (function), Prev: JNot Intrinsic, Up: Other Intrinsics
-
-JZExt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL JZExt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Kill Intrinsic (function), Next: Link Intrinsic (function), Prev: JZExt Intrinsic, Up: Other Intrinsics
-
-Kill Intrinsic (function)
-.........................
-
- Kill(PID, SIGNAL)
-
-Kill: `INTEGER(KIND=1)' function.
-
-PID: `INTEGER'; scalar; INTENT(IN).
-
-SIGNAL: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sends the signal specified by SIGNAL to the process PID. Returns 0
-on success or a non-zero error code. See `kill(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Kill
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Link Intrinsic (function), Next: QAbs Intrinsic, Prev: Kill Intrinsic (function), Up: Other Intrinsics
-
-Link Intrinsic (function)
-.........................
-
- Link(PATH1, PATH2)
-
-Link: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Makes a (hard) link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success
-or a non-zero error code. See `link(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Link
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: QAbs Intrinsic, Next: QACos Intrinsic, Prev: Link Intrinsic (function), Up: Other Intrinsics
-
-QAbs Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QAbs' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QACos Intrinsic, Next: QACosD Intrinsic, Prev: QAbs Intrinsic, Up: Other Intrinsics
-
-QACos Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QACos' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QACosD Intrinsic, Next: QASin Intrinsic, Prev: QACos Intrinsic, Up: Other Intrinsics
-
-QACosD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QACosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QASin Intrinsic, Next: QASinD Intrinsic, Prev: QACosD Intrinsic, Up: Other Intrinsics
-
-QASin Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QASin' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QASinD Intrinsic, Next: QATan Intrinsic, Prev: QASin Intrinsic, Up: Other Intrinsics
-
-QASinD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QASinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QATan Intrinsic, Next: QATan2 Intrinsic, Prev: QASinD Intrinsic, Up: Other Intrinsics
-
-QATan Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QATan2 Intrinsic, Next: QATan2D Intrinsic, Prev: QATan Intrinsic, Up: Other Intrinsics
-
-QATan2 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan2' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QATan2D Intrinsic, Next: QATanD Intrinsic, Prev: QATan2 Intrinsic, Up: Other Intrinsics
-
-QATan2D Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATan2D' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: QATanD Intrinsic, Next: QCos Intrinsic, Prev: QATan2D Intrinsic, Up: Other Intrinsics
-
-QATanD Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QATanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QCos Intrinsic, Next: QCosD Intrinsic, Prev: QATanD Intrinsic, Up: Other Intrinsics
-
-QCos Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCos' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QCosD Intrinsic, Next: QCosH Intrinsic, Prev: QCos Intrinsic, Up: Other Intrinsics
-
-QCosD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCosD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QCosH Intrinsic, Next: QDiM Intrinsic, Prev: QCosD Intrinsic, Up: Other Intrinsics
-
-QCosH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QCosH' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QDiM Intrinsic, Next: QExp Intrinsic, Prev: QCosH Intrinsic, Up: Other Intrinsics
-
-QDiM Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QDiM' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QExp Intrinsic, Next: QExt Intrinsic, Prev: QDiM Intrinsic, Up: Other Intrinsics
-
-QExp Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExp' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QExt Intrinsic, Next: QExtD Intrinsic, Prev: QExp Intrinsic, Up: Other Intrinsics
-
-QExt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QExtD Intrinsic, Next: QFloat Intrinsic, Prev: QExt Intrinsic, Up: Other Intrinsics
-
-QExtD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QExtD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QFloat Intrinsic, Next: QInt Intrinsic, Prev: QExtD Intrinsic, Up: Other Intrinsics
-
-QFloat Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QFloat' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QInt Intrinsic, Next: QLog Intrinsic, Prev: QFloat Intrinsic, Up: Other Intrinsics
-
-QInt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QLog Intrinsic, Next: QLog10 Intrinsic, Prev: QInt Intrinsic, Up: Other Intrinsics
-
-QLog Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QLog' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QLog10 Intrinsic, Next: QMax1 Intrinsic, Prev: QLog Intrinsic, Up: Other Intrinsics
-
-QLog10 Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QLog10' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QMax1 Intrinsic, Next: QMin1 Intrinsic, Prev: QLog10 Intrinsic, Up: Other Intrinsics
-
-QMax1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMax1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QMin1 Intrinsic, Next: QMod Intrinsic, Prev: QMax1 Intrinsic, Up: Other Intrinsics
-
-QMin1 Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMin1' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QMod Intrinsic, Next: QNInt Intrinsic, Prev: QMin1 Intrinsic, Up: Other Intrinsics
-
-QMod Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QMod' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QNInt Intrinsic, Next: QSin Intrinsic, Prev: QMod Intrinsic, Up: Other Intrinsics
-
-QNInt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QNInt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QSin Intrinsic, Next: QSinD Intrinsic, Prev: QNInt Intrinsic, Up: Other Intrinsics
-
-QSin Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSin' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QSinD Intrinsic, Next: QSinH Intrinsic, Prev: QSin Intrinsic, Up: Other Intrinsics
-
-QSinD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QSinH Intrinsic, Next: QSqRt Intrinsic, Prev: QSinD Intrinsic, Up: Other Intrinsics
-
-QSinH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSinH' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QSqRt Intrinsic, Next: QTan Intrinsic, Prev: QSinH Intrinsic, Up: Other Intrinsics
-
-QSqRt Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QSqRt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QTan Intrinsic, Next: QTanD Intrinsic, Prev: QSqRt Intrinsic, Up: Other Intrinsics
-
-QTan Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTan' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QTanD Intrinsic, Next: QTanH Intrinsic, Prev: QTan Intrinsic, Up: Other Intrinsics
-
-QTanD Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: QTanH Intrinsic, Next: Rename Intrinsic (function), Prev: QTanD Intrinsic, Up: Other Intrinsics
-
-QTanH Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL QTanH' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Rename Intrinsic (function), Next: Secnds Intrinsic, Prev: QTanH Intrinsic, Up: Other Intrinsics
-
-Rename Intrinsic (function)
-...........................
-
- Rename(PATH1, PATH2)
-
-Rename: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks
-the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
-PATH1 and PATH2 are ignored. See `rename(2)'. Returns 0 on success or
-a non-zero error code.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Rename
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Secnds Intrinsic, Next: Signal Intrinsic (function), Prev: Rename Intrinsic (function), Up: Other Intrinsics
-
-Secnds Intrinsic
-................
-
- Secnds(T)
-
-Secnds: `REAL(KIND=1)' function.
-
-T: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns the local time in seconds since midnight minus the value T.
-
-\1f
-File: g77.info, Node: Signal Intrinsic (function), Next: SinD Intrinsic, Prev: Secnds Intrinsic, Up: Other Intrinsics
-
-Signal Intrinsic (function)
-...........................
-
- Signal(NUMBER, HANDLER)
-
-Signal: `INTEGER(KIND=1)' function.
-
-NUMBER: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
-with a single integer argument (of system-dependent length) when signal
-NUMBER occurs. If NUMBER is an integer, it can be used to turn off
-handling of signal HANDLER or revert to its default action. See
-`signal(2)'.
-
- Note that HANDLER will be called using C conventions, so its value in
-Fortran terms is obtained by applying `%LOC()' (or LOC()) to it.
-
- The value returned by `signal(2)' is returned.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Signal
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: SinD Intrinsic, Next: SnglQ Intrinsic, Prev: Signal Intrinsic (function), Up: Other Intrinsics
-
-SinD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL SinD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: SnglQ Intrinsic, Next: SymLnk Intrinsic (function), Prev: SinD Intrinsic, Up: Other Intrinsics
-
-SnglQ Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL SnglQ' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: SymLnk Intrinsic (function), Next: System Intrinsic (function), Prev: SnglQ Intrinsic, Up: Other Intrinsics
-
-SymLnk Intrinsic (function)
-...........................
-
- SymLnk(PATH1, PATH2)
-
-SymLnk: `INTEGER(KIND=1)' function.
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Makes a symbolic link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success
-or a non-zero error code (`ENOSYS' if the system does not provide
-`symlink(2)').
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note SymLnk
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: System Intrinsic (function), Next: TanD Intrinsic, Prev: SymLnk Intrinsic (function), Up: Other Intrinsics
-
-System Intrinsic (function)
-...........................
-
- System(COMMAND)
-
-System: `INTEGER(KIND=1)' function.
-
-COMMAND: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Passes the command COMMAND to a shell (see `system(3)'). Returns
-the value returned by `system(3)', presumably 0 if the shell command
-succeeded. Note that which shell is used to invoke the command is
-system-dependent and environment-dependent.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended. However, the function form can be valid in
-cases where the actual side effects performed by the call are
-unimportant to the application.
-
- For example, on a UNIX system, `SAME = SYSTEM('cmp a b')' does not
-perform any side effects likely to be important to the program, so the
-programmer would not care if the actual system call (and invocation of
-`cmp') was optimized away in a situation where the return value could
-be determined otherwise, or was not actually needed (`SAME' not
-actually referenced after the sample assignment statement).
-
- For information on other intrinsics with the same name: *Note System
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: TanD Intrinsic, Next: Time Intrinsic (VXT), Prev: System Intrinsic (function), Up: Other Intrinsics
-
-TanD Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL TanD' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Time Intrinsic (VXT), Next: UMask Intrinsic (function), Prev: TanD Intrinsic, Up: Other Intrinsics
-
-Time Intrinsic (VXT)
-....................
-
- CALL Time(TIME)
-
-TIME: `CHARACTER*8'; scalar; INTENT(OUT).
-
-Intrinsic groups: `vxt'.
-
-Description:
-
- Returns in TIME a character representation of the current time as
-obtained from `ctime(3)'.
-
- *Note Fdate Intrinsic (subroutine):: for an equivalent routine.
-
- For information on other intrinsics with the same name: *Note Time
-Intrinsic (UNIX)::.
-
-\1f
-File: g77.info, Node: UMask Intrinsic (function), Next: Unlink Intrinsic (function), Prev: Time Intrinsic (VXT), Up: Other Intrinsics
-
-UMask Intrinsic (function)
-..........................
-
- UMask(MASK)
-
-UMask: `INTEGER(KIND=1)' function.
-
-MASK: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Sets the file creation mask to MASK and returns the old value. See
-`umask(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note UMask
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Unlink Intrinsic (function), Next: ZExt Intrinsic, Prev: UMask Intrinsic (function), Up: Other Intrinsics
-
-Unlink Intrinsic (function)
-...........................
-
- Unlink(FILE)
-
-Unlink: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `badu77'.
-
-Description:
-
- Unlink the file FILE. A null character (`CHAR(0)') marks the end of
-the name in FILE--otherwise, trailing blanks in FILE are ignored.
-Returns 0 on success or a non-zero error code. See `unlink(2)'.
-
- Due to the side effects performed by this intrinsic, the function
-form is not recommended.
-
- For information on other intrinsics with the same name: *Note Unlink
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: ZExt Intrinsic, Prev: Unlink Intrinsic (function), Up: Other Intrinsics
-
-ZExt Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL ZExt' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Other Compilers, Next: Other Languages, Prev: Other Dialects, Up: Top
-
-Other Compilers
-***************
-
- An individual Fortran source file can be compiled to an object
-(`*.o') file instead of to the final program executable. This allows
-several portions of a program to be compiled at different times and
-linked together whenever a new version of the program is needed.
-However, it introduces the issue of "object compatibility" across the
-various object files (and libraries, or `*.a' files) that are linked
-together to produce any particular executable file.
-
- Object compatibility is an issue when combining, in one program,
-Fortran code compiled by more than one compiler (or more than one
-configuration of a compiler). If the compilers disagree on how to
-transform the names of procedures, there will normally be errors when
-linking such programs. Worse, if the compilers agree on naming, but
-disagree on issues like how to pass parameters, return arguments, and
-lay out `COMMON' areas, the earliest detected errors might be the
-incorrect results produced by the program (and that assumes these
-errors are detected, which is not always the case).
-
- Normally, `g77' generates code that is object-compatible with code
-generated by a version of `f2c' configured (with, for example, `f2c.h'
-definitions) to be generally compatible with `g77' as built by `gcc'.
-(Normally, `f2c' will, by default, conform to the appropriate
-configuration, but it is possible that older or perhaps even newer
-versions of `f2c', or versions having certain configuration changes to
-`f2c' internals, will produce object files that are incompatible with
-`g77'.)
-
- For example, a Fortran string subroutine argument will become two
-arguments on the C side: a `char *' and an `int' length.
-
- Much of this compatibility results from the fact that `g77' uses the
-same run-time library, `libf2c', used by `f2c'.
-
- Other compilers might or might not generate code that is
-object-compatible with `libf2c' and current `g77', and some might offer
-such compatibility only when explicitly selected via a command-line
-option to the compiler.
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Dropping f2c Compatibility:: When speed is more important.
-* Compilers Other Than f2c:: Interoperation with code from other compilers.
-
-\1f
-File: g77.info, Node: Dropping f2c Compatibility, Next: Compilers Other Than f2c, Up: Other Compilers
-
-Dropping `f2c' Compatibility
-============================
-
- Specifying `-fno-f2c' allows `g77' to generate, in some cases,
-faster code, by not needing to allow to the possibility of linking with
-code compiled by `f2c'.
-
- For example, this affects how `REAL(KIND=1)', `COMPLEX(KIND=1)', and
-`COMPLEX(KIND=2)' functions are called. With `-fno-f2c', they are
-compiled as returning the appropriate `gcc' type (`float', `__complex__
-float', `__complex__ double', in many configurations).
-
- With `-ff2c' in force, they are compiled differently (with perhaps
-slower run-time performance) to accommodate the restrictions inherent
-in `f2c''s use of K&R C as an intermediate language--`REAL(KIND=1)'
-functions return C's `double' type, while `COMPLEX' functions return
-`void' and use an extra argument pointing to a place for the functions
-to return their values.
-
- It is possible that, in some cases, leaving `-ff2c' in force might
-produce faster code than using `-fno-f2c'. Feel free to experiment,
-but remember to experiment with changing the way *entire programs and
-their Fortran libraries are compiled* at a time, since this sort of
-experimentation affects the interface of code generated for a Fortran
-source file--that is, it affects object compatibility.
-
- Note that `f2c' compatibility is a fairly static target to achieve,
-though not necessarily perfectly so, since, like `g77', it is still
-being improved. However, specifying `-fno-f2c' causes `g77' to
-generate code that will probably be incompatible with code generated by
-future versions of `g77' when the same option is in force. You should
-make sure you are always able to recompile complete programs from
-source code when upgrading to new versions of `g77' or `f2c',
-especially when using options such as `-fno-f2c'.
-
- Therefore, if you are using `g77' to compile libraries and other
-object files for possible future use and you don't want to require
-recompilation for future use with subsequent versions of `g77', you
-might want to stick with `f2c' compatibility for now, and carefully
-watch for any announcements about changes to the `f2c'/`libf2c'
-interface that might affect existing programs (thus requiring
-recompilation).
-
- It is probable that a future version of `g77' will not, by default,
-generate object files compatible with `f2c', and that version probably
-would no longer use `libf2c'. If you expect to depend on this
-compatibility in the long term, use the options `-ff2c -ff2c-library'
-when compiling all of the applicable code. This should cause future
-versions of `g77' either to produce compatible code (at the expense of
-the availability of some features and performance), or at the very
-least, to produce diagnostics.
-
-\1f
-File: g77.info, Node: Compilers Other Than f2c, Prev: Dropping f2c Compatibility, Up: Other Compilers
-
-Compilers Other Than `f2c'
-==========================
-
- On systems with Fortran compilers other than `f2c' and `g77', code
-compiled by `g77' is not expected to work well with code compiled by
-the native compiler. (This is true for `f2c'-compiled objects as
-well.) Libraries compiled with the native compiler probably will have
-to be recompiled with `g77' to be used with `g77'-compiled code.
-
- Reasons for such incompatibilities include:
-
- * There might be differences in the way names of Fortran procedures
- are translated for use in the system's object-file format. For
- example, the statement `CALL FOO' might be compiled by `g77' to
- call a procedure the linker `ld' sees given the name `_foo_',
- while the apparently corresponding statement `SUBROUTINE FOO'
- might be compiled by the native compiler to define the
- linker-visible name `_foo', or `_FOO_', and so on.
-
- * There might be subtle type mismatches which cause subroutine
- arguments and function return values to get corrupted.
-
- This is why simply getting `g77' to transform procedure names the
- same way a native compiler does is not usually a good idea--unless
- some effort has been made to ensure that, aside from the way the
- two compilers transform procedure names, everything else about the
- way they generate code for procedure interfaces is identical.
-
- * Native compilers use libraries of private I/O routines which will
- not be available at link time unless you have the native
- compiler--and you would have to explicitly ask for them.
-
- For example, on the Sun you would have to add `-L/usr/lang/SCx.x
- -lF77 -lV77' to the link command.
-
-\1f
-File: g77.info, Node: Other Languages, Next: Installation, Prev: Other Compilers, Up: Top
-
-Other Languages
-***************
-
- *Note: This portion of the documentation definitely needs a lot of
-work!*
-
-* Menu:
-
-* Interoperating with C and C++::
-
-\1f
-File: g77.info, Node: Interoperating with C and C++, Up: Other Languages
-
-Tools and advice for interoperating with C and C++
-==================================================
-
- The following discussion assumes that you are running `g77' in `f2c'
-compatibility mode, i.e. not using `-fno-f2c'. It provides some advice
-about quick and simple techniques for linking Fortran and C (or C++),
-the most common requirement. For the full story consult the
-description of code generation. *Note Debugging and Interfacing::.
-
- When linking Fortran and C, it's usually best to use `g77' to do the
-linking so that the correct libraries are included (including the maths
-one). If you're linking with C++ you will want to add `-lstdc++',
-`-lg++' or whatever. If you need to use another driver program (or
-`ld' directly), you can find out what linkage options `g77' passes by
-running `g77 -v'.
-
-* Menu:
-
-* C Interfacing Tools::
-* C Access to Type Information::
-* f2c Skeletons and Prototypes::
-* C++ Considerations::
-* Startup Code::
-
-\1f
-File: g77.info, Node: C Interfacing Tools, Next: C Access to Type Information, Up: Interoperating with C and C++
-
-C Interfacing Tools
--------------------
-
- Even if you don't actually use it as a compiler, `f2c' from
-`ftp://ftp.netlib.org/f2c/src', can be a useful tool when you're
-interfacing (linking) Fortran and C. *Note Generating Skeletons and
-Prototypes with `f2c': f2c Skeletons and Prototypes.
-
- To use `f2c' for this purpose you only need retrieve and build the
-`src' directory from the distribution, consult the `README'
-instructions there for machine-specifics, and install the `f2c' program
-on your path.
-
- Something else that might be useful is `cfortran.h' from
-`ftp://zebra/desy.de/cfortran'. This is a fairly general tool which
-can be used to generate interfaces for calling in both directions
-between Fortran and C. It can be used in `f2c' mode with
-`g77'--consult its documentation for details.
-
-\1f
-File: g77.info, Node: C Access to Type Information, Next: f2c Skeletons and Prototypes, Prev: C Interfacing Tools, Up: Interoperating with C and C++
-
-Accessing Type Information in C
--------------------------------
-
- Generally, C code written to link with `g77' code--calling and/or
-being called from Fortran--should `#include <f2c.h>' to define the C
-versions of the Fortran types. Don't assume Fortran `INTEGER' types
-correspond to C `int's, for instance; instead, declare them as
-`integer', a type defined by `f2c.h'. `f2c.h' is installed where `gcc'
-will find it by default, assuming you use a copy of `gcc' compatible
-with `g77', probably built at the same time as `g77'.
-
-\1f
-File: g77.info, Node: f2c Skeletons and Prototypes, Next: C++ Considerations, Prev: C Access to Type Information, Up: Interoperating with C and C++
-
-Generating Skeletons and Prototypes with `f2c'
-----------------------------------------------
-
- A simple and foolproof way to write `g77'-callable C routines--e.g.
-to interface with an existing library--is to write a file (named, for
-example, `fred.f') of dummy Fortran skeletons comprising just the
-declaration of the routine(s) and dummy arguments plus `END' statements.
-Then run `f2c' on file `fred.f' to produce `fred.c' into which you can
-edit useful code, confident the calling sequence is correct, at least.
-(There are some errors otherwise commonly made in generating C
-interfaces with f2c conventions, such as not using `doublereal' as the
-return type of a `REAL' `FUNCTION'.)
-
- `f2c' also can help with calling Fortran from C, using its `-P'
-option to generate C prototypes appropriate for calling the Fortran.(1)
-If the Fortran code containing any routines to be called from C is in
-file `joe.f', use the command `f2c -P joe.f' to generate the file
-`joe.P' containing prototype information. `#include' this in the C
-which has to call the Fortran routines to make sure you get it right.
-
- *Note Arrays (DIMENSION: Arrays, for information on the differences
-between the way Fortran (including compilers like `g77') and C handle
-arrays.
-
- ---------- Footnotes ----------
-
- (1) The files generated like this can also be used for inter-unit
-consistency checking of dummy and actual arguments, although the
-`ftnchek' tool from `ftp://ftp.netlib.org/fortran' or
-`ftp://ftp.dsm.fordham.edu' is probably better for this purpose.
-
-\1f
-File: g77.info, Node: C++ Considerations, Next: Startup Code, Prev: f2c Skeletons and Prototypes, Up: Interoperating with C and C++
-
-C++ Considerations
-------------------
-
- `f2c' can be used to generate suitable code for compilation with a
-C++ system using the `-C++' option. The important thing about linking
-`g77'-compiled code with C++ is that the prototypes for the `g77'
-routines must specify C linkage to avoid name mangling. So, use an
-`extern "C"' declaration. `f2c''s `-C++' option will take care of this
-when generating skeletons or prototype files as above, and also avoid
-clashes with C++ reserved words in addition to those in C.
-
-\1f
-File: g77.info, Node: Startup Code, Prev: C++ Considerations, Up: Interoperating with C and C++
-
-Startup Code
-------------
-
- Unlike with some runtime systems, it shouldn't be necessary (unless
-there are bugs) to use a Fortran main program to ensure the
-runtime--specifically the i/o system--is initialized. However, to use
-the `g77' intrinsics `GETARG()' and `IARGC()' the `main()' routine from
-the `libf2c' library must be used, either explicitly or implicitly by
-using a Fortran main program. This `main()' program calls `MAIN__()'
-(where the names are C-type `extern' names, i.e. not mangled). You
-need to provide this nullary procedure as the entry point for your C
-code if using `libf2c''s `main'. In some cases it might be necessary to
-provide a dummy version of this to avoid linkers complaining about
-failure to resolve `MAIN__()' if linking against `libf2c' and not using
-`main()' from it.
-
-\1f
-File: g77.info, Node: Installation, Next: Debugging and Interfacing, Prev: Other Languages, Up: Top
-
-Installing GNU Fortran
-**********************
-
- The following information describes how to install `g77'.
-
- The information in this file generally pertains to dealing with
-*source* distributions of `g77' and `gcc'. It is possible that some of
-this information will be applicable to some *binary* distributions of
-these products--however, since these distributions are not made by the
-maintainers of `g77', responsibility for binary distributions rests with
-whoever built and first distributed them.
-
- Nevertheless, efforts to make `g77' easier to both build and install
-from source and package up as a binary distribution are ongoing.
-
-* Menu:
-
-* Prerequisites:: Make sure your system is ready for `g77'.
-* Problems Installing:: Known trouble areas.
-* Settings:: Changing `g77' internals before building.
-* Quick Start:: The easier procedure for non-experts.
-* Complete Installation:: For experts, or those who want to be: the details.
-* Distributing Binaries:: If you plan on distributing your `g77'.
-
-\1f
-File: g77.info, Node: Prerequisites, Next: Problems Installing, Up: Installation
-
-Prerequisites
-=============
-
- The procedures described to unpack, configure, build, and install
-`g77' assume your system has certain programs already installed.
-
- The following prerequisites should be met by your system before you
-follow the `g77' installation instructions:
-
-`gzip'
- To unpack the `gcc' and `g77' distributions, you'll need the
- `gunzip' utility in the `gzip' distribution. Most UNIX systems
- already have `gzip' installed. If yours doesn't, you can get it
- from the FSF.
-
- Note that you'll need `tar' and other utilities as well, but all
- UNIX systems have these. There are GNU versions of all these
- available--in fact, a complete GNU UNIX system can be put together
- on most systems, if desired.
-
- The version of GNU `gzip' used to package this release is 1.24.
- (The version of GNU `tar' used to package this release is 1.11.2.)
-
-`gcc-2.7.2.3.tar.gz'
- You need to have this, or some other applicable, version of `gcc'
- on your system. The version should be an exact copy of a
- distribution from the FSF. Its size is approximately 7.1MB.
-
- If you've already unpacked `gcc-2.7.2.3.tar.gz' into a directory
- (named `gcc-2.7.2.3') called the "source tree" for `gcc', you can
- delete the distribution itself, but you'll need to remember to
- skip any instructions to unpack this distribution.
-
- Without an applicable `gcc' source tree, you cannot build `g77'.
- You can obtain an FSF distribution of `gcc' from the FSF.
-
-`g77-0.5.21.tar.gz'
- You probably have already unpacked this package, or you are
- reading an advance copy of these installation instructions, which
- are contained in this distribution. The size of this package is
- approximately 1.5MB.
-
- You can obtain an FSF distribution of `g77' from the FSF, the same
- way you obtained `gcc'.
-
-Enough disk space
- The amount of disk space needed to unpack, build, install, and use
- `g77' depends on the type of system you're using, how you build
- `g77', and how much of it you install (primarily, which languages
- you install).
-
- The sizes shown below assume all languages distributed in
- `gcc-2.7.2.3', plus `g77', will be built and installed. These
- sizes are indicative of GNU/Linux systems on Intel x86 running
- COFF and on Digital Alpha (AXP) systems running ELF. These should
- be fairly representative of 32-bit and 64-bit systems,
- respectively.
-
- Note that all sizes are approximate and subject to change without
- notice! They are based on preliminary releases of g77 made shortly
- before the public beta release.
-
- -- `gcc' and `g77' distributions occupy 8.6MB packed, 35MB
- unpacked. These consist of the source code and documentation,
- plus some derived files (mostly documentation), for `gcc' and
- `g77'. Any deviations from these numbers for different kinds
- of systems are likely to be very minor.
-
- -- A "bootstrap" build requires an additional 67.3MB for a
- total of 102MB on an ix86, and an additional 98MB for a total
- of 165MB on an Alpha.
-
- -- Removing `gcc/stage1' after the build recovers 10.7MB for a
- total of 91MB on an ix86, and recovers ??MB for a total of
- ??MB on an Alpha.
-
- After doing this, the integrity of the build can still be
- verified via `make compare', and the `gcc' compiler modified
- and used to build itself for testing fairly quickly, using
- the copy of the compiler kept in `gcc/stage2'.
-
- -- Removing `gcc/stage2' after the build further recovers
- 27.3MB for a total of 64.3MB, and recovers ??MB for a total
- of ??MB on an Alpha.
-
- After doing this, the compiler can still be installed,
- especially if GNU `make' is used to avoid gratuitous rebuilds
- (or, the installation can be done by hand).
-
- -- Installing `gcc' and `g77' copies 14.9MB onto the `--prefix'
- disk for a total of 79.2MB on an ix86, and copies ??MB onto
- the `--prefix' disk for a total of ??MB on an Alpha.
-
- After installation, if no further modifications and builds of
- `gcc' or `g77' are planned, the source and build directory may be
- removed, leaving the total impact on a system's disk storage as
- that of the amount copied during installation.
-
- Systems with the appropriate version of `gcc' installed don't
- require the complete bootstrap build. Doing a "straight build"
- requires about as much space as does a bootstrap build followed by
- removing both the `gcc/stage1' and `gcc/stage2' directories.
-
- Installing `gcc' and `g77' over existing versions might require
- less *new* disk space, but note that, unlike many products, `gcc'
- installs itself in a way that avoids overwriting other installed
- versions of itself, so that other versions may easily be invoked
- (via `gcc -V VERSION').
-
- So, the amount of space saved as a result of having an existing
- version of `gcc' and `g77' already installed is not
- much--typically only the command drivers (`gcc', `g77', `g++', and
- so on, which are small) and the documentation is overwritten by
- the new installation. The rest of the new installation is done
- without replacing existing installed versions (assuming they have
- different version numbers).
-
-`patch'
- Although you can do everything `patch' does yourself, by hand,
- without much trouble, having `patch' installed makes installation
- of new versions of GNU utilities such as `g77' so much easier that
- it is worth getting. You can obtain `patch' the same way you
- obtained `gcc' and `g77'.
-
- In any case, you can apply patches by hand--patch files are
- designed for humans to read them.
-
- The version of GNU `patch' used to develop this release is 2.4.
-
-`make'
- Your system must have `make', and you will probably save yourself
- a lot of trouble if it is GNU `make' (sometimes referred to as
- `gmake').
-
- The version of GNU `make' used to develop this release is 3.73.
-
-`cc'
- Your system must have a working C compiler.
-
- *Note Installing GNU CC: (gcc)Installation, for more information
- on prerequisites for installing `gcc'.
-
-`bison'
- If you do not have `bison' installed, you can usually work around
- any need for it, since `g77' itself does not use it, and `gcc'
- normally includes all files generated by running it in its
- distribution. You can obtain `bison' the same way you obtained
- `gcc' and `g77'.
-
- The version of GNU `bison' used to develop this release is 1.25.
-
- *Note Missing bison?::, for information on how to work around not
- having `bison'.
-
-`makeinfo'
- If you are missing `makeinfo', you can usually work around any
- need for it. You can obtain `makeinfo' the same way you obtained
- `gcc' and `g77'.
-
- The version of GNU `makeinfo' used to develop this release is
- 1.68, from GNU `texinfo' version 3.11.
-
- *Note Missing makeinfo?::, for information on getting around the
- lack of `makeinfo'.
-
-`sed'
- All UNIX systems have `sed', but some have a broken version that
- cannot handle configuring, building, or installing `gcc' or `g77'.
-
- The version of GNU `sed' used to develop this release is 2.05.
- (Note that GNU `sed' version 3.0 was withdrawn by the FSF--if you
- happen to have this version installed, replace it with version
- 2.05 immediately. See a GNU distribution site for further
- explanation.)
-
-`root' access or equivalent
- To perform the complete installation procedures on a system, you
- need to have `root' access to that system, or equivalent access to
- the `--prefix' directory tree specified on the `configure' command
- line.
-
- Portions of the procedure (such as configuring and building `g77')
- can be performed by any user with enough disk space and virtual
- memory.
-
- However, these instructions are oriented towards less-experienced
- users who want to install `g77' on their own personal systems.
-
- System administrators with more experience will want to determine
- for themselves how they want to modify the procedures described
- below to suit the needs of their installation.
-
-\1f
-File: g77.info, Node: Problems Installing, Next: Settings, Prev: Prerequisites, Up: Installation
-
-Problems Installing
-===================
-
- This is a list of problems (and some apparent problems which don't
-really mean anything is wrong) that show up when configuring, building,
-installing, or porting GNU Fortran.
-
- *Note Installation Problems: (gcc)Installation Problems, for more
-information on installation problems that can afflict either `gcc' or
-`g77'.
-
-* Menu:
-
-* General Problems:: Problems afflicting most or all systems.
-* Cross-compiler Problems:: Problems afflicting cross-compilation setups.
-
-\1f
-File: g77.info, Node: General Problems, Next: Cross-compiler Problems, Up: Problems Installing
-
-General Problems
-----------------
-
- These problems can occur on most or all systems.
-
-* Menu:
-
-* GNU C Required:: Why even ANSI C is not enough.
-* Patching GNU CC Necessary:: Why `gcc' must be patched first.
-* Building GNU CC Necessary:: Why you can't build *just* Fortran.
-* Missing strtoul:: If linking `f771' fails due to an
- unresolved reference to `strtoul'.
-* Object File Differences:: It's okay that `make compare' will
- flag `f/zzz.o'.
-* Cleanup Kills Stage Directories:: A minor nit for `g77' developers.
-* Missing gperf?:: When building requires `gperf'.
-
-\1f
-File: g77.info, Node: GNU C Required, Next: Patching GNU CC Necessary, Up: General Problems
-
-GNU C Required
-..............
-
- Compiling `g77' requires GNU C, not just ANSI C. Fixing this
-wouldn't be very hard (just tedious), but the code using GNU extensions
-to the C language is expected to be rewritten for 0.6 anyway, so there
-are no plans for an interim fix.
-
- This requirement does not mean you must already have `gcc' installed
-to build `g77'. As long as you have a working C compiler, you can use a
-bootstrap build to automate the process of first building `gcc' using
-the working C compiler you have, then building `g77' and rebuilding
-`gcc' using that just-built `gcc', and so on.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Patching GNU CC Necessary, Next: Building GNU CC Necessary, Prev: GNU C Required, Up: General Problems
-
-Patching GNU CC Necessary
-.........................
-
- `g77' currently requires application of a patch file to the gcc
-compiler tree. The necessary patches should be folded in to the
-mainline gcc distribution.
-
- Some combinations of versions of `g77' and `gcc' might actually
-*require* no patches, but the patch files will be provided anyway as
-long as there are more changes expected in subsequent releases. These
-patch files might contain unnecessary, but possibly helpful, patches.
-As a result, it is possible this issue might never be resolved, except
-by eliminating the need for the person configuring `g77' to apply a
-patch by hand, by going to a more automated approach (such as
-configure-time patching).
-
-\1f
-File: g77.info, Node: Building GNU CC Necessary, Next: Missing strtoul, Prev: Patching GNU CC Necessary, Up: General Problems
-
-Building GNU CC Necessary
-.........................
-
- It should be possible to build the runtime without building `cc1'
-and other non-Fortran items, but, for now, an easy way to do that is
-not yet established.
-
-\1f
-File: g77.info, Node: Missing strtoul, Next: Object File Differences, Prev: Building GNU CC Necessary, Up: General Problems
-
-Missing strtoul
-...............
-
- On SunOS4 systems, linking the `f771' program produces an error
-message concerning an undefined symbol named `_strtoul'.
-
- This is not a `g77' bug. *Note Patching GNU Fortran::, for
-information on a workaround provided by `g77'.
-
- The proper fix is either to upgrade your system to one that provides
-a complete ANSI C environment, or improve `gcc' so that it provides one
-for all the languages and configurations it supports.
-
- *Note:* In earlier versions of `g77', an automated workaround for
-this problem was attempted. It worked for systems without `_strtoul',
-substituting the incomplete-yet-sufficient version supplied with `g77'
-for those systems. However, the automated workaround failed
-mysteriously for systems that appeared to have conforming ANSI C
-environments, and it was decided that, lacking resources to more fully
-investigate the problem, it was better to not punish users of those
-systems either by requiring them to work around the problem by hand or
-by always substituting an incomplete `strtoul()' implementation when
-their systems had a complete, working one. Unfortunately, this meant
-inconveniencing users of systems not having `strtoul()', but they're
-using obsolete (and generally unsupported) systems anyway.
-
-\1f
-File: g77.info, Node: Object File Differences, Next: Cleanup Kills Stage Directories, Prev: Missing strtoul, Up: General Problems
-
-Object File Differences
-.......................
-
- A comparison of object files after building Stage 3 during a
-bootstrap build will result in `gcc/f/zzz.o' being flagged as different
-from the Stage 2 version. That is because it contains a string with an
-expansion of the `__TIME__' macro, which expands to the current time of
-day. It is nothing to worry about, since `gcc/f/zzz.c' doesn't contain
-any actual code. It does allow you to override its use of `__DATE__'
-and `__TIME__' by defining macros for the compilation--see the source
-code for details.
-
-\1f
-File: g77.info, Node: Cleanup Kills Stage Directories, Next: Missing gperf?, Prev: Object File Differences, Up: General Problems
-
-Cleanup Kills Stage Directories
-...............................
-
- It'd be helpful if `g77''s `Makefile.in' or `Make-lang.in' would
-create the various `stageN' directories and their subdirectories, so
-developers and expert installers wouldn't have to reconfigure after
-cleaning up.
-
-\1f
-File: g77.info, Node: Missing gperf?, Prev: Cleanup Kills Stage Directories, Up: General Problems
-
-Missing `gperf'?
-................
-
- If a build aborts trying to invoke `gperf', that strongly suggests
-an improper method was used to create the `gcc' source directory, such
-as the UNIX `cp -r' command instead of `cp -pr', since this problem
-very likely indicates that the date-time-modified information on the
-`gcc' source files is incorrect.
-
- The proper solution is to recreate the `gcc' source directory from a
-`gcc' distribution known to be provided by the FSF.
-
- It is possible you might be able to temporarily work around the
-problem, however, by trying these commands:
-
- sh# cd gcc
- sh# touch c-gperf.h
- sh#
-
- These commands update the date-time-modified information for the
-file produced by the invocation of `gperf' in the current versions of
-`gcc', so that `make' no longer believes it needs to update it. This
-file should already exist in a `gcc' distribution, but mistakes made
-when copying the `gcc' directory can leave the modification information
-set such that the `gperf' input files look more "recent" than the
-corresponding output files.
-
- If the above does not work, definitely start from scratch and avoid
-copying the `gcc' using any method that does not reliably preserve
-date-time-modified information, such as the UNIX `cp -r' command.
-
-\1f
-File: g77.info, Node: Cross-compiler Problems, Prev: General Problems, Up: Problems Installing
-
-Cross-compiler Problems
------------------------
-
- `g77' has been in alpha testing since September of 1992, and in
-public beta testing since February of 1995. Alpha testing was done by
-a small number of people worldwide on a fairly wide variety of
-machines, involving self-compilation in most or all cases. Beta
-testing has been done primarily via self-compilation, but in more and
-more cases, cross-compilation (and "criss-cross compilation", where a
-version of a compiler is built on one machine to run on a second and
-generate code that runs on a third) has been tried and has succeeded,
-to varying extents.
-
- Generally, `g77' can be ported to any configuration to which `gcc',
-`f2c', and `libf2c' can be ported and made to work together, aside from
-the known problems described in this manual. If you want to port `g77'
-to a particular configuration, you should first make sure `gcc' and
-`libf2c' can be ported to that configuration before focusing on `g77',
-because `g77' is so dependent on them.
-
- Even for cases where `gcc' and `libf2c' work, you might run into
-problems with cross-compilation on certain machines, for several
-reasons.
-
- * There is one known bug (a design bug to be fixed in 0.6) that
- prevents configuration of `g77' as a cross-compiler in some cases,
- though there are assumptions made during configuration that
- probably make doing non-self-hosting builds a hassle, requiring
- manual intervention.
-
- * `gcc' might still have some trouble being configured for certain
- combinations of machines. For example, it might not know how to
- handle floating-point constants.
-
- * Improvements to the way `libf2c' is built could make building
- `g77' as a cross-compiler easier--for example, passing and using
- `$(LD)' and `$(AR)' in the appropriate ways.
-
- * There are still some challenges putting together the right
- run-time libraries (needed by `libf2c') for a target system,
- depending on the systems involved in the configuration. (This is
- a general problem with cross-compilation, and with `gcc' in
- particular.)
-
-\1f
-File: g77.info, Node: Settings, Next: Quick Start, Prev: Problems Installing, Up: Installation
-
-Changing Settings Before Building
-=================================
-
- Here are some internal `g77' settings that can be changed by editing
-source files in `gcc/f/' before building.
-
- This information, and perhaps even these settings, represent
-stop-gap solutions to problems people doing various ports of `g77' have
-encountered. As such, none of the following information is expected to
-be pertinent in future versions of `g77'.
-
-* Menu:
-
-* Larger File Unit Numbers:: Raising `MXUNIT'.
-* Always Flush Output:: Synchronizing write errors.
-* Maximum Stackable Size:: Large arrays forced off the stack.
-* Floating-point Bit Patterns:: Possible programs building `g77'
- as a cross-compiler.
-* Large Initialization:: Large arrays with `DATA'
- initialization.
-* Alpha Problems Fixed:: Problems with 64-bit systems like
- Alphas now fixed?
-
-\1f
-File: g77.info, Node: Larger File Unit Numbers, Next: Always Flush Output, Up: Settings
-
-Larger File Unit Numbers
-------------------------
-
- As distributed, whether as part of `f2c' or `g77', `libf2c' accepts
-file unit numbers only in the range 0 through 99. For example, a
-statement such as `WRITE (UNIT=100)' causes a run-time crash in
-`libf2c', because the unit number, 100, is out of range.
-
- If you know that Fortran programs at your installation require the
-use of unit numbers higher than 99, you can change the value of the
-`MXUNIT' macro, which represents the maximum unit number, to an
-appropriately higher value.
-
- To do this, edit the file `f/runtime/libI77/fio.h' in your `g77'
-source tree, changing the following line:
-
- #define MXUNIT 100
-
- Change the line so that the value of `MXUNIT' is defined to be at
-least one *greater* than the maximum unit number used by the Fortran
-programs on your system.
-
- (For example, a program that does `WRITE (UNIT=255)' would require
-`MXUNIT' set to at least 256 to avoid crashing.)
-
- Then build or rebuild `g77' as appropriate.
-
- *Note:* Changing this macro has *no* effect on other limits your
-system might place on the number of files open at the same time. That
-is, the macro might allow a program to do `WRITE (UNIT=100)', but the
-library and operating system underlying `libf2c' might disallow it if
-many other files have already been opened (via `OPEN' or implicitly via
-`READ', `WRITE', and so on). Information on how to increase these
-other limits should be found in your system's documentation.
-
-\1f
-File: g77.info, Node: Always Flush Output, Next: Maximum Stackable Size, Prev: Larger File Unit Numbers, Up: Settings
-
-Always Flush Output
--------------------
-
- Some Fortran programs require output (writes) to be flushed to the
-operating system (under UNIX, via the `fflush()' library call) so that
-errors, such as disk full, are immediately flagged via the relevant
-`ERR=' and `IOSTAT=' mechanism, instead of such errors being flagged
-later as subsequent writes occur, forcing the previously written data
-to disk, or when the file is closed.
-
- Essentially, the difference can be viewed as synchronous error
-reporting (immediate flagging of errors during writes) versus
-asynchronous, or, more precisely, buffered error reporting (detection
-of errors might be delayed).
-
- `libf2c' supports flagging write errors immediately when it is built
-with the `ALWAYS_FLUSH' macro defined. This results in a `libf2c' that
-runs slower, sometimes quite a bit slower, under certain
-circumstances--for example, accessing files via the networked file
-system NFS--but the effect can be more reliable, robust file I/O.
-
- If you know that Fortran programs requiring this level of precision
-of error reporting are to be compiled using the version of `g77' you
-are building, you might wish to modify the `g77' source tree so that
-the version of `libf2c' is built with the `ALWAYS_FLUSH' macro defined,
-enabling this behavior.
-
- To do this, find this line in `f/runtime/configure.in' in your `g77'
-source tree:
-
- dnl AC_DEFINE(ALWAYS_FLUSH)
-
- Remove the leading `dnl ', so the line begins with `AC_DEFINE(', and
-run `autoconf' in that file's directory. (Or, if you don't have
-`autoconf', you can modify `f2c.h.in' in the same directory to include
-the line `#define ALWAYS_FLUSH' after `#define F2C_INCLUDE'.)
-
- Then build or rebuild `g77' as appropriate.
-
-\1f
-File: g77.info, Node: Maximum Stackable Size, Next: Floating-point Bit Patterns, Prev: Always Flush Output, Up: Settings
-
-Maximum Stackable Size
-----------------------
-
- `g77', on most machines, puts many variables and arrays on the stack
-where possible, and can be configured (by changing
-`FFECOM_sizeMAXSTACKITEM' in `gcc/f/com.c') to force smaller-sized
-entities into static storage (saving on stack space) or permit
-larger-sized entities to be put on the stack (which can improve
-run-time performance, as it presents more opportunities for the GBE to
-optimize the generated code).
-
- *Note:* Putting more variables and arrays on the stack might cause
-problems due to system-dependent limits on stack size. Also, the value
-of `FFECOM_sizeMAXSTACKITEM' has no effect on automatic variables and
-arrays. *Note But-bugs::, for more information.
-
-\1f
-File: g77.info, Node: Floating-point Bit Patterns, Next: Large Initialization, Prev: Maximum Stackable Size, Up: Settings
-
-Floating-point Bit Patterns
----------------------------
-
- The `g77' build will crash if an attempt is made to build it as a
-cross-compiler for a target when `g77' cannot reliably determine the
-bit pattern of floating-point constants for the target. Planned
-improvements for g77-0.6 will give it the capabilities it needs to not
-have to crash the build but rather generate correct code for the target.
-(Currently, `g77' would generate bad code under such circumstances if
-it didn't crash during the build, e.g. when compiling a source file
-that does something like `EQUIVALENCE (I,R)' and `DATA R/9.43578/'.)
-
-\1f
-File: g77.info, Node: Large Initialization, Next: Alpha Problems Fixed, Prev: Floating-point Bit Patterns, Up: Settings
-
-Initialization of Large Aggregate Areas
----------------------------------------
-
- A warning message is issued when `g77' sees code that provides
-initial values (e.g. via `DATA') to an aggregate area (`COMMON' or
-`EQUIVALENCE', or even a large enough array or `CHARACTER' variable)
-that is large enough to increase `g77''s compile time by roughly a
-factor of 10.
-
- This size currently is quite small, since `g77' currently has a
-known bug requiring too much memory and time to handle such cases. In
-`gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined to the
-minimum size for the warning to appear. The size is specified in
-storage units, which can be bytes, words, or whatever, on a
-case-by-case basis.
-
- After changing this macro definition, you must (of course) rebuild
-and reinstall `g77' for the change to take effect.
-
- Note that, as of version 0.5.18, improvements have reduced the scope
-of the problem for *sparse* initialization of large arrays, especially
-those with large, contiguous uninitialized areas. However, the warning
-is issued at a point prior to when `g77' knows whether the
-initialization is sparse, and delaying the warning could mean it is
-produced too late to be helpful.
-
- Therefore, the macro definition should not be adjusted to reflect
-sparse cases. Instead, adjust it to generate the warning when densely
-initialized arrays begin to cause responses noticeably slower than
-linear performance would suggest.
-
-\1f
-File: g77.info, Node: Alpha Problems Fixed, Prev: Large Initialization, Up: Settings
-
-Alpha Problems Fixed
---------------------
-
- `g77' used to warn when it was used to compile Fortran code for a
-target configuration that is not basically a 32-bit machine (such as an
-Alpha, which is a 64-bit machine, especially if it has a 64-bit
-operating system running on it). That was because `g77' was known to
-not work properly on such configurations.
-
- As of version 0.5.20, `g77' is believed to work well enough on such
-systems. So, the warning is no longer needed or provided.
-
- However, support for 64-bit systems, especially in areas such as
-cross-compilation and handling of intrinsics, is still incomplete. The
-symptoms are believed to be compile-time diagnostics rather than the
-generation of bad code. It is hoped that version 0.6 will completely
-support 64-bit systems.
-
-\1f
-File: g77.info, Node: Quick Start, Next: Complete Installation, Prev: Settings, Up: Installation
-
-Quick Start
-===========
-
- This procedure configures, builds, and installs `g77' "out of the
-box" and works on most UNIX systems. Each command is identified by a
-unique number, used in the explanatory text that follows. For the most
-part, the output of each command is not shown, though indications of
-the types of responses are given in a few cases.
-
- To perform this procedure, the installer must be logged in as user
-`root'. Much of it can be done while not logged in as `root', and
-users experienced with UNIX administration should be able to modify the
-procedure properly to do so.
-
- Following traditional UNIX conventions, it is assumed that the
-source trees for `g77' and `gcc' will be placed in `/usr/src'. It also
-is assumed that the source distributions themselves already reside in
-`/usr/FSF', a naming convention used by the author of `g77' on his own
-system:
-
- /usr/FSF/gcc-2.7.2.3.tar.gz
- /usr/FSF/g77-0.5.21.tar.gz
-
- Users of the following systems should not blindly follow these
-quick-start instructions, because of problems their systems have coping
-with straightforward installation of `g77':
-
- * SunOS4
-
- Instead, see *Note Complete Installation::, for detailed information
-on how to configure, build, and install `g77' for your particular
-system. Also, see *Note Known Causes of Trouble with GNU Fortran:
-Trouble, for information on bugs and other problems known to afflict the
-installation process, and how to report newly discovered ones.
-
- If your system is *not* on the above list, and *is* a UNIX system or
-one of its variants, you should be able to follow the instructions
-below. If you vary *any* of the steps below, you might run into
-trouble, including possibly breaking existing programs for other users
-of your system. Before doing so, it is wise to review the explanations
-of some of the steps. These explanations follow this list of steps.
-
- sh[ 1]# cd /usr/src
-
- sh[ 2]# gunzip -c < /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
- [Might say "Broken pipe"...that is normal on some systems.]
-
- sh[ 3]# gunzip -c < /usr/FSF/g77-0.5.21.tar.gz | tar xf -
- ["Broken pipe" again possible.]
-
- sh[ 4]# ln -s gcc-2.7.2.3 gcc
-
- sh[ 5]# ln -s g77-0.5.21 g77
-
- sh[ 6]# mv -i g77/* gcc
- [No questions should be asked by mv here; or, you made a mistake.]
-
- sh[ 7]# patch -p1 -V t -d gcc < gcc/f/gbe/2.7.2.3.diff
- [Unless patch complains about rejected patches, this step worked.]
-
- sh[ 8]# cd gcc
- sh[ 9]# touch f77-install-ok
- [Do not do the above if your system already has an f77
- command, unless you've checked that overwriting it
- is okay.]
-
- sh[10]# touch f2c-install-ok
- [Do not do the above if your system already has an f2c
- command, unless you've checked that overwriting it
- is okay. Else, touch f2c-exists-ok.]
-
- sh[11]# ./configure --prefix=/usr
- [Do not do the above if gcc is not installed in /usr/bin.
- You might need a different --prefix=..., as
- described below.]
-
- sh[12]# make bootstrap
- [This takes a long time, and is where most problems occur.]
-
- sh[13]# make compare
- [This verifies that the compiler is `sane'. Only
- the file `f/zzz.o' (aka `tmp-foo1' and `tmp-foo2')
- should be in the list of object files this command
- prints as having different contents. If other files
- are printed, you have likely found a g77 bug.]
-
- sh[14]# rm -fr stage1
-
- sh[15]# make -k install
- [The actual installation.]
-
- sh[16]# g77 -v
- [Verify that g77 is installed, obtain version info.]
-
- sh[17]#
-
- *Note Updating Your Info Directory: Updating Documentation, for
-information on how to update your system's top-level `info' directory
-to contain a reference to this manual, so that users of `g77' can
-easily find documentation instead of having to ask you for it.
-
- Elaborations of many of the above steps follows:
-
-Step 1: `cd /usr/src'
- You can build `g77' pretty much anyplace. By convention, this
- manual assumes `/usr/src'. It might be helpful if other users on
- your system knew where to look for the source code for the
- installed version of `g77' and `gcc' in any case.
-
-Step 3: `gunzip -d < /usr/FSF/g77-0.5.21.tar.gz | tar xf -'
- It is not always necessary to obtain the latest version of `g77'
- as a complete `.tar.gz' file if you have a complete, earlier
- distribution of `g77'. If appropriate, you can unpack that earlier
- version of `g77', and then apply the appropriate patches to
- achieve the same result--a source tree containing version 0.5.21
- of `g77'.
-
-Step 4: `ln -s gcc-2.7.2.3 gcc'
-
-Step 5: `ln -s g77-0.5.21 g77'
- These commands mainly help reduce typing, and help reduce visual
- clutter in examples in this manual showing what to type to install
- `g77'.
-
- *Note Unpacking::, for information on using distributions of `g77'
- made by organizations other than the FSF.
-
-Step 6: `mv -i g77/* gcc'
- After doing this, you can, if you like, type `rm g77' and `rmdir
- g77-0.5.21' to remove the empty directory and the symbol link to
- it. But, it might be helpful to leave them around as quick
- reminders of which version(s) of `g77' are installed on your
- system.
-
- *Note Unpacking::, for information on the contents of the `g77'
- directory (as merged into the `gcc' directory).
-
-Step 7: `patch -p1 ...'
- This can produce a wide variety of printed output, from `Hmm, I
- can't seem to find a patch in there anywhere...' to long lists of
- messages indicated that patches are being found, applied
- successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files"
- are printed, it might mean you applied the wrong patch file. If
- you believe this is the case, it is best to restart the sequence
- after deleting (or at least renaming to unused names) the
- top-level directories for `g77' and `gcc' and their symbolic links.
-
- After this command finishes, the `gcc' directory might have old
- versions of several files as saved by `patch'. To remove these,
- after `cd gcc', type `rm -i *.~*~'.
-
- *Note Merging Distributions::, for more information.
-
-Step 9: `touch f77-install-ok'
- Don't do this if you don't want to overwrite an existing version
- of `f77' (such as a native compiler, or a script that invokes
- `f2c'). Otherwise, installation will overwrite the `f77' command
- and the `f77' man pages with copies of the corresponding `g77'
- material.
-
- *Note Installing `f77': Installing f77, for more information.
-
-Step 10: `touch f2c-install-ok'
- Don't do this if you don't want to overwrite an existing
- installation of `libf2c' (though, chances are, you do). Instead,
- `touch f2c-exists-ok' to allow the installation to continue
- without any error messages about `/usr/lib/libf2c.a' already
- existing.
-
- *Note Installing `f2c': Installing f2c, for more information.
-
-Step 11: `./configure --prefix=/usr'
- This is where you specify that the `g77' executable is to be
- installed in `/usr/bin/', the `libf2c.a' library is to be
- installed in `/usr/lib/', and so on.
-
- You should ensure that any existing installation of the `gcc'
- executable is in `/usr/bin/'. Otherwise, installing `g77' so that
- it does not fully replace the existing installation of `gcc' is
- likely to result in the inability to compile Fortran programs.
-
- *Note Where in the World Does Fortran (and GNU CC) Go?: Where to
- Install, for more information on determining where to install
- `g77'. *Note Configuring gcc::, for more information on the
- configuration process triggered by invoking the `./configure'
- script.
-
-Step 12: `make bootstrap'
- *Note Installing GNU CC: (gcc)Installation, for information on the
- kinds of diagnostics you should expect during this procedure.
-
- *Note Building gcc::, for complete `g77'-specific information on
- this step.
-
-Step 13: `make compare'
- *Note Where to Port Bugs: Bug Lists, for information on where to
- report that you observed more than `f/zzz.o' having different
- contents during this phase.
-
- *Note How to Report Bugs: Bug Reporting, for information on *how*
- to report bugs like this.
-
-Step 14: `rm -fr stage1'
- You don't need to do this, but it frees up disk space.
-
-Step 15: `make -k install'
- If this doesn't seem to work, try:
-
- make -k install install-libf77 install-f2c-all
-
- *Note Installation of Binaries::, for more information.
-
- *Note Updating Your Info Directory: Updating Documentation, for
- information on entering this manual into your system's list of
- texinfo manuals.
-
-Step 16: `g77 -v'
- If this command prints approximately 25 lines of output, including
- the GNU Fortran Front End version number (which should be the same
- as the version number for the version of `g77' you just built and
- installed) and the version numbers for the three parts of the
- `libf2c' library (`libF77', `libI77', `libU77'), and those version
- numbers are all in agreement, then there is a high likelihood that
- the installation has been successfully completed.
-
- You might consider doing further testing. For example, log in as
- a non-privileged user, then create a small Fortran program, such
- as:
-
- PROGRAM SMTEST
- DO 10 I=1, 10
- PRINT *, 'Hello World #', I
- 10 CONTINUE
- END
-
- Compile, link, and run the above program, and, assuming you named
- the source file `smtest.f', the session should look like this:
-
- sh# g77 -o smtest smtest.f
- sh# ./smtest
- Hello World # 1
- Hello World # 2
- Hello World # 3
- Hello World # 4
- Hello World # 5
- Hello World # 6
- Hello World # 7
- Hello World # 8
- Hello World # 9
- Hello World # 10
- sh#
-
- After proper installation, you don't need to keep your gcc and g77
- source and build directories around anymore. Removing them can
- free up a lot of disk space.
-
-\1f
-File: g77.info, Node: Complete Installation, Next: Distributing Binaries, Prev: Quick Start, Up: Installation
-
-Complete Installation
-=====================
-
- Here is the complete `g77'-specific information on how to configure,
-build, and install `g77'.
-
-* Menu:
-
-* Unpacking::
-* Merging Distributions::
-* f77: Installing f77.
-* f2c: Installing f2c.
-* Patching GNU Fortran::
-* Where to Install::
-* Configuring gcc::
-* Building gcc::
-* Pre-installation Checks::
-* Installation of Binaries::
-* Updating Documentation::
-* bison: Missing bison?.
-* makeinfo: Missing makeinfo?.
-
-\1f
-File: g77.info, Node: Unpacking, Next: Merging Distributions, Up: Complete Installation
-
-Unpacking
----------
-
- The `gcc' source distribution is a stand-alone distribution. It is
-designed to be unpacked (producing the `gcc' source tree) and built as
-is, assuming certain prerequisites are met (including the availability
-of compatible UNIX programs such as `make', `cc', and so on).
-
- However, before building `gcc', you will want to unpack and merge
-the `g77' distribution in with it, so that you build a Fortran-capable
-version of `gcc', which includes the `g77' command, the necessary
-run-time libraries, and this manual.
-
- Unlike `gcc', the `g77' source distribution is *not* a stand-alone
-distribution. It is designed to be unpacked and, afterwards,
-immediately merged into an applicable `gcc' source tree. That is, the
-`g77' distribution *augments* a `gcc' distribution--without `gcc',
-generally only the documentation is immediately usable.
-
- A sequence of commands typically used to unpack `gcc' and `g77' is:
-
- sh# cd /usr/src
- sh# gunzip -c /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
- sh# gunzip -c /usr/FSF/g77-0.5.21.tar.gz | tar xf -
- sh# ln -s gcc-2.7.2.3 gcc
- sh# ln -s g77-0.5.21 g77
- sh# mv -i g77/* gcc
-
- *Notes:* The commands beginning with `gunzip...' might print `Broken
-pipe...' as they complete. That is nothing to worry about, unless you
-actually *hear* a pipe breaking. The `ln' commands are helpful in
-reducing typing and clutter in installation examples in this manual.
-Hereafter, the top level of `gcc' source tree is referred to as `gcc',
-and the top level of just the `g77' source tree (prior to issuing the
-`mv' command, above) is referred to as `g77'.
-
- There are three top-level names in a `g77' distribution:
-
- g77/COPYING.g77
- g77/README.g77
- g77/f
-
- All three entries should be moved (or copied) into a `gcc' source
-tree (typically named after its version number and as it appears in the
-FSF distributions--e.g. `gcc-2.7.2.3').
-
- `g77/f' is the subdirectory containing all of the code,
-documentation, and other information that is specific to `g77'. The
-other two files exist to provide information on `g77' to someone
-encountering a `gcc' source tree with `g77' already present, who has
-not yet read these installation instructions and thus needs help
-understanding that the source tree they are looking at does not come
-from a single FSF distribution. They also help people encountering an
-unmerged `g77' source tree for the first time.
-
- *Note:* Please use *only* `gcc' and `g77' source trees as
-distributed by the FSF. Use of modified versions, such as the
-Pentium-specific-optimization port of `gcc', is likely to result in
-problems that appear to be in the `g77' code but, in fact, are not. Do
-not use such modified versions unless you understand all the
-differences between them and the versions the FSF distributes--in which
-case you should be able to modify the `g77' (or `gcc') source trees
-appropriately so `g77' and `gcc' can coexist as they do in the stock
-FSF distributions.
-
-\1f
-File: g77.info, Node: Merging Distributions, Next: Installing f77, Prev: Unpacking, Up: Complete Installation
-
-Merging Distributions
----------------------
-
- After merging the `g77' source tree into the `gcc' source tree, the
-final merge step is done by applying the pertinent patches the `g77'
-distribution provides for the `gcc' source tree.
-
- Read the file `gcc/f/gbe/README', and apply the appropriate patch
-file for the version of the GNU CC compiler you have, if that exists.
-If the directory exists but the appropriate file does not exist, you
-are using either an old, unsupported version, or a release one that is
-newer than the newest `gcc' version supported by the version of `g77'
-you have.
-
- As of version 0.5.18, `g77' modifies the version number of `gcc' via
-the pertinent patches. This is done because the resulting version of
-`gcc' is deemed sufficiently different from the vanilla distribution to
-make it worthwhile to present, to the user, information signaling the
-fact that there are some differences.
-
- GNU version numbers make it easy to figure out whether a particular
-version of a distribution is newer or older than some other version of
-that distribution. The format is, generally, MAJOR.MINOR.PATCH, with
-each field being a decimal number. (You can safely ignore leading
-zeros; for example, 1.5.3 is the same as 1.5.03.) The MAJOR field only
-increases with time. The other two fields are reset to 0 when the
-field to their left is incremented; otherwise, they, too, only increase
-with time. So, version 2.6.2 is newer than version 2.5.8, and version
-3.0 is newer than both. (Trailing `.0' fields often are omitted in
-announcements and in names for distributions and the directories they
-create.)
-
- If your version of `gcc' is older than the oldest version supported
-by `g77' (as casually determined by listing the contents of
-`gcc/f/gbe/'), you should obtain a newer, supported version of `gcc'.
-(You could instead obtain an older version of `g77', or try and get
-your `g77' to work with the old `gcc', but neither approach is
-recommended, and you shouldn't bother reporting any bugs you find if you
-take either approach, because they're probably already fixed in the
-newer versions you're not using.)
-
- If your version of `gcc' is newer than the newest version supported
-by `g77', it is possible that your `g77' will work with it anyway. If
-the version number for `gcc' differs only in the PATCH field, you might
-as well try applying the `g77' patch that is for the newest version of
-`gcc' having the same MAJOR and MINOR fields, as this is likely to work.
-
- So, for example, if a particular version of `g77' has support for
-`gcc' versions 2.7.0 and 2.7.1, it is likely that `gcc-2.7.2' would
-work well with `g77' by using the `2.7.1.diff' patch file provided with
-`g77' (aside from some offsets reported by `patch', which usually are
-harmless).
-
- However, `gcc-2.8.0' would almost certainly not work with that
-version of `g77' no matter which patch file was used, so a new version
-of `g77' would be needed (and you should wait for it rather than
-bothering the maintainers--*note User-Visible Changes: Changes.).
-
- This complexity is the result of `gcc' and `g77' being separate
-distributions. By keeping them separate, each product is able to be
-independently improved and distributed to its user base more frequently.
-
- However, `g77' often requires changes to contemporary versions of
-`gcc'. Also, the GBE interface defined by `gcc' typically undergoes
-some incompatible changes at least every time the MINOR field of the
-version number is incremented, and such changes require corresponding
-changes to the `g77' front end (FFE).
-
- It is hoped that the GBE interface, and the `gcc' and `g77' products
-in general, will stabilize sufficiently for the need for hand-patching
-to disappear.
-
- Invoking `patch' as described in `gcc/f/gbe/README' can produce a
-wide variety of printed output, from `Hmm, I can't seem to find a patch
-in there anywhere...' to long lists of messages indicated that patches
-are being found, applied successfully, and so on.
-
- If messages about "fuzz", "offset", or especially "reject files" are
-printed, it might mean you applied the wrong patch file. If you
-believe this is the case, it is best to restart the sequence after
-deleting (or at least renaming to unused names) the top-level
-directories for `g77' and `gcc' and their symbolic links. That is
-because `patch' might have partially patched some `gcc' source files,
-so reapplying the correct patch file might result in the correct
-patches being applied incorrectly (due to the way `patch' necessarily
-works).
-
- After `patch' finishes, the `gcc' directory might have old versions
-of several files as saved by `patch'. To remove these, after `cd gcc',
-type `rm -i *.~*~'.
-
- *Note:* `g77''s configuration file `gcc/f/config-lang.in' ensures
-that the source code for the version of `gcc' being configured has at
-least one indication of being patched as required specifically by `g77'.
-This configuration-time checking should catch failure to apply the
-correct patch and, if so caught, should abort the configuration with an
-explanation. *Please* do not try to disable the check, otherwise `g77'
-might well appear to build and install correctly, and even appear to
-compile correctly, but could easily produce broken code.
-
- `diff -rcp2N' is used to create the patch files in `gcc/f/gbe/'.
-
-\1f
-File: g77.info, Node: Installing f77, Next: Installing f2c, Prev: Merging Distributions, Up: Complete Installation
-
-Installing `f77'
-----------------
-
- You should decide whether you want installation of `g77' to also
-install an `f77' command. On systems with a native `f77', this is not
-normally desired, so `g77' does not do this by default.
-
- If you want `f77' installed, create the file `f77-install-ok' (e.g.
-via the UNIX command `touch f77-install-ok') in the source or build
-top-level directory (the same directory in which the `g77' `f'
-directory resides, not the `f' directory itself), or edit
-`gcc/f/Make-lang.in' and change the definition of the
-`F77_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f77-install-ok'.
-
- When you enable installation of `f77', either a link to or a direct
-copy of the `g77' command is made. Similarly, `f77.1' is installed as
-a man page.
-
- (The `uninstall' target in the `gcc/Makefile' also tests this macro
-and file, when invoked, to determine whether to delete the installed
-copies of `f77' and `f77.1'.)
-
- *Note:* No attempt is yet made to install a program (like a shell
-script) that provides compatibility with any other `f77' programs.
-Only the most rudimentary invocations of `f77' will work the same way
-with `g77'.
-
-\1f
-File: g77.info, Node: Installing f2c, Next: Patching GNU Fortran, Prev: Installing f77, Up: Complete Installation
-
-Installing `f2c'
-----------------
-
- Currently, `g77' does not include `f2c' itself in its distribution.
-However, it does include a modified version of the `libf2c'. This
-version is normally compatible with `f2c', but has been modified to
-meet the needs of `g77' in ways that might possibly be incompatible
-with some versions or configurations of `f2c'.
-
- Decide how installation of `g77' should affect any existing
-installation of `f2c' on your system.
-
- If you do not have `f2c' on your system (e.g. no `/usr/bin/f2c', no
-`/usr/include/f2c.h', and no `/usr/lib/libf2c.a', `/usr/lib/libF77.a',
-or `/usr/lib/libI77.a'), you don't need to be concerned with this item.
-
- If you do have `f2c' on your system, you need to decide how users of
-`f2c' will be affected by your installing `g77'. Since `g77' is
-currently designed to be object-code-compatible with `f2c' (with very
-few, clear exceptions), users of `f2c' might want to combine
-`f2c'-compiled object files with `g77'-compiled object files in a
-single executable.
-
- To do this, users of `f2c' should use the same copies of `f2c.h' and
-`libf2c.a' that `g77' uses (and that get built as part of `g77').
-
- If you do nothing here, the `g77' installation process will not
-overwrite the `include/f2c.h' and `lib/libf2c.a' files with its own
-versions, and in fact will not even install `libf2c.a' for use with the
-newly installed versions of `gcc' and `g77' if it sees that
-`lib/libf2c.a' exists--instead, it will print an explanatory message
-and skip this part of the installation.
-
- To install `g77''s versions of `f2c.h' and `libf2c.a' in the
-appropriate places, create the file `f2c-install-ok' (e.g. via the UNIX
-command `touch f2c-install-ok') in the source or build top-level
-directory (the same directory in which the `g77' `f' directory resides,
-not the `f' directory itself), or edit `gcc/f/Make-lang.in' and change
-the definition of the `F2C_INSTALL_FLAG' macro appropriately.
-
- Usually, this means that, after typing `cd gcc', you would type
-`touch f2c-install-ok'.
-
- Make sure that when you enable the overwriting of `f2c.h' and
-`libf2c.a' as used by `f2c', you have a recent and properly configured
-version of `bin/f2c' so that it generates code that is compatible with
-`g77'.
-
- If you don't want installation of `g77' to overwrite `f2c''s existing
-installation, but you do want `g77' installation to proceed with
-installation of its own versions of `f2c.h' and `libf2c.a' in places
-where `g77' will pick them up (even when linking `f2c'-compiled object
-files--which might lead to incompatibilities), create the file
-`f2c-exists-ok' (e.g. via the UNIX command `touch f2c-exists-ok') in
-the source or build top-level directory, or edit `gcc/f/Make-lang.in'
-and change the definition of the `F2CLIBOK' macro appropriately.
-
-\1f
-File: g77.info, Node: Patching GNU Fortran, Next: Where to Install, Prev: Installing f2c, Up: Complete Installation
-
-Patching GNU Fortran
---------------------
-
- If you're using a SunOS4 system, you'll need to make the following
-change to `gcc/f/proj.h': edit the line reading
-
- #define FFEPROJ_STRTOUL 1 ...
-
-by replacing the `1' with `0'. Or, you can avoid editing the source by
-adding
- CFLAGS='-DFFEPROJ_STRTOUL=0 -g -O'
- to the command line for `make' when you invoke it. (`-g' is the
-default for `CFLAGS'.)
-
- This causes a minimal version of `strtoul()' provided as part of the
-`g77' distribution to be compiled and linked into whatever `g77'
-programs need it, since some systems (like SunOS4 with only the bundled
-compiler and its runtime) do not provide this function in their system
-libraries.
-
- Similarly, a minimal version of `bsearch()' is available and can be
-enabled by editing a line similar to the one for `strtoul()' above in
-`gcc/f/proj.h', if your system libraries lack `bsearch()'. The method
-of overriding `X_CFLAGS' may also be used.
-
- These are not problems with `g77', which requires an ANSI C
-environment. You should upgrade your system to one that provides a
-full ANSI C environment, or encourage the maintainers of `gcc' to
-provide one to all `gcc'-based compilers in future `gcc' distributions.
-
- *Note Problems Installing::, for more information on why `strtoul()'
-comes up missing and on approaches to dealing with this problem that
-have already been tried.
-
-\1f
-File: g77.info, Node: Where to Install, Next: Configuring gcc, Prev: Patching GNU Fortran, Up: Complete Installation
-
-Where in the World Does Fortran (and GNU CC) Go?
-------------------------------------------------
-
- Before configuring, you should make sure you know where you want the
-`g77' and `gcc' binaries to be installed after they're built, because
-this information is given to the configuration tool and used during the
-build itself.
-
- A `g77' installation necessarily requires installation of a
-`g77'-aware version of `gcc', so that the `gcc' command recognizes
-Fortran source files and knows how to compile them.
-
- For this to work, the version of `gcc' that you will be building as
-part of `g77' *must* be installed as the "active" version of `gcc' on
-the system.
-
- Sometimes people make the mistake of installing `gcc' as
-`/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in
-`/usr/bin/gcc'. (Or, the opposite happens.) This can result in `g77'
-being unable to compile Fortran source files, because when it calls on
-`gcc' to do the actual compilation, `gcc' complains that it does not
-recognize the language, or the file name suffix.
-
- So, determine whether `gcc' already is installed on your system,
-and, if so, *where* it is installed, and prepare to configure the new
-version of `gcc' you'll be building so that it installs over the
-existing version of `gcc'.
-
- You might want to back up your existing copy of `bin/gcc', and the
-entire `lib/' directory, before you perform the actual installation (as
-described in this manual).
-
- Existing `gcc' installations typically are found in `/usr' or
-`/usr/local'. If you aren't certain where the currently installed
-version of `gcc' and its related programs reside, look at the output of
-this command:
-
- gcc -v -o /tmp/delete-me -xc /dev/null -xnone
-
- All sorts of interesting information on the locations of various
-`gcc'-related programs and data files should be visible in the output
-of the above command. (The output also is likely to include a
-diagnostic from the linker, since there's no `main_()' function.)
-However, you do have to sift through it yourself; `gcc' currently
-provides no easy way to ask it where it is installed and where it looks
-for the various programs and data files it calls on to do its work.
-
- Just *building* `g77' should not overwrite any installed
-programs--but, usually, after you build `g77', you will want to install
-it, so backing up anything it might overwrite is a good idea. (This is
-true for any package, not just `g77', though in this case it is
-intentional that `g77' overwrites `gcc' if it is already installed--it
-is unusual that the installation process for one distribution
-intentionally overwrites a program or file installed by another
-distribution.)
-
- Another reason to back up the existing version first, or make sure
-you can restore it easily, is that it might be an older version on
-which other users have come to depend for certain behaviors. However,
-even the new version of `gcc' you install will offer users the ability
-to specify an older version of the actual compilation programs if
-desired, and these older versions need not include any `g77' components.
-*Note Specifying Target Machine and Compiler Version: (gcc)Target
-Options, for information on the `-V' option of `gcc'.
-
-\1f
-File: g77.info, Node: Configuring gcc, Next: Building gcc, Prev: Where to Install, Up: Complete Installation
-
-Configuring GNU CC
-------------------
-
- `g77' is configured automatically when you configure `gcc'. There
-are two parts of `g77' that are configured in two different
-ways--`g77', which "camps on" to the `gcc' configuration mechanism, and
-`libf2c', which uses a variation of the GNU `autoconf' configuration
-system.
-
- Generally, you shouldn't have to be concerned with either `g77' or
-`libf2c' configuration, unless you're configuring `g77' as a
-cross-compiler. In this case, the `libf2c' configuration, and possibly
-the `g77' and `gcc' configurations as well, might need special
-attention. (This also might be the case if you're porting `gcc' to a
-whole new system--even if it is just a new operating system on an
-existing, supported CPU.)
-
- To configure the system, see *Note Installing GNU CC:
-(gcc)Installation, following the instructions for running `./configure'.
-Pay special attention to the `--prefix=' option, which you almost
-certainly will need to specify.
-
- (Note that `gcc' installation information is provided as a straight
-text file in `gcc/INSTALL'.)
-
- The information printed by the invocation of `./configure' should
-show that the `f' directory (the Fortran language) has been configured.
-If it does not, there is a problem.
-
- *Note:* Configuring with the `--srcdir' argument is known to work
-with GNU `make', but it is not known to work with other variants of
-`make'. Irix5.2 and SunOS4.1 versions of `make' definitely won't work
-outside the source directory at present. `g77''s portion of the
-`configure' script issues a warning message about this when you
-configure for building binaries outside the source directory.
-
-\1f
-File: g77.info, Node: Building gcc, Next: Pre-installation Checks, Prev: Configuring gcc, Up: Complete Installation
-
-Building GNU CC
----------------
-
- Building `g77' requires building enough of `gcc' that these
-instructions assume you're going to build all of `gcc', including
-`g++', `protoize', and so on. You can save a little time and disk
-space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in'
-or `gcc/Makefile', but if you do that, you're on your own. One change
-is almost *certainly* going to cause failures: removing `c' or `f77'
-from the definition of the `LANGUAGES' macro.
-
- After configuring `gcc', which configures `g77' and `libf2c'
-automatically, you're ready to start the actual build by invoking
-`make'.
-
- *Note:* You *must* have run `./configure' before you run `make',
-even if you're using an already existing `gcc' development directory,
-because `./configure' does the work to recognize that you've added
-`g77' to the configuration.
-
- There are two general approaches to building GNU CC from scratch:
-
-"bootstrap"
- This method uses minimal native system facilities to build a
- barebones, unoptimized `gcc', that is then used to compile
- ("bootstrap") the entire system.
-
-"straight"
- This method assumes a more complete native system exists, and uses
- that just once to build the entire system.
-
- On all systems without a recent version of `gcc' already installed,
-the bootstrap method must be used. In particular, `g77' uses
-extensions to the C language offered, apparently, only by `gcc'.
-
- On most systems with a recent version of `gcc' already installed,
-the straight method can be used. This is an advantage, because it
-takes less CPU time and disk space for the build. However, it does
-require that the system have fairly recent versions of many GNU
-programs and other programs, which are not enumerated here.
-
-* Menu:
-
-* Bootstrap Build:: For all systems.
-* Straight Build:: For systems with a recent version of `gcc'.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Bootstrap Build, Next: Straight Build, Up: Building gcc
-
-Bootstrap Build
-...............
-
- A complete bootstrap build is done by issuing a command beginning
-with `make bootstrap ...', as described in *Note Installing GNU CC:
-(gcc)Installation. This is the most reliable form of build, but it
-does require the most disk space and CPU time, since the complete system
-is built twice (in Stages 2 and 3), after an initial build (during
-Stage 1) of a minimal `gcc' compiler using the native compiler and
-libraries.
-
- You might have to, or want to, control the way a bootstrap build is
-done by entering the `make' commands to build each stage one at a time,
-as described in the `gcc' manual. For example, to save time or disk
-space, you might want to not bother doing the Stage 3 build, in which
-case you are assuming that the `gcc' compiler you have built is
-basically sound (because you are giving up the opportunity to compare a
-large number of object files to ensure they're identical).
-
- To save some disk space during installation, after Stage 2 is built,
-you can type `rm -fr stage1' to remove the binaries built during Stage
-1.
-
- *Note:* *Note Object File Differences::, for information on expected
-differences in object files produced during Stage 2 and Stage 3 of a
-bootstrap build. These differences will be encountered as a result of
-using the `make compare' or similar command sequence recommended by the
-GNU CC installation documentation.
-
- Also, *Note Installing GNU CC: (gcc)Installation, for important
-information on building `gcc' that is not described in this `g77'
-manual. For example, explanations of diagnostic messages and whether
-they're expected, or indicate trouble, are found there.
-
-\1f
-File: g77.info, Node: Straight Build, Prev: Bootstrap Build, Up: Building gcc
-
-Straight Build
-..............
-
- If you have a recent version of `gcc' already installed on your
-system, and if you're reasonably certain it produces code that is
-object-compatible with the version of `gcc' you want to build as part
-of building `g77', you can save time and disk space by doing a straight
-build.
-
- To build just the C and Fortran compilers and the necessary run-time
-libraries, issue the following command:
-
- make -k CC=gcc LANGUAGES=f77 all g77
-
- (The `g77' target is necessary because the `gcc' build procedures
-apparently do not automatically build command drivers for languages in
-subdirectories. It's the `all' target that triggers building
-everything except, apparently, the `g77' command itself.)
-
- If you run into problems using this method, you have two options:
-
- * Abandon this approach and do a bootstrap build.
-
- * Try to make this approach work by diagnosing the problems you're
- running into and retrying.
-
- Especially if you do the latter, you might consider submitting any
-solutions as bug/fix reports. *Note Known Causes of Trouble with GNU
-Fortran: Trouble.
-
- However, understand that many problems preventing a straight build
-from working are not `g77' problems, and, in such cases, are not likely
-to be addressed in future versions of `g77'.
-
-\1f
-File: g77.info, Node: Pre-installation Checks, Next: Installation of Binaries, Prev: Building gcc, Up: Complete Installation
-
-Pre-installation Checks
------------------------
-
- Before installing the system, which includes installing `gcc', you
-might want to do some minimum checking to ensure that some basic things
-work.
-
- Here are some commands you can try, and output typically printed by
-them when they work:
-
- sh# cd /usr/src/gcc
- sh# ./g77 --driver=./xgcc -B./ -v
- g77 version 0.5.21
- ./xgcc -B./ -v -fnull-version -o /tmp/gfa18047 ...
- Reading specs from ./specs
- gcc version 2.7.2.3.f.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.2.3.f.1 (Linux/Alpha)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/local/include
- /usr/alpha-unknown-linux/include
- /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.1/include
- /usr/include
- End of search list.
- ./f771 /tmp/cca18048.i -fset-g77-defaults -quiet -dumpbase ...
- GNU F77 version 2.7.2.3.f.1 (Linux/Alpha) compiled ...
- GNU Fortran Front End version 0.5.21 compiled: ...
- as -nocpp -o /tmp/cca180481.o /tmp/cca18048.s
- ld -G 8 -O1 -o /tmp/gfa18047 /usr/lib/crt0.o -L. ...
- __G77_LIBF77_VERSION__: 0.5.21
- @(#)LIBF77 VERSION 19970404
- __G77_LIBI77_VERSION__: 0.5.21
- @(#) LIBI77 VERSION pjw,dmg-mods 19970816
- __G77_LIBU77_VERSION__: 0.5.21
- @(#) LIBU77 VERSION 19970609
- sh# ./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone
- Reading specs from ./specs
- gcc version 2.7.2.3.f.1
- ./cpp -lang-c -v -isystem ./include -undef ...
- GNU CPP version 2.7.2.3.f.1 (Linux/Alpha)
- #include "..." search starts here:
- #include <...> search starts here:
- ./include
- /usr/local/include
- /usr/alpha-unknown-linux/include
- /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.1/include
- /usr/include
- End of search list.
- ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version ...
- GNU C version 2.7.2.3.f.1 (Linux/Alpha) compiled ...
- as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s
- ld -G 8 -O1 -o /tmp/delete-me /usr/lib/crt0.o -L. ...
- /usr/lib/crt0.o: In function `__start':
- crt0.S:110: undefined reference to `main'
- /usr/lib/crt0.o(.lita+0x28): undefined reference to `main'
- sh#
-
- (Note that long lines have been truncated, and `...' used to
-indicate such truncations.)
-
- The above two commands test whether `g77' and `gcc', respectively,
-are able to compile empty (null) source files, whether invocation of
-the C preprocessor works, whether libraries can be linked, and so on.
-
- If the output you get from either of the above two commands is
-noticeably different, especially if it is shorter or longer in ways
-that do not look consistent with the above sample output, you probably
-should not install `gcc' and `g77' until you have investigated further.
-
- For example, you could try compiling actual applications and seeing
-how that works. (You might want to do that anyway, even if the above
-tests work.)
-
- To compile using the not-yet-installed versions of `gcc' and `g77',
-use the following commands to invoke them.
-
- To invoke `g77', type:
-
- /usr/src/gcc/g77 --driver=/usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
- To invoke `gcc', type:
-
- /usr/src/gcc/xgcc -B/usr/src/gcc/ ...
-
-\1f
-File: g77.info, Node: Installation of Binaries, Next: Updating Documentation, Prev: Pre-installation Checks, Up: Complete Installation
-
-Installation of Binaries
-------------------------
-
- After configuring, building, and testing `g77' and `gcc', when you
-are ready to install them on your system, type:
-
- make -k CC=gcc LANGUAGES=f77 install
-
- As described in *Note Installing GNU CC: (gcc)Installation, the
-values for the `CC' and `LANGUAGES' macros should be the same as those
-you supplied for the build itself.
-
- So, the details of the above command might vary if you used a
-bootstrap build (where you might be able to omit both definitions, or
-might have to supply the same definitions you used when building the
-final stage) or if you deviated from the instructions for a straight
-build.
-
- If the above command does not install `libf2c.a' as expected, try
-this:
-
- make -k ... install install-libf77 install-f2c-all
-
- We don't know why some non-GNU versions of `make' sometimes require
-this alternate command, but they do. (Remember to supply the
-appropriate definitions for `CC' and `LANGUAGES' where you see `...' in
-the above command.)
-
- Note that using the `-k' option tells `make' to continue after some
-installation problems, like not having `makeinfo' installed on your
-system. It might not be necessary for your system.
-
-\1f
-File: g77.info, Node: Updating Documentation, Next: Missing bison?, Prev: Installation of Binaries, Up: Complete Installation
-
-Updating Your Info Directory
-----------------------------
-
- As part of installing `g77', you should make sure users of `info'
-can easily access this manual on-line. Do this by making sure a line
-such as the following exists in `/usr/info/dir', or in whatever file is
-the top-level file in the `info' directory on your system (perhaps
-`/usr/local/info/dir':
-
- * g77: (g77). The GNU Fortran programming language.
-
- If the menu in `dir' is organized into sections, `g77' probably
-belongs in a section with a name such as one of the following:
-
- * Fortran Programming
-
- * Writing Programs
-
- * Programming Languages
-
- * Languages Other Than C
-
- * Scientific/Engineering Tools
-
- * GNU Compilers
-
-\1f
-File: g77.info, Node: Missing bison?, Next: Missing makeinfo?, Prev: Updating Documentation, Up: Complete Installation
-
-Missing `bison'?
-----------------
-
- If you cannot install `bison', make sure you have started with a
-*fresh* distribution of `gcc', do *not* do `make maintainer-clean' (in
-other versions of `gcc', this was called `make realclean'), and, to
-ensure that `bison' is not invoked by `make' during the build, type
-these commands:
-
- sh# cd gcc
- sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c
- sh# touch cp/parse.c cp/parse.h objc-parse.c
- sh#
-
- These commands update the date-time-modified information for all the
-files produced by the various invocations of `bison' in the current
-versions of `gcc', so that `make' no longer believes it needs to update
-them. All of these files should already exist in a `gcc' distribution,
-but the application of patches to upgrade to a newer version can leave
-the modification information set such that the `bison' input files look
-more "recent" than the corresponding output files.
-
- *Note:* New versions of `gcc' might change the set of files it
-generates by invoking `bison'--if you cannot figure out for yourself
-how to handle such a situation, try an older version of `gcc' until you
-find someone who can (or until you obtain and install `bison').
-
-\1f
-File: g77.info, Node: Missing makeinfo?, Prev: Missing bison?, Up: Complete Installation
-
-Missing `makeinfo'?
--------------------
-
- If you cannot install `makeinfo', either use the `-k' option when
-invoking make to specify any of the `install' or related targets, or
-specify `MAKEINFO=echo' on the `make' command line.
-
- If you fail to do one of these things, some files, like `libf2c.a',
-might not be installed, because the failed attempt by `make' to invoke
-`makeinfo' causes it to cancel any further processing.
-
-\1f
-File: g77.info, Node: Distributing Binaries, Prev: Complete Installation, Up: Installation
-
-Distributing Binaries
-=====================
-
- If you are building `g77' for distribution to others in binary form,
-first make sure you are aware of your legal responsibilities (read the
-file `gcc/COPYING' thoroughly).
-
- Then, consider your target audience and decide where `g77' should be
-installed.
-
- For systems like GNU/Linux that have no native Fortran compiler (or
-where `g77' could be considered the native compiler for Fortran and
-`gcc' for C, etc.), you should definitely configure `g77' for
-installation in `/usr/bin' instead of `/usr/local/bin'. Specify the
-`--prefix=/usr' option when running `./configure'. You might also want
-to set up the distribution so the `f77' command is a link to
-`g77'--just make an empty file named `f77-install-ok' in the source or
-build directory (the one in which the `f' directory resides, not the
-`f' directory itself) when you specify one of the `install' or
-`uninstall' targets in a `make' command.
-
- For a system that might already have `f2c' installed, you definitely
-will want to make another empty file (in the same directory) named
-either `f2c-exists-ok' or `f2c-install-ok'. Use the former if you
-don't want your distribution to overwrite `f2c'-related files in
-existing systems; use the latter if you want to improve the likelihood
-that users will be able to use both `f2c' and `g77' to compile code for
-a single program without encountering link-time or run-time
-incompatibilities.
-
- (Make sure you clearly document, in the "advertising" for your
-distribution, how installation of your distribution will affect
-existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on.
-Similarly, you should clearly document any requirements you assume are
-met by users of your distribution.)
-
- For other systems with native `f77' (and `cc') compilers, configure
-`g77' as you (or most of your audience) would configure `gcc' for their
-installations. Typically this is for installation in `/usr/local', and
-would not include a copy of `g77' named `f77', so users could still use
-the native `f77'.
-
- In any case, for `g77' to work properly, you *must* ensure that the
-binaries you distribute include:
-
-`bin/g77'
- This is the command most users use to compile Fortran.
-
-`bin/gcc'
- This is the command all users use to compile Fortran, either
- directly or indirectly via the `g77' command. The `bin/gcc'
- executable file must have been built from a `gcc' source tree into
- which a `g77' source tree was merged and configured, or it will
- not know how to compile Fortran programs.
-
-`bin/f77'
- In installations with no non-GNU native Fortran compiler, this is
- the same as `bin/g77'. Otherwise, it should be omitted from the
- distribution, so the one on already on a particular system does
- not get overwritten.
-
-`info/g77.info*'
- This is the documentation for `g77'. If it is not included, users
- will have trouble understanding diagnostics messages and other
- such things, and will send you a lot of email asking questions.
-
- Please edit this documentation (by editing `gcc/f/*.texi' and
- doing `make doc' from the `/usr/src/gcc' directory) to reflect any
- changes you've made to `g77', or at least to encourage users of
- your binary distribution to report bugs to you first.
-
- Also, whether you distribute binaries or install `g77' on your own
- system, it might be helpful for everyone to add a line listing
- this manual by name and topic to the top-level `info' node in
- `/usr/info/dir'. That way, users can find `g77' documentation more
- easily. *Note Updating Your Info Directory: Updating
- Documentation.
-
-`man/man1/g77.1'
- This is the short man page for `g77'. It is out of date, but you
- might as well include it for people who really like man pages.
-
-`man/man1/f77.1'
- In installations where `f77' is the same as `g77', this is the
- same as `man/man1/g77.1'. Otherwise, it should be omitted from
- the distribution, so the one already on a particular system does
- not get overwritten.
-
-`lib/gcc-lib/.../f771'
- This is the actual Fortran compiler.
-
-`lib/gcc-lib/.../libf2c.a'
- This is the run-time library for `g77'-compiled programs.
-
- Whether you want to include the slightly updated (and possibly
-improved) versions of `cc1', `cc1plus', and whatever other binaries get
-rebuilt with the changes the GNU Fortran distribution makes to the GNU
-back end, is up to you. These changes are highly unlikely to break any
-compilers, and it is possible they'll fix back-end bugs that can be
-demonstrated using front ends other than GNU Fortran's.
-
- Please assure users that unless they have a specific need for their
-existing, older versions of `gcc' command, they are unlikely to
-experience any problems by overwriting it with your version--though
-they could certainly protect themselves by making backup copies first!
-Otherwise, users might try and install your binaries in a "safe" place,
-find they cannot compile Fortran programs with your distribution
-(because, perhaps, they're picking up their old version of the `gcc'
-command, which does not recognize Fortran programs), and assume that
-your binaries (or, more generally, GNU Fortran distributions in
-general) are broken, at least for their system.
-
- Finally, *please* ask for bug reports to go to you first, at least
-until you're sure your distribution is widely used and has been well
-tested. This especially goes for those of you making any changes to
-the `g77' sources to port `g77', e.g. to OS/2.
-<fortran@gnu.ai.mit.edu> has received a fair number of bug reports that
-turned out to be problems with other peoples' ports and distributions,
-about which nothing could be done for the user. Once you are quite
-certain a bug report does not involve your efforts, you can forward it
-to us.
-
-\1f
-File: g77.info, Node: Debugging and Interfacing, Next: Collected Fortran Wisdom, Prev: Installation, Up: Top
-
-Debugging and Interfacing
-*************************
-
- GNU Fortran currently generates code that is object-compatible with
-the `f2c' converter. Also, it avoids limitations in the current GBE,
-such as the inability to generate a procedure with multiple entry
-points, by generating code that is structured differently (in terms of
-procedure names, scopes, arguments, and so on) than might be expected.
-
- As a result, writing code in other languages that calls on, is
-called by, or shares in-memory data with `g77'-compiled code generally
-requires some understanding of the way `g77' compiles code for various
-constructs.
-
- Similarly, using a debugger to debug `g77'-compiled code, even if
-that debugger supports native Fortran debugging, generally requires
-this sort of information.
-
- This section describes some of the basic information on how `g77'
-compiles code for constructs involving interfaces to other languages
-and to debuggers.
-
- *Caution:* Much or all of this information pertains to only the
-current release of `g77', sometimes even to using certain compiler
-options with `g77' (such as `-fno-f2c'). Do not write code that
-depends on this information without clearly marking said code as
-nonportable and subject to review for every new release of `g77'. This
-information is provided primarily to make debugging of code generated
-by this particular release of `g77' easier for the user, and partly to
-make writing (generally nonportable) interface code easier. Both of
-these activities require tracking changes in new version of `g77' as
-they are installed, because new versions can change the behaviors
-described in this section.
-
-* Menu:
-
-* Main Program Unit:: How `g77' compiles a main program unit.
-* Procedures:: How `g77' constructs parameter lists
- for procedures.
-* Functions:: Functions returning floating-point or character data.
-* Names:: Naming of user-defined variables, procedures, etc.
-* Common Blocks:: Accessing common variables while debugging.
-* Local Equivalence Areas:: Accessing `EQUIVALENCE' while debugging.
-* Complex Variables:: How `g77' performs complex arithmetic.
-* Arrays:: Dealing with (possibly multi-dimensional) arrays.
-* Adjustable Arrays:: Special consideration for adjustable arrays.
-* Alternate Entry Points:: How `g77' implements alternate `ENTRY'.
-* Alternate Returns:: How `g77' handles alternate returns.
-* Assigned Statement Labels:: How `g77' handles `ASSIGN'.
-* Run-time Library Errors:: Meanings of some `IOSTAT=' values.
-
-\1f
-File: g77.info, Node: Main Program Unit, Next: Procedures, Up: Debugging and Interfacing
-
-Main Program Unit (PROGRAM)
-===========================
-
- When `g77' compiles a main program unit, it gives it the public
-procedure name `MAIN__'. The `libf2c' library has the actual `main()'
-procedure as is typical of C-based environments, and it is this
-procedure that performs some initial start-up activity and then calls
-`MAIN__'.
-
- Generally, `g77' and `libf2c' are designed so that you need not
-include a main program unit written in Fortran in your program--it can
-be written in C or some other language. Especially for I/O handling,
-this is the case, although `g77' version 0.5.16 includes a bug fix for
-`libf2c' that solved a problem with using the `OPEN' statement as the
-first Fortran I/O activity in a program without a Fortran main program
-unit.
-
- However, if you don't intend to use `g77' (or `f2c') to compile your
-main program unit--that is, if you intend to compile a `main()'
-procedure using some other language--you should carefully examine the
-code for `main()' in `libf2c', found in the source file
-`gcc/f/runtime/libF77/main.c', to see what kinds of things might need
-to be done by your `main()' in order to provide the Fortran environment
-your Fortran code is expecting.
-
- For example, `libf2c''s `main()' sets up the information used by the
-`IARGC' and `GETARG' intrinsics. Bypassing `libf2c''s `main()' without
-providing a substitute for this activity would mean that invoking
-`IARGC' and `GETARG' would produce undefined results.
-
- When debugging, one implication of the fact that `main()', which is
-the place where the debugged program "starts" from the debugger's point
-of view, is in `libf2c' is that you won't be starting your Fortran
-program at a point you recognize as your Fortran code.
-
- The standard way to get around this problem is to set a break point
-(a one-time, or temporary, break point will do) at the entrance to
-`MAIN__', and then run the program. A convenient way to do so is to
-add the `gdb' command
-
- tbreak MAIN__
-
-to the file `.gdbinit' in the directory in which you're debugging
-(using `gdb').
-
- After doing this, the debugger will see the current execution point
-of the program as at the beginning of the main program unit of your
-program.
-
- Of course, if you really want to set a break point at some other
-place in your program and just start the program running, without first
-breaking at `MAIN__', that should work fine.
-
-\1f
-File: g77.info, Node: Procedures, Next: Functions, Prev: Main Program Unit, Up: Debugging and Interfacing
-
-Procedures (SUBROUTINE and FUNCTION)
-====================================
-
- Currently, `g77' passes arguments via reference--specifically, by
-passing a pointer to the location in memory of a variable, array, array
-element, a temporary location that holds the result of evaluating an
-expression, or a temporary or permanent location that holds the value
-of a constant.
-
- Procedures that accept `CHARACTER' arguments are implemented by
-`g77' so that each `CHARACTER' argument has two actual arguments.
-
- The first argument occupies the expected position in the argument
-list and has the user-specified name. This argument is a pointer to an
-array of characters, passed by the caller.
-
- The second argument is appended to the end of the user-specified
-calling sequence and is named `__g77_length_X', where X is the
-user-specified name. This argument is of the C type `ftnlen' (see
-`gcc/f/runtime/f2c.h.in' for information on that type) and is the
-number of characters the caller has allocated in the array pointed to
-by the first argument.
-
- A procedure will ignore the length argument if `X' is not declared
-`CHARACTER*(*)', because for other declarations, it knows the length.
-Not all callers necessarily "know" this, however, which is why they all
-pass the extra argument.
-
- The contents of the `CHARACTER' argument are specified by the
-address passed in the first argument (named after it). The procedure
-can read or write these contents as appropriate.
-
- When more than one `CHARACTER' argument is present in the argument
-list, the length arguments are appended in the order the original
-arguments appear. So `CALL FOO('HI','THERE')' is implemented in C as
-`foo("hi","there",2,5);', ignoring the fact that `g77' does not provide
-the trailing null bytes on the constant strings (`f2c' does provide
-them, but they are unnecessary in a Fortran environment, and you should
-not expect them to be there).
-
- Note that the above information applies to `CHARACTER' variables and
-arrays *only*. It does *not* apply to external `CHARACTER' functions
-or to intrinsic `CHARACTER' functions. That is, no second length
-argument is passed to `FOO' in this case:
-
- CHARACTER X
- EXTERNAL X
- CALL FOO(X)
-
-Nor does `FOO' expect such an argument in this case:
-
- SUBROUTINE FOO(X)
- CHARACTER X
- EXTERNAL X
-
- Because of this implementation detail, if a program has a bug such
-that there is disagreement as to whether an argument is a procedure,
-and the type of the argument is `CHARACTER', subtle symptoms might
-appear.
-
-\1f
-File: g77.info, Node: Functions, Next: Names, Prev: Procedures, Up: Debugging and Interfacing
-
-Functions (FUNCTION and RETURN)
-===============================
-
- `g77' handles in a special way functions that return the following
-types:
-
- * `CHARACTER'
-
- * `COMPLEX'
-
- * `REAL(KIND=1)'
-
- For `CHARACTER', `g77' implements a subroutine (a C function
-returning `void') with two arguments prepended: `__g77_result', which
-the caller passes as a pointer to a `char' array expected to hold the
-return value, and `__g77_length', which the caller passes as an
-`ftnlen' value specifying the length of the return value as declared in
-the calling program. For `CHARACTER*(*)', the called function uses
-`__g77_length' to determine the size of the array that `__g77_result'
-points to; otherwise, it ignores that argument.
-
- For `COMPLEX', when `-ff2c' is in force, `g77' implements a
-subroutine with one argument prepended: `__g77_result', which the
-caller passes as a pointer to a variable of the type of the function.
-The called function writes the return value into this variable instead
-of returning it as a function value. When `-fno-f2c' is in force,
-`g77' implements a `COMPLEX' function as `gcc''s `__complex__ float' or
-`__complex__ double' function (or an emulation thereof, when
-`-femulate-complex' is in effect), returning the result of the function
-in the same way as `gcc' would.
-
- For `REAL(KIND=1)', when `-ff2c' is in force, `g77' implements a
-function that actually returns `REAL(KIND=2)' (typically C's `double'
-type). When `-fno-f2c' is in force, `REAL(KIND=1)' functions return
-`float'.
-
-\1f
-File: g77.info, Node: Names, Next: Common Blocks, Prev: Functions, Up: Debugging and Interfacing
-
-Names
-=====
-
- Fortran permits each implementation to decide how to represent names
-as far as how they're seen in other contexts, such as debuggers and
-when interfacing to other languages, and especially as far as how
-casing is handled.
-
- External names--names of entities that are public, or "accessible",
-to all modules in a program--normally have an underscore (`_') appended
-by `g77', to generate code that is compatible with f2c. External names
-include names of Fortran things like common blocks, external procedures
-(subroutines and functions, but not including statement functions,
-which are internal procedures), and entry point names.
-
- However, use of the `-fno-underscoring' option disables this kind of
-transformation of external names (though inhibiting the transformation
-certainly improves the chances of colliding with incompatible externals
-written in other languages--but that might be intentional.
-
- When `-funderscoring' is in force, any name (external or local) that
-already has at least one underscore in it is implemented by `g77' by
-appending two underscores. (This second underscore can be disabled via
-the `-fno-second-underscore' option.) External names are changed this
-way for `f2c' compatibility. Local names are changed this way to avoid
-collisions with external names that are different in the source
-code--`f2c' does the same thing, but there's no compatibility issue
-there except for user expectations while debugging.
-
- For example:
-
- Max_Cost = 0
-
-Here, a user would, in the debugger, refer to this variable using the
-name `max_cost__' (or `MAX_COST__' or `Max_Cost__', as described below).
-(We hope to improve `g77' in this regard in the future--don't write
-scripts depending on this behavior! Also, consider experimenting with
-the `-fno-underscoring' option to try out debugging without having to
-massage names by hand like this.)
-
- `g77' provides a number of command-line options that allow the user
-to control how case mapping is handled for source files. The default
-is the traditional UNIX model for Fortran compilers--names are mapped
-to lower case. Other command-line options can be specified to map
-names to upper case, or to leave them exactly as written in the source
-file.
-
- For example:
-
- Foo = 9.436
-
-Here, it is normally the case that the variable assigned will be named
-`foo'. This would be the name to enter when using a debugger to access
-the variable.
-
- However, depending on the command-line options specified, the name
-implemented by `g77' might instead be `FOO' or even `Foo', thus
-affecting how debugging is done.
-
- Also:
-
- Call Foo
-
-This would normally call a procedure that, if it were in a separate C
-program, be defined starting with the line:
-
- void foo_()
-
-However, `g77' command-line options could be used to change the casing
-of names, resulting in the name `FOO_' or `Foo_' being given to the
-procedure instead of `foo_', and the `-fno-underscoring' option could
-be used to inhibit the appending of the underscore to the name.
-
-\1f
-File: g77.info, Node: Common Blocks, Next: Local Equivalence Areas, Prev: Names, Up: Debugging and Interfacing
-
-Common Blocks (COMMON)
-======================
-
- `g77' names and lays out `COMMON' areas the same way f2c does, for
-compatibility with f2c.
-
- Currently, `g77' does not emit "true" debugging information for
-members of a `COMMON' area, due to an apparent bug in the GBE.
-
- (As of Version 0.5.19, `g77' emits debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area. Use the `-fdebug-kludge' option to enable this behavior.
-In `gdb', use `set language c' before printing the value of the member,
-then `set language fortran' to restore the default language, since
-`gdb' doesn't provide a way to print a readable version of a character
-string in Fortran language mode.
-
- This kludge will be removed in a future version of `g77' that, in
-conjunction with a contemporary version of `gdb', properly supports
-Fortran-language debugging, including access to members of `COMMON'
-areas.)
-
- *Note Options for Code Generation Conventions: Code Gen Options, for
-information on the `-fdebug-kludge' option.
-
- Moreover, `g77' currently implements a `COMMON' area such that its
-type is an array of the C `char' data type.
-
- So, when debugging, you must know the offset into a `COMMON' area
-for a particular item in that area, and you have to take into account
-the appropriate multiplier for the respective sizes of the types (as
-declared in your code) for the items preceding the item in question as
-compared to the size of the `char' type.
-
- For example, using default implicit typing, the statement
-
- COMMON I(15), R(20), T
-
-results in a public 144-byte `char' array named `_BLNK__' with `I'
-placed at `_BLNK__[0]', `R' at `_BLNK__[60]', and `T' at `_BLNK__[140]'.
-(This is assuming that the target machine for the compilation has
-4-byte `INTEGER(KIND=1)' and `REAL(KIND=1)' types.)
-
-\1f
-File: g77.info, Node: Local Equivalence Areas, Next: Complex Variables, Prev: Common Blocks, Up: Debugging and Interfacing
-
-Local Equivalence Areas (EQUIVALENCE)
-=====================================
-
- `g77' treats storage-associated areas involving a `COMMON' block as
-explained in the section on common blocks.
-
- A local `EQUIVALENCE' area is a collection of variables and arrays
-connected to each other in any way via `EQUIVALENCE', none of which are
-listed in a `COMMON' statement.
-
- Currently, `g77' does not emit "true" debugging information for
-members in a local `EQUIVALENCE' area, due to an apparent bug in the
-GBE.
-
- (As of Version 0.5.19, `g77' does emit debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area. Use the `-fdebug-kludge' option to enable this behavior.
-In `gdb', use `set language c' before printing the value of the member,
-then `set language fortran' to restore the default language, since
-`gdb' doesn't provide a way to print a readable version of a character
-string in Fortran language mode.
-
- This kludge will be removed in a future version of `g77' that, in
-conjunction with a contemporary version of `gdb', properly supports
-Fortran-language debugging, including access to members of
-`EQUIVALENCE' areas.)
-
- *Note Options for Code Generation Conventions: Code Gen Options, for
-information on the `-fdebug-kludge' option.
-
- Moreover, `g77' implements a local `EQUIVALENCE' area such that its
-type is an array of the C `char' data type.
-
- The name `g77' gives this array of `char' type is `__g77_equiv_X',
-where X is the name of the item that is placed at the beginning (offset
-0) of this array. If more than one such item is placed at the
-beginning, X is the name that sorts to the top in an alphabetical sort
-of the list of such items.
-
- When debugging, you must therefore access members of `EQUIVALENCE'
-areas by specifying the appropriate `__g77_equiv_X' array section with
-the appropriate offset. See the explanation of debugging `COMMON'
-blocks for info applicable to debugging local `EQUIVALENCE' areas.
-
- (*Note:* `g77' version 0.5.18 and earlier chose the name for X using
-a different method when more than one name was in the list of names of
-entities placed at the beginning of the array. Though the
-documentation specified that the first name listed in the `EQUIVALENCE'
-statements was chosen for X, `g77' in fact chose the name using a
-method that was so complicated, it seemed easier to change it to an
-alphabetical sort than to describe the previous method in the
-documentation.)
-
-\1f
-File: g77.info, Node: Complex Variables, Next: Arrays, Prev: Local Equivalence Areas, Up: Debugging and Interfacing
-
-Complex Variables (COMPLEX)
-===========================
-
- As of 0.5.20, `g77' defaults to handling `COMPLEX' types (and
-related intrinsics, constants, functions, and so on) in a manner that
-makes direct debugging involving these types in Fortran language mode
-difficult.
-
- Essentially, `g77' implements these types using an internal
-construct similar to C's `struct', at least as seen by the `gcc' back
-end.
-
- Currently, the back end, when outputting debugging info with the
-compiled code for the assembler to digest, does not detect these
-`struct' types as being substitutes for Fortran complex. As a result,
-the Fortran language modes of debuggers such as `gdb' see these types
-as C `struct' types, which they might or might not support.
-
- Until this is fixed, switch to C language mode to work with entities
-of `COMPLEX' type and then switch back to Fortran language mode
-afterward. (In `gdb', this is accomplished via `set lang c' and either
-`set lang fortran' or `set lang auto'.)
-
- *Note:* Compiling with the `-fno-emulate-complex' option avoids the
-debugging problem, but is known to cause other problems like compiler
-crashes and generation of incorrect code, so it is not recommended.
-
-\1f
-File: g77.info, Node: Arrays, Next: Adjustable Arrays, Prev: Complex Variables, Up: Debugging and Interfacing
-
-Arrays (DIMENSION)
-==================
-
- Fortran uses "column-major ordering" in its arrays. This differs
-from other languages, such as C, which use "row-major ordering". The
-difference is that, with Fortran, array elements adjacent to each other
-in memory differ in the *first* subscript instead of the last;
-`A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major
-ordering it would follow `A(5,10,19)'.
-
- This consideration affects not only interfacing with and debugging
-Fortran code, it can greatly affect how code is designed and written,
-especially when code speed and size is a concern.
-
- Fortran also differs from C, a popular language for interfacing and
-to support directly in debuggers, in the way arrays are treated. In C,
-arrays are single-dimensional and have interesting relationships to
-pointers, neither of which is true for Fortran. As a result, dealing
-with Fortran arrays from within an environment limited to C concepts
-can be challenging.
-
- For example, accessing the array element `A(5,10,20)' is easy enough
-in Fortran (use `A(5,10,20)'), but in C some difficult machinations are
-needed. First, C would treat the A array as a single-dimension array.
-Second, C does not understand low bounds for arrays as does Fortran.
-Third, C assumes a low bound of zero (0), while Fortran defaults to a
-low bound of one (1) and can supports an arbitrary low bound.
-Therefore, calculations must be done to determine what the C equivalent
-of `A(5,10,20)' would be, and these calculations require knowing the
-dimensions of `A'.
-
- For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of
-`A(5,10,20)' would be:
-
- (5-2)
- + (10-1)*(11-2+1)
- + (20-0)*(11-2+1)*(21-1+1)
- = 4293
-
-So the C equivalent in this case would be `a[4293]'.
-
- When using a debugger directly on Fortran code, the C equivalent
-might not work, because some debuggers cannot understand the notion of
-low bounds other than zero. However, unlike `f2c', `g77' does inform
-the GBE that a multi-dimensional array (like `A' in the above example)
-is really multi-dimensional, rather than a single-dimensional array, so
-at least the dimensionality of the array is preserved.
-
- Debuggers that understand Fortran should have no trouble with
-non-zero low bounds, but for non-Fortran debuggers, especially C
-debuggers, the above example might have a C equivalent of `a[4305]'.
-This calculation is arrived at by eliminating the subtraction of the
-lower bound in the first parenthesized expression on each line--that
-is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and
-for `(20-0)' substitute `(20)'. Actually, the implication of this can
-be that the expression `*(&a[2][1][0] + 4293)' works fine, but that
-`a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)'
-because of the missing lower bounds.
-
- Come to think of it, perhaps the behavior is due to the debugger
-internally compensating for the lower bounds by offsetting the base
-address of `a', leaving `&a' set lower, in this case, than
-`&a[2][1][0]' (the address of its first element as identified by
-subscripts equal to the corresponding lower bounds).
-
- You know, maybe nobody really needs to use arrays.
-
-\1f
-File: g77.info, Node: Adjustable Arrays, Next: Alternate Entry Points, Prev: Arrays, Up: Debugging and Interfacing
-
-Adjustable Arrays (DIMENSION)
-=============================
-
- Adjustable and automatic arrays in Fortran require the implementation
-(in this case, the `g77' compiler) to "memorize" the expressions that
-dimension the arrays each time the procedure is invoked. This is so
-that subsequent changes to variables used in those expressions, made
-during execution of the procedure, do not have any effect on the
-dimensions of those arrays.
-
- For example:
-
- REAL ARRAY(5)
- DATA ARRAY/5*2/
- CALL X(ARRAY, 5)
- END
- SUBROUTINE X(A, N)
- DIMENSION A(N)
- N = 20
- PRINT *, N, A
- END
-
-Here, the implementation should, when running the program, print
-something like:
-
- 20 2. 2. 2. 2. 2.
-
-Note that this shows that while the value of `N' was successfully
-changed, the size of the `A' array remained at 5 elements.
-
- To support this, `g77' generates code that executes before any user
-code (and before the internally generated computed `GOTO' to handle
-alternate entry points, as described below) that evaluates each
-(nonconstant) expression in the list of subscripts for an array, and
-saves the result of each such evaluation to be used when determining
-the size of the array (instead of re-evaluating the expressions).
-
- So, in the above example, when `X' is first invoked, code is
-executed that copies the value of `N' to a temporary. And that same
-temporary serves as the actual high bound for the single dimension of
-the `A' array (the low bound being the constant 1). Since the user
-program cannot (legitimately) change the value of the temporary during
-execution of the procedure, the size of the array remains constant
-during each invocation.
-
- For alternate entry points, the code `g77' generates takes into
-account the possibility that a dummy adjustable array is not actually
-passed to the actual entry point being invoked at that time. In that
-case, the public procedure implementing the entry point passes to the
-master private procedure implementing all the code for the entry points
-a `NULL' pointer where a pointer to that adjustable array would be
-expected. The `g77'-generated code doesn't attempt to evaluate any of
-the expressions in the subscripts for an array if the pointer to that
-array is `NULL' at run time in such cases. (Don't depend on this
-particular implementation by writing code that purposely passes `NULL'
-pointers where the callee expects adjustable arrays, even if you know
-the callee won't reference the arrays--nor should you pass `NULL'
-pointers for any dummy arguments used in calculating the bounds of such
-arrays or leave undefined any values used for that purpose in
-COMMON--because the way `g77' implements these things might change in
-the future!)
-
-\1f
-File: g77.info, Node: Alternate Entry Points, Next: Alternate Returns, Prev: Adjustable Arrays, Up: Debugging and Interfacing
-
-Alternate Entry Points (ENTRY)
-==============================
-
- The GBE does not understand the general concept of alternate entry
-points as Fortran provides via the ENTRY statement. `g77' gets around
-this by using an approach to compiling procedures having at least one
-`ENTRY' statement that is almost identical to the approach used by
-`f2c'. (An alternate approach could be used that would probably
-generate faster, but larger, code that would also be a bit easier to
-debug.)
-
- Information on how `g77' implements `ENTRY' is provided for those
-trying to debug such code. The choice of implementation seems unlikely
-to affect code (compiled in other languages) that interfaces to such
-code.
-
- `g77' compiles exactly one public procedure for the primary entry
-point of a procedure plus each `ENTRY' point it specifies, as usual.
-That is, in terms of the public interface, there is no difference
-between
-
- SUBROUTINE X
- END
- SUBROUTINE Y
- END
-
-and:
-
- SUBROUTINE X
- ENTRY Y
- END
-
- The difference between the above two cases lies in the code compiled
-for the `X' and `Y' procedures themselves, plus the fact that, for the
-second case, an extra internal procedure is compiled.
-
- For every Fortran procedure with at least one `ENTRY' statement,
-`g77' compiles an extra procedure named `__g77_masterfun_X', where X is
-the name of the primary entry point (which, in the above case, using
-the standard compiler options, would be `x_' in C).
-
- This extra procedure is compiled as a private procedure--that is, a
-procedure not accessible by name to separately compiled modules. It
-contains all the code in the program unit, including the code for the
-primary entry point plus for every entry point. (The code for each
-public procedure is quite short, and explained later.)
-
- The extra procedure has some other interesting characteristics.
-
- The argument list for this procedure is invented by `g77'. It
-contains a single integer argument named `__g77_which_entrypoint',
-passed by value (as in Fortran's `%VAL()' intrinsic), specifying the
-entry point index--0 for the primary entry point, 1 for the first entry
-point (the first `ENTRY' statement encountered), 2 for the second entry
-point, and so on.
-
- It also contains, for functions returning `CHARACTER' and (when
-`-ff2c' is in effect) `COMPLEX' functions, and for functions returning
-different types among the `ENTRY' statements (e.g. `REAL FUNCTION R()'
-containing `ENTRY I()'), an argument named `__g77_result' that is
-expected at run time to contain a pointer to where to store the result
-of the entry point. For `CHARACTER' functions, this storage area is an
-array of the appropriate number of characters; for `COMPLEX' functions,
-it is the appropriate area for the return type; for
-multiple-return-type functions, it is a union of all the supported
-return types (which cannot include `CHARACTER', since combining
-`CHARACTER' and non-`CHARACTER' return types via `ENTRY' in a single
-function is not supported by `g77').
-
- For `CHARACTER' functions, the `__g77_result' argument is followed
-by yet another argument named `__g77_length' that, at run time,
-specifies the caller's expected length of the returned value. Note
-that only `CHARACTER*(*)' functions and entry points actually make use
-of this argument, even though it is always passed by all callers of
-public `CHARACTER' functions (since the caller does not generally know
-whether such a function is `CHARACTER*(*)' or whether there are any
-other callers that don't have that information).
-
- The rest of the argument list is the union of all the arguments
-specified for all the entry points (in their usual forms, e.g.
-`CHARACTER' arguments have extra length arguments, all appended at the
-end of this list). This is considered the "master list" of arguments.
-
- The code for this procedure has, before the code for the first
-executable statement, code much like that for the following Fortran
-statement:
-
- GOTO (100000,100001,100002), __g77_which_entrypoint
- 100000 ...code for primary entry point...
- 100001 ...code immediately following first ENTRY statement...
- 100002 ...code immediately following second ENTRY statement...
-
-(Note that invalid Fortran statement labels and variable names are used
-in the above example to highlight the fact that it represents code
-generated by the `g77' internals, not code to be written by the user.)
-
- It is this code that, when the procedure is called, picks which
-entry point to start executing.
-
- Getting back to the public procedures (`x' and `Y' in the original
-example), those procedures are fairly simple. Their interfaces are
-just like they would be if they were self-contained procedures (without
-`ENTRY'), of course, since that is what the callers expect. Their code
-consists of simply calling the private procedure, described above, with
-the appropriate extra arguments (the entry point index, and perhaps a
-pointer to a multiple-type- return variable, local to the public
-procedure, that contains all the supported returnable non-character
-types). For arguments that are not listed for a given entry point that
-are listed for other entry points, and therefore that are in the
-"master list" for the private procedure, null pointers (in C, the
-`NULL' macro) are passed. Also, for entry points that are part of a
-multiple-type- returning function, code is compiled after the call of
-the private procedure to extract from the multi-type union the
-appropriate result, depending on the type of the entry point in
-question, returning that result to the original caller.
-
- When debugging a procedure containing alternate entry points, you
-can either set a break point on the public procedure itself (e.g. a
-break point on `X' or `Y') or on the private procedure that contains
-most of the pertinent code (e.g. `__g77_masterfun_X'). If you do the
-former, you should use the debugger's command to "step into" the called
-procedure to get to the actual code; with the latter approach, the
-break point leaves you right at the actual code, skipping over the
-public entry point and its call to the private procedure (unless you
-have set a break point there as well, of course).
-
- Further, the list of dummy arguments that is visible when the
-private procedure is active is going to be the expanded version of the
-list for whichever particular entry point is active, as explained
-above, and the way in which return values are handled might well be
-different from how they would be handled for an equivalent single-entry
-function.
-
-\1f
-File: g77.info, Node: Alternate Returns, Next: Assigned Statement Labels, Prev: Alternate Entry Points, Up: Debugging and Interfacing
-
-Alternate Returns (SUBROUTINE and RETURN)
-=========================================
-
- Subroutines with alternate returns (e.g. `SUBROUTINE X(*)' and `CALL
-X(*50)') are implemented by `g77' as functions returning the C `int'
-type. The actual alternate-return arguments are omitted from the
-calling sequence. Instead, the caller uses the return value to do a
-rough equivalent of the Fortran computed-`GOTO' statement, as in `GOTO
-(50), X()' in the example above (where `X' is quietly declared as an
-`INTEGER(KIND=1)' function), and the callee just returns whatever
-integer is specified in the `RETURN' statement for the subroutine For
-example, `RETURN 1' is implemented as `X = 1' followed by `RETURN' in
-C, and `RETURN' by itself is `X = 0' and `RETURN').
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Assigned Statement Labels, Next: Run-time Library Errors, Prev: Alternate Returns, Up: Debugging and Interfacing
-
-Assigned Statement Labels (ASSIGN and GOTO)
-===========================================
-
- For portability to machines where a pointer (such as to a label,
-which is how `g77' implements `ASSIGN' and its relatives, the
-assigned-`GOTO' and assigned-`FORMAT'-I/O statements) is wider
-(bitwise) than an `INTEGER(KIND=1)', `g77' uses a different memory
-location to hold the `ASSIGN'ed value of a variable than it does the
-numerical value in that variable, unless the variable is wide enough
-(can hold enough bits).
-
- In particular, while `g77' implements
-
- I = 10
-
-as, in C notation, `i = 10;', it implements
-
- ASSIGN 10 TO I
-
-as, in GNU's extended C notation (for the label syntax),
-`__g77_ASSIGN_I = &&L10;' (where `L10' is just a massaging of the
-Fortran label `10' to make the syntax C-like; `g77' doesn't actually
-generate the name `L10' or any other name like that, since debuggers
-cannot access labels anyway).
-
- While this currently means that an `ASSIGN' statement does not
-overwrite the numeric contents of its target variable, *do not* write
-any code depending on this feature. `g77' has already changed this
-implementation across versions and might do so in the future. This
-information is provided only to make debugging Fortran programs
-compiled with the current version of `g77' somewhat easier. If there's
-no debugger-visible variable named `__g77_ASSIGN_I' in a program unit
-that does `ASSIGN 10 TO I', that probably means `g77' has decided it
-can store the pointer to the label directly into `I' itself.
-
- *Note Ugly Assigned Labels::, for information on a command-line
-option to force `g77' to use the same storage for both normal and
-assigned-label uses of a variable.
-
-\1f
-File: g77.info, Node: Run-time Library Errors, Prev: Assigned Statement Labels, Up: Debugging and Interfacing
-
-Run-time Library Errors
-=======================
-
- The `libf2c' library currently has the following table to relate
-error code numbers, returned in `IOSTAT=' variables, to messages. This
-information should, in future versions of this document, be expanded
-upon to include detailed descriptions of each message.
-
- In line with good coding practices, any of the numbers in the list
-below should *not* be directly written into Fortran code you write.
-Instead, make a separate `INCLUDE' file that defines `PARAMETER' names
-for them, and use those in your code, so you can more easily change the
-actual numbers in the future.
-
- The information below is culled from the definition of `F_err' in
-`f/runtime/libI77/err.c' in the `g77' source tree.
-
- 100: "error in format"
- 101: "illegal unit number"
- 102: "formatted io not allowed"
- 103: "unformatted io not allowed"
- 104: "direct io not allowed"
- 105: "sequential io not allowed"
- 106: "can't backspace file"
- 107: "null file name"
- 108: "can't stat file"
- 109: "unit not connected"
- 110: "off end of record"
- 111: "truncation failed in endfile"
- 112: "incomprehensible list input"
- 113: "out of free space"
- 114: "unit not connected"
- 115: "read unexpected character"
- 116: "bad logical input field"
- 117: "bad variable type"
- 118: "bad namelist name"
- 119: "variable not in namelist"
- 120: "no end record"
- 121: "variable count incorrect"
- 122: "subscript for scalar variable"
- 123: "invalid array section"
- 124: "substring out of bounds"
- 125: "subscript out of bounds"
- 126: "can't read file"
- 127: "can't write file"
- 128: "'new' file exists"
- 129: "can't append to file"
- 130: "non-positive record number"
- 131: "I/O started while already doing I/O"
-
-\1f
-File: g77.info, Node: Collected Fortran Wisdom, Next: Trouble, Prev: Debugging and Interfacing, Up: Top
-
-Collected Fortran Wisdom
-************************
-
- Most users of `g77' can be divided into two camps:
-
- * Those writing new Fortran code to be compiled by `g77'.
-
- * Those using `g77' to compile existing, "legacy" code.
-
- Users writing new code generally understand most of the necessary
-aspects of Fortran to write "mainstream" code, but often need help
-deciding how to handle problems, such as the construction of libraries
-containing `BLOCK DATA'.
-
- Users dealing with "legacy" code sometimes don't have much
-experience with Fortran, but believe that the code they're compiling
-already works when compiled by other compilers (and might not
-understand why, as is sometimes the case, it doesn't work when compiled
-by `g77').
-
- The following information is designed to help users do a better job
-coping with existing, "legacy" Fortran code, and with writing new code
-as well.
-
-* Menu:
-
-* Advantages Over f2c:: If `f2c' is so great, why `g77'?
-* Block Data and Libraries:: How `g77' solves a common problem.
-* Loops:: Fortran `DO' loops surprise many people.
-* Working Programs:: Getting programs to work should be done first.
-* Overly Convenient Options:: Temptations to avoid, habits to not form.
-* Faster Programs:: Everybody wants these, but at what cost?
-
-\1f
-File: g77.info, Node: Advantages Over f2c, Next: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Advantages Over f2c
-===================
-
- Without `f2c', `g77' would have taken much longer to do and probably
-not been as good for quite a while. Sometimes people who notice how
-much `g77' depends on, and documents encouragement to use, `f2c' ask
-why `g77' was created if `f2c' already existed.
-
- This section gives some basic answers to these questions, though it
-is not intended to be comprehensive.
-
-* Menu:
-
-* Language Extensions:: Features used by Fortran code.
-* Compiler Options:: Features helpful during development.
-* Compiler Speed:: Speed of the compilation process.
-* Program Speed:: Speed of the generated, optimized code.
-* Ease of Debugging:: Debugging ease-of-use at the source level.
-* Character and Hollerith Constants:: A byte saved is a byte earned.
-
-\1f
-File: g77.info, Node: Language Extensions, Next: Compiler Options, Up: Advantages Over f2c
-
-Language Extensions
--------------------
-
- `g77' offers several extensions to the Fortran language that `f2c'
-doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like fairly complete
-support for `INTEGER*2'. It is expected that `g77' will offer some or
-all of these missing features at some time in the future. (Version
-0.5.18 of `g77' offers some rudimentary support for some of these
-features.)
-
-\1f
-File: g77.info, Node: Compiler Options, Next: Compiler Speed, Prev: Language Extensions, Up: Advantages Over f2c
-
-Compiler Options
-----------------
-
- `g77' offers a whole bunch of compiler options that `f2c' doesn't.
-
- However, `f2c' offers a few that `g77' doesn't, like an option to
-generate code to check array subscripts at run time. It is expected
-that `g77' will offer some or all of these missing options at some time
-in the future.
-
-\1f
-File: g77.info, Node: Compiler Speed, Next: Program Speed, Prev: Compiler Options, Up: Advantages Over f2c
-
-Compiler Speed
---------------
-
- Saving the steps of writing and then rereading C code is a big reason
-why `g77' should be able to compile code much faster than using `f2c'
-in conjunction with the equivalent invocation of `gcc'.
-
- However, due to `g77''s youth, lots of self-checking is still being
-performed. As a result, this improvement is as yet unrealized (though
-the potential seems to be there for quite a big speedup in the future).
-It is possible that, as of version 0.5.18, `g77' is noticeably faster
-compiling many Fortran source files than using `f2c' in conjunction
-with `gcc'.
-
-\1f
-File: g77.info, Node: Program Speed, Next: Ease of Debugging, Prev: Compiler Speed, Up: Advantages Over f2c
-
-Program Speed
--------------
-
- `g77' has the potential to better optimize code than `f2c', even
-when `gcc' is used to compile the output of `f2c', because `f2c' must
-necessarily translate Fortran into a somewhat lower-level language (C)
-that cannot preserve all the information that is potentially useful for
-optimization, while `g77' can gather, preserve, and transmit that
-information directly to the GBE.
-
- For example, `g77' implements `ASSIGN' and assigned `GOTO' using
-direct assignment of pointers to labels and direct jumps to labels,
-whereas `f2c' maps the assigned labels to integer values and then uses
-a C `switch' statement to encode the assigned `GOTO' statements.
-
- However, as is typical, theory and reality don't quite match, at
-least not in all cases, so it is still the case that `f2c' plus `gcc'
-can generate code that is faster than `g77'.
-
- Version 0.5.18 of `g77' offered default settings and options, via
-patches to the `gcc' back end, that allow for better program speed,
-though some of these improvements also affected the performance of
-programs translated by `f2c' and then compiled by `g77''s version of
-`gcc'.
-
- Version 0.5.20 of `g77' offers further performance improvements, at
-least one of which (alias analysis) is not generally applicable to
-`f2c' (though `f2c' could presumably be changed to also take advantage
-of this new capability of the `gcc' back end, assuming this is made
-available in an upcoming release of `gcc').
-
-\1f
-File: g77.info, Node: Ease of Debugging, Next: Character and Hollerith Constants, Prev: Program Speed, Up: Advantages Over f2c
-
-Ease of Debugging
------------------
-
- Because `g77' compiles directly to assembler code like `gcc',
-instead of translating to an intermediate language (C) as does `f2c',
-support for debugging can be better for `g77' than `f2c'.
-
- However, although `g77' might be somewhat more "native" in terms of
-debugging support than `f2c' plus `gcc', there still are a lot of
-things "not quite right". Many of the important ones should be
-resolved in the near future.
-
- For example, `g77' doesn't have to worry about reserved names like
-`f2c' does. Given `FOR = WHILE', `f2c' must necessarily translate this
-to something *other* than `for = while;', because C reserves those
-words.
-
- However, `g77' does still uses things like an extra level of
-indirection for `ENTRY'-laden procedures--in this case, because the
-back end doesn't yet support multiple entry points.
-
- Another example is that, given
-
- COMMON A, B
- EQUIVALENCE (B, C)
-
-the `g77' user should be able to access the variables directly, by name,
-without having to traverse C-like structures and unions, while `f2c' is
-unlikely to ever offer this ability (due to limitations in the C
-language).
-
- However, due to apparent bugs in the back end, `g77' currently
-doesn't take advantage of this facility at all--it doesn't emit any
-debugging information for `COMMON' and `EQUIVALENCE' areas, other than
-information on the array of `char' it creates (and, in the case of
-local `EQUIVALENCE', names) for each such area.
-
- Yet another example is arrays. `g77' represents them to the debugger
-using the same "dimensionality" as in the source code, while `f2c' must
-necessarily convert them all to one-dimensional arrays to fit into the
-confines of the C language. However, the level of support offered by
-debuggers for interactive Fortran-style access to arrays as compiled by
-`g77' can vary widely. In some cases, it can actually be an advantage
-that `f2c' converts everything to widely supported C semantics.
-
- In fairness, `g77' could do many of the things `f2c' does to get
-things working at least as well as `f2c'--for now, the developers
-prefer making `g77' work the way they think it is supposed to, and
-finding help improving the other products (the back end of `gcc';
-`gdb'; and so on) to get things working properly.
-
-\1f
-File: g77.info, Node: Character and Hollerith Constants, Prev: Ease of Debugging, Up: Advantages Over f2c
-
-Character and Hollerith Constants
----------------------------------
-
- To avoid the extensive hassle that would be needed to avoid this,
-`f2c' uses C character constants to encode character and Hollerith
-constants. That means a constant like `'HELLO'' is translated to
-`"hello"' in C, which further means that an extra null byte is present
-at the end of the constant. This null byte is superfluous.
-
- `g77' does not generate such null bytes. This represents significant
-savings of resources, such as on systems where `/dev/null' or
-`/dev/zero' represent bottlenecks in the systems' performance, because
-`g77' simply asks for fewer zeros from the operating system than `f2c'.
-
-\1f
-File: g77.info, Node: Block Data and Libraries, Next: Loops, Prev: Advantages Over f2c, Up: Collected Fortran Wisdom
-
-Block Data and Libraries
-========================
-
- To ensure that block data program units are linked, especially a
-concern when they are put into libraries, give each one a name (as in
-`BLOCK DATA FOO') and make sure there is an `EXTERNAL FOO' statement in
-every program unit that uses any common block initialized by the
-corresponding `BLOCK DATA'. `g77' currently compiles a `BLOCK DATA' as
-if it were a `SUBROUTINE', that is, it generates an actual procedure
-having the appropriate name. The procedure does nothing but return
-immediately if it happens to be called. For `EXTERNAL FOO', where
-`FOO' is not otherwise referenced in the same program unit, `g77'
-assumes there exists a `BLOCK DATA FOO' in the program and ensures that
-by generating a reference to it so the linker will make sure it is
-present. (Specifically, `g77' outputs in the data section a static
-pointer to the external name `FOO'.)
-
- The implementation `g77' currently uses to make this work is one of
-the few things not compatible with `f2c' as currently shipped. `f2c'
-currently does nothing with `EXTERNAL FOO' except issue a warning that
-`FOO' is not otherwise referenced, and for `BLOCK DATA FOO', f2c
-doesn't generate a dummy procedure with the name `FOO'. The upshot is
-that you shouldn't mix `f2c' and `g77' in this particular case. If you
-use f2c to compile `BLOCK DATA FOO', then any `g77'-compiled program
-unit that says `EXTERNAL FOO' will result in an unresolved reference
-when linked. If you do the opposite, then `FOO' might not be linked in
-under various circumstances (such as when `FOO' is in a library, or
-you're using a "clever" linker--so clever, it produces a broken program
-with little or no warning by omitting initializations of global data
-because they are contained in unreferenced procedures).
-
- The changes you make to your code to make `g77' handle this
-situation, however, appear to be a widely portable way to handle it.
-That is, many systems permit it (as they should, since the FORTRAN 77
-standard permits `EXTERNAL FOO' when `FOO' is a block data program
-unit), and of the ones that might not link `BLOCK DATA FOO' under some
-circumstances, most of them appear to do so once `EXTERNAL FOO' is
-present in the appropriate program units.
-
- Here is the recommended approach to modifying a program containing a
-program unit such as the following:
-
- BLOCK DATA FOO
- COMMON /VARS/ X, Y, Z
- DATA X, Y, Z / 3., 4., 5. /
- END
-
-If the above program unit might be placed in a library module, then
-ensure that every program unit in every program that references that
-particular `COMMON' area uses the `EXTERNAL' statement to force the
-area to be initialized.
-
- For example, change a program unit that starts with
-
- INTEGER FUNCTION CURX()
- COMMON /VARS/ X, Y, Z
- CURX = X
- END
-
-so that it uses the `EXTERNAL' statement, as in:
-
- INTEGER FUNCTION CURX()
- COMMON /VARS/ X, Y, Z
- EXTERNAL FOO
- CURX = X
- END
-
-That way, `CURX' is compiled by `g77' (and many other compilers) so
-that the linker knows it must include `FOO', the `BLOCK DATA' program
-unit that sets the initial values for the variables in `VAR', in the
-executable program.
-
-\1f
-File: g77.info, Node: Loops, Next: Working Programs, Prev: Block Data and Libraries, Up: Collected Fortran Wisdom
-
-Loops
-=====
-
- The meaning of a `DO' loop in Fortran is precisely specified in the
-Fortran standard...and is quite different from what many programmers
-might expect.
-
- In particular, Fortran `DO' loops are implemented as if the number
-of trips through the loop is calculated *before* the loop is entered.
-
- The number of trips for a loop is calculated from the START, END,
-and INCREMENT values specified in a statement such as:
-
- DO ITER = START, END, INCREMENT
-
-The trip count is evaluated using a fairly simple formula based on the
-three values following the `=' in the statement, and it is that trip
-count that is effectively decremented during each iteration of the loop.
-If, at the beginning of an iteration of the loop, the trip count is
-zero or negative, the loop terminates. The per-loop-iteration
-modifications to ITER are not related to determining whether to
-terminate the loop.
-
- There are two important things to remember about the trip count:
-
- * It can be *negative*, in which case it is treated as if it was
- zero--meaning the loop is not executed at all.
-
- * The type used to *calculate* the trip count is the same type as
- ITER, but the final calculation, and thus the type of the trip
- count itself, always is `INTEGER(KIND=1)'.
-
- These two items mean that there are loops that cannot be written in
-straightforward fashion using the Fortran `DO'.
-
- For example, on a system with the canonical 32-bit two's-complement
-implementation of `INTEGER(KIND=1)', the following loop will not work:
-
- DO I = -2000000000, 2000000000
-
-Although the START and END values are well within the range of
-`INTEGER(KIND=1)', the *trip count* is not. The expected trip count is
-40000000001, which is outside the range of `INTEGER(KIND=1)' on many
-systems.
-
- Instead, the above loop should be constructed this way:
-
- I = -2000000000
- DO
- IF (I .GT. 2000000000) EXIT
- ...
- I = I + 1
- END DO
-
-The simple `DO' construct and the `EXIT' statement (used to leave the
-innermost loop) are F90 features that `g77' supports.
-
- Some Fortran compilers have buggy implementations of `DO', in that
-they don't follow the standard. They implement `DO' as a
-straightforward translation to what, in C, would be a `for' statement.
-Instead of creating a temporary variable to hold the trip count as
-calculated at run time, these compilers use the iteration variable ITER
-to control whether the loop continues at each iteration.
-
- The bug in such an implementation shows up when the trip count is
-within the range of the type of ITER, but the magnitude of `ABS(END) +
-ABS(INCR)' exceeds that range. For example:
-
- DO I = 2147483600, 2147483647
-
-A loop started by the above statement will work as implemented by
-`g77', but the use, by some compilers, of a more C-like implementation
-akin to
-
- for (i = 2147483600; i <= 2147483647; ++i)
-
-produces a loop that does not terminate, because `i' can never be
-greater than 2147483647, since incrementing it beyond that value
-overflows `i', setting it to -2147483648. This is a large, negative
-number that still is less than 2147483647.
-
- Another example of unexpected behavior of `DO' involves using a
-nonintegral iteration variable ITER, that is, a `REAL' variable.
-Consider the following program:
-
- DATA BEGIN, END, STEP /.1, .31, .007/
- DO 10 R = BEGIN, END, STEP
- IF (R .GT. END) PRINT *, R, ' .GT. ', END, '!!'
- PRINT *,R
- 10 CONTINUE
- PRINT *,'LAST = ',R
- IF (R .LE. END) PRINT *, R, ' .LE. ', END, '!!'
- END
-
-A C-like view of `DO' would hold that the two "exclamatory" `PRINT'
-statements are never executed. However, this is the output of running
-the above program as compiled by `g77' on a GNU/Linux ix86 system:
-
- .100000001
- .107000001
- .114
- .120999999
- ...
- .289000005
- .296000004
- .303000003
- LAST = .310000002
- .310000002 .LE. .310000002!!
-
- Note that one of the two checks in the program turned up an apparent
-violation of the programmer's expectation--yet, the loop is correctly
-implemented by `g77', in that it has 30 iterations. This trip count of
-30 is correct when evaluated using the floating-point representations
-for the BEGIN, END, and INCR values (.1, .31, .007) on GNU/Linux ix86
-are used. On other systems, an apparently more accurate trip count of
-31 might result, but, nevertheless, `g77' is faithfully following the
-Fortran standard, and the result is not what the author of the sample
-program above apparently expected. (Such other systems might, for
-different values in the `DATA' statement, violate the other
-programmer's expectation, for example.)
-
- Due to this combination of imprecise representation of
-floating-point values and the often-misunderstood interpretation of
-`DO' by standard-conforming compilers such as `g77', use of `DO' loops
-with `REAL' iteration variables is not recommended. Such use can be
-caught by specifying `-Wsurprising'. *Note Warning Options::, for more
-information on this option.
-
-\1f
-File: g77.info, Node: Working Programs, Next: Overly Convenient Options, Prev: Loops, Up: Collected Fortran Wisdom
-
-Working Programs
-================
-
- Getting Fortran programs to work in the first place can be quite a
-challenge--even when the programs already work on other systems, or
-when using other compilers.
-
- `g77' offers some facilities that might be useful for tracking down
-bugs in such programs.
-
-* Menu:
-
-* Not My Type::
-* Variables Assumed To Be Zero::
-* Variables Assumed To Be Saved::
-* Unwanted Variables::
-* Unused Arguments::
-* Surprising Interpretations of Code::
-* Aliasing Assumed To Work::
-* Output Assumed To Flush::
-* Large File Unit Numbers::
-
-\1f
-File: g77.info, Node: Not My Type, Next: Variables Assumed To Be Zero, Up: Working Programs
-
-Not My Type
------------
-
- A fruitful source of bugs in Fortran source code is use, or mis-use,
-of Fortran's implicit-typing feature, whereby the type of a variable,
-array, or function is determined by the first character of its name.
-
- Simple cases of this include statements like `LOGX=9.227', without a
-statement such as `REAL LOGX'. In this case, `LOGX' is implicitly
-given `INTEGER(KIND=1)' type, with the result of the assignment being
-that it is given the value `9'.
-
- More involved cases include a function that is defined starting with
-a statement like `DOUBLE PRECISION FUNCTION IPS(...)'. Any caller of
-this function that does not also declare `IPS' as type `DOUBLE
-PRECISION' (or, in GNU Fortran, `REAL(KIND=2)') is likely to assume it
-returns `INTEGER', or some other type, leading to invalid results or
-even program crashes.
-
- The `-Wimplicit' option might catch failures to properly specify the
-types of variables, arrays, and functions in the code.
-
- However, in code that makes heavy use of Fortran's implicit-typing
-facility, this option might produce so many warnings about cases that
-are working, it would be hard to find the one or two that represent
-bugs. This is why so many experienced Fortran programmers strongly
-recommend widespread use of the `IMPLICIT NONE' statement, despite it
-not being standard FORTRAN 77, to completely turn off implicit typing.
-(`g77' supports `IMPLICIT NONE', as do almost all FORTRAN 77 compilers.)
-
- Note that `-Wimplicit' catches only implicit typing of *names*. It
-does not catch implicit typing of expressions such as `X**(2/3)'. Such
-expressions can be buggy as well--in fact, `X**(2/3)' is equivalent to
-`X**0', due to the way Fortran expressions are given types and then
-evaluated. (In this particular case, the programmer probably wanted
-`X**(2./3.)'.)
-
-\1f
-File: g77.info, Node: Variables Assumed To Be Zero, Next: Variables Assumed To Be Saved, Prev: Not My Type, Up: Working Programs
-
-Variables Assumed To Be Zero
-----------------------------
-
- Many Fortran programs were developed on systems that provided
-automatic initialization of all, or some, variables and arrays to zero.
-As a result, many of these programs depend, sometimes inadvertently, on
-this behavior, though to do so violates the Fortran standards.
-
- You can ask `g77' for this behavior by specifying the
-`-finit-local-zero' option when compiling Fortran code. (You might
-want to specify `-fno-automatic' as well, to avoid code-size inflation
-for non-optimized compilations.)
-
- Note that a program that works better when compiled with the
-`-finit-local-zero' option is almost certainly depending on a
-particular system's, or compiler's, tendency to initialize some
-variables to zero. It might be worthwhile finding such cases and
-fixing them, using techniques such as compiling with the `-O
--Wuninitialized' options using `g77'.
-
-\1f
-File: g77.info, Node: Variables Assumed To Be Saved, Next: Unwanted Variables, Prev: Variables Assumed To Be Zero, Up: Working Programs
-
-Variables Assumed To Be Saved
------------------------------
-
- Many Fortran programs were developed on systems that saved the
-values of all, or some, variables and arrays across procedure calls.
-As a result, many of these programs depend, sometimes inadvertently, on
-being able to assign a value to a variable, perform a `RETURN' to a
-calling procedure, and, upon subsequent invocation, reference the
-previously assigned variable to obtain the value.
-
- They expect this despite not using the `SAVE' statement to specify
-that the value in a variable is expected to survive procedure returns
-and calls. Depending on variables and arrays to retain values across
-procedure calls without using `SAVE' to require it violates the Fortran
-standards.
-
- You can ask `g77' to assume `SAVE' is specified for all relevant
-(local) variables and arrays by using the `-fno-automatic' option.
-
- Note that a program that works better when compiled with the
-`-fno-automatic' option is almost certainly depending on not having to
-use the `SAVE' statement as required by the Fortran standard. It might
-be worthwhile finding such cases and fixing them, using techniques such
-as compiling with the `-O -Wuninitialized' options using `g77'.
-
-\1f
-File: g77.info, Node: Unwanted Variables, Next: Unused Arguments, Prev: Variables Assumed To Be Saved, Up: Working Programs
-
-Unwanted Variables
-------------------
-
- The `-Wunused' option can find bugs involving implicit typing,
-sometimes more easily than using `-Wimplicit' in code that makes heavy
-use of implicit typing. An unused variable or array might indicate
-that the spelling for its declaration is different from that of its
-intended uses.
-
- Other than cases involving typos, unused variables rarely indicate
-actual bugs in a program. However, investigating such cases thoroughly
-has, on occasion, led to the discovery of code that had not been
-completely written--where the programmer wrote declarations as needed
-for the whole algorithm, wrote some or even most of the code for that
-algorithm, then got distracted and forgot that the job was not complete.
-
-\1f
-File: g77.info, Node: Unused Arguments, Next: Surprising Interpretations of Code, Prev: Unwanted Variables, Up: Working Programs
-
-Unused Arguments
-----------------
-
- As with unused variables, It is possible that unused arguments to a
-procedure might indicate a bug. Compile with `-W -Wunused' option to
-catch cases of unused arguments.
-
- Note that `-W' also enables warnings regarding overflow of
-floating-point constants under certain circumstances.
-
-\1f
-File: g77.info, Node: Surprising Interpretations of Code, Next: Aliasing Assumed To Work, Prev: Unused Arguments, Up: Working Programs
-
-Surprising Interpretations of Code
-----------------------------------
-
- The `-Wsuprising' option can help find bugs involving expression
-evaluation or in the way `DO' loops with non-integral iteration
-variables are handled. Cases found by this option might indicate a
-difference of interpretation between the author of the code involved,
-and a standard-conforming compiler such as `g77'. Such a difference
-might produce actual bugs.
-
- In any case, changing the code to explicitly do what the programmer
-might have expected it to do, so `g77' and other compilers are more
-likely to follow the programmer's expectations, might be worthwhile,
-especially if such changes make the program work better.
-
-\1f
-File: g77.info, Node: Aliasing Assumed To Work, Next: Output Assumed To Flush, Prev: Surprising Interpretations of Code, Up: Working Programs
-
-Aliasing Assumed To Work
-------------------------
-
- The `-falias-check', `-fargument-alias', `-fargument-noalias', and
-`-fno-argument-noalias-global' options, introduced in version 0.5.20 and
-`g77''s version 2.7.2.2.f.2 of `gcc', control the assumptions regarding
-aliasing (overlapping) of writes and reads to main memory (core) made
-by the `gcc' back end.
-
- They are effective only when compiling with `-O' (specifying any
-level other than `-O0') or with `-falias-check'.
-
- The default for Fortran code is `-fargument-noalias-global'. (The
-default for C code and code written in other C-based languages is
-`-fargument-alias'. These defaults apply regardless of whether you use
-`g77' or `gcc' to compile your code.)
-
- Note that, on some systems, compiling with `-fforce-addr' in effect
-can produce more optimal code when the default aliasing options are in
-effect (and when optimization is enabled).
-
- If your program is not working when compiled with optimization, it
-is possible it is violating the Fortran standards (77 and 90) by
-relying on the ability to "safely" modify variables and arrays that are
-aliased, via procedure calls, to other variables and arrays, without
-using `EQUIVALENCE' to explicitly set up this kind of aliasing.
-
- (The FORTRAN 77 standard's prohibition of this sort of overlap,
-generally referred to therein as "storage assocation", appears in
-Sections 15.9.3.6. This prohibition allows implementations, such as
-`g77', to, for example, implement the passing of procedures and even
-values in `COMMON' via copy operations into local, perhaps more
-efficiently accessed temporaries at entry to a procedure, and, where
-appropriate, via copy operations back out to their original locations
-in memory at exit from that procedure, without having to take into
-consideration the order in which the local copies are updated by the
-code, among other things.)
-
- To test this hypothesis, try compiling your program with the
-`-fargument-alias' option, which causes the compiler to revert to
-assumptions essentially the same as made by versions of `g77' prior to
-0.5.20.
-
- If the program works using this option, that strongly suggests that
-the bug is in your program. Finding and fixing the bug(s) should
-result in a program that is more standard-conforming and that can be
-compiled by `g77' in a way that results in a faster executable.
-
- (You might want to try compiling with `-fargument-noalias', a kind
-of half-way point, to see if the problem is limited to aliasing between
-dummy arguments and `COMMON' variables--this option assumes that such
-aliasing is not done, while still allowing aliasing among dummy
-arguments.)
-
- An example of aliasing that is invalid according to the standards is
-shown in the following program, which might *not* produce the expected
-results when executed:
-
- I = 1
- CALL FOO(I, I)
- PRINT *, I
- END
-
- SUBROUTINE FOO(J, K)
- J = J + K
- K = J * K
- PRINT *, J, K
- END
-
- The above program attempts to use the temporary aliasing of the `J'
-and `K' arguments in `FOO' to effect a pathological behavior--the
-simultaneous changing of the values of *both* `J' and `K' when either
-one of them is written.
-
- The programmer likely expects the program to print these values:
-
- 2 4
- 4
-
- However, since the program is not standard-conforming, an
-implementation's behavior when running it is undefined, because
-subroutine `FOO' modifies at least one of the arguments, and they are
-aliased with each other. (Even if one of the assignment statements was
-deleted, the program would still violate these rules. This kind of
-on-the-fly aliasing is permitted by the standard only when none of the
-aliased items are defined, or written, while the aliasing is in effect.)
-
- As a practical example, an optimizing compiler might schedule the `J
-=' part of the second line of `FOO' *after* the reading of `J' and `K'
-for the `J * K' expression, resulting in the following output:
-
- 2 2
- 2
-
- Essentially, compilers are promised (by the standard and, therefore,
-by programmers who write code they claim to be standard-conforming)
-that if they cannot detect aliasing via static analysis of a single
-program unit's `EQUIVALENCE' and `COMMON' statements, no such aliasing
-exists. In such cases, compilers are free to assume that an assignment
-to one variable will not change the value of another variable, allowing
-it to avoid generating code to re-read the value of the other variable,
-to re-schedule reads and writes, and so on, to produce a faster
-executable.
-
- The same promise holds true for arrays (as seen by the called
-procedure)--an element of one dummy array cannot be aliased with, or
-overlap, any element of another dummy array or be in a `COMMON' area
-known to the procedure.
-
- (These restrictions apply only when the procedure defines, or writes
-to, one of the aliased variables or arrays.)
-
- Unfortunately, there is no way to find *all* possible cases of
-violations of the prohibitions against aliasing in Fortran code.
-Static analysis is certainly imperfect, as is run-time analysis, since
-neither can catch all violations. (Static analysis can catch all
-likely violations, and some that might never actually happen, while
-run-time analysis can catch only those violations that actually happen
-during a particular run. Neither approach can cope with programs
-mixing Fortran code with routines written in other languages, however.)
-
- Currently, `g77' provides neither static nor run-time facilities to
-detect any cases of this problem, although other products might.
-Run-time facilities are more likely to be offered by future versions of
-`g77', though patches improving `g77' so that it provides either form
-of detection are welcome.
-
-\1f
-File: g77.info, Node: Output Assumed To Flush, Next: Large File Unit Numbers, Prev: Aliasing Assumed To Work, Up: Working Programs
-
-Output Assumed To Flush
------------------------
-
- For several versions prior to 0.5.20, `g77' configured its version
-of the `libf2c' run-time library so that one of its configuration
-macros, `ALWAYS_FLUSH', was defined.
-
- This was done as a result of a belief that many programs expected
-output to be flushed to the operating system (under UNIX, via the
-`fflush()' library call) with the result that errors, such as disk
-full, would be immediately flagged via the relevant `ERR=' and
-`IOSTAT=' mechanism.
-
- Because of the adverse effects this approach had on the performance
-of many programs, `g77' no longer configures `libf2c' to always flush
-output.
-
- If your program depends on this behavior, either insert the
-appropriate `CALL FLUSH' statements, or modify the sources to the
-`libf2c', rebuild and reinstall `g77', and relink your programs with
-the modified library.
-
- (Ideally, `libf2c' would offer the choice at run-time, so that a
-compile-time option to `g77' or `f2c' could result in generating the
-appropriate calls to flushing or non-flushing library routines.)
-
- *Note Always Flush Output::, for information on how to modify the
-`g77' source tree so that a version of `libf2c' can be built and
-installed with the `ALWAYS_FLUSH' macro defined.
-
-\1f
-File: g77.info, Node: Large File Unit Numbers, Prev: Output Assumed To Flush, Up: Working Programs
-
-Large File Unit Numbers
------------------------
-
- If your program crashes at run time with a message including the
-text `illegal unit number', that probably is a message from the
-run-time library, `libf2c', used, and distributed with, `g77'.
-
- The message means that your program has attempted to use a file unit
-number that is out of the range accepted by `libf2c'. Normally, this
-range is 0 through 99, and the high end of the range is controlled by a
-`libf2c' source-file macro named `MXUNIT'.
-
- If you can easily change your program to use unit numbers in the
-range 0 through 99, you should do so.
-
- Otherwise, see *Note Larger File Unit Numbers::, for information on
-how to change `MXUNIT' in `libf2c' so you can build and install a new
-version of `libf2c' that supports the larger unit numbers you need.
-
- *Note:* While `libf2c' places a limit on the range of Fortran
-file-unit numbers, the underlying library and operating system might
-impose different kinds of limits. For example, some systems limit the
-number of files simultaneously open by a running program. Information
-on how to increase these limits should be found in your system's
-documentation.
-
-\1f
-File: g77.info, Node: Overly Convenient Options, Next: Faster Programs, Prev: Working Programs, Up: Collected Fortran Wisdom
-
-Overly Convenient Command-line Options
-======================================
-
- These options should be used only as a quick-and-dirty way to
-determine how well your program will run under different compilation
-models without having to change the source. Some are more problematic
-than others, depending on how portable and maintainable you want the
-program to be (and, of course, whether you are allowed to change it at
-all is crucial).
-
- You should not continue to use these command-line options to compile
-a given program, but rather should make changes to the source code:
-
-`-finit-local-zero'
- (This option specifies that any uninitialized local variables and
- arrays have default initialization to binary zeros.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- It is safer (and probably would produce a faster program) to find
- the variables and arrays that need such initialization and provide
- it explicitly via `DATA', so that `-finit-local-zero' is not
- needed.
-
- Consider using `-Wuninitialized' (which requires `-O') to find
- likely candidates, but do not specify `-finit-local-zero' or
- `-fno-automatic', or this technique won't work.
-
-`-fno-automatic'
- (This option specifies that all local variables and arrays are to
- be treated as if they were named in `SAVE' statements.)
-
- Many other compilers do this automatically, which means lots of
- Fortran code developed with those compilers depends on it.
-
- The effect of this is that all non-automatic variables and arrays
- are made static, that is, not placed on the stack or in heap
- storage. This might cause a buggy program to appear to work
- better. If so, rather than relying on this command-line option
- (and hoping all compilers provide the equivalent one), add `SAVE'
- statements to some or all program unit sources, as appropriate.
- Consider using `-Wuninitialized' (which requires `-O') to find
- likely candidates, but do not specify `-finit-local-zero' or
- `-fno-automatic', or this technique won't work.
-
- The default is `-fautomatic', which tells `g77' to try and put
- variables and arrays on the stack (or in fast registers) where
- possible and reasonable. This tends to make programs faster.
-
- *Note:* Automatic variables and arrays are not affected by this
- option. These are variables and arrays that are *necessarily*
- automatic, either due to explicit statements, or due to the way
- they are declared. Examples include local variables and arrays
- not given the `SAVE' attribute in procedures declared `RECURSIVE',
- and local arrays declared with non-constant bounds (automatic
- arrays). Currently, `g77' supports only automatic arrays, not
- `RECURSIVE' procedures or other means of explicitly specifying
- that variables or arrays are automatic.
-
-`-fugly'
- Fix the source code so that `-fno-ugly' will work. Note that, for
- many programs, it is difficult to practically avoid using the
- features enabled via `-fugly-init', and these features pose the
- lowest risk of writing nonportable code, among the various "ugly"
- features.
-
-`-fGROUP-intrinsics-hide'
- Change the source code to use `EXTERNAL' for any external procedure
- that might be the name of an intrinsic. It is easy to find these
- using `-fGROUP-intrinsics-disable'.
-
-\1f
-File: g77.info, Node: Faster Programs, Prev: Overly Convenient Options, Up: Collected Fortran Wisdom
-
-Faster Programs
-===============
-
- Aside from the usual `gcc' options, such as `-O', `-ffast-math', and
-so on, consider trying some of the following approaches to speed up
-your program (once you get it working).
-
-* Menu:
-
-* Aligned Data::
-* Prefer Automatic Uninitialized Variables::
-* Avoid f2c Compatibility::
-* Use Submodel Options::
-
-\1f
-File: g77.info, Node: Aligned Data, Next: Prefer Automatic Uninitialized Variables, Up: Faster Programs
-
-Aligned Data
-------------
-
- On some systems, such as those with Pentium Pro CPUs, programs that
-make heavy use of `REAL(KIND=2)' (`DOUBLE PRECISION') might run much
-slower than possible due to the compiler not aligning these 64-bit
-values to 64-bit boundaries in memory. (The effect also is present,
-though to a lesser extent, on the 586 (Pentium) architecture.)
-
- The Intel x86 architecture generally ensures that these programs will
-work on all its implementations, but particular implementations (such
-as Pentium Pro) perform better with more strict alignment. (Such
-behavior isn't unique to the Intel x86 architecture.) Other
-architectures might *demand* 64-bit alignment of 64-bit data.
-
- There are a variety of approaches to use to address this problem:
-
- * Order your `COMMON' and `EQUIVALENCE' areas such that the
- variables and arrays with the widest alignment guidelines come
- first.
-
- For example, on most systems, this would mean placing
- `COMPLEX(KIND=2)', `REAL(KIND=2)', and `INTEGER(KIND=2)' entities
- first, followed by `REAL(KIND=1)', `INTEGER(KIND=1)', and
- `LOGICAL(KIND=1)' entities, then `INTEGER(KIND=6)' entities, and
- finally `CHARACTER' and `INTEGER(KIND=3)' entities.
-
- The reason to use such placement is it makes it more likely that
- your data will be aligned properly, without requiring you to do
- detailed analysis of each aggregate (`COMMON' and `EQUIVALENCE')
- area.
-
- Specifically, on systems where the above guidelines are
- appropriate, placing `CHARACTER' entities before `REAL(KIND=2)'
- entities can work just as well, but only if the number of bytes
- occupied by the `CHARACTER' entities is divisible by the
- recommended alignment for `REAL(KIND=2)'.
-
- By ordering the placement of entities in aggregate areas according
- to the simple guidelines above, you avoid having to carefully
- count the number of bytes occupied by each entity to determine
- whether the actual alignment of each subsequent entity meets the
- alignment guidelines for the type of that entity.
-
- If you don't ensure correct alignment of `COMMON' elements, the
- compiler may be forced by some systems to violate the Fortran
- semantics by adding padding to get `DOUBLE PRECISION' data
- properly aligned. If the unfortunate practice is employed of
- overlaying different types of data in the `COMMON' block, the
- different variants of this block may become misaligned with
- respect to each other. Even if your platform doesn't require
- strict alignment, `COMMON' should be laid out as above for
- portability. (Unfortunately the FORTRAN 77 standard didn't
- anticipate this possible requirement, which is
- compiler-independent on a given platform.)
-
- * Use the (x86-specific) `-malign-double' option when compiling
- programs for the Pentium and Pentium Pro architectures (called 586
- and 686 in the `gcc' configuration subsystem). The warning about
- this in the `gcc' manual isn't generally relevant to Fortran, but
- using it will force `COMMON' to be padded if necessary to align
- `DOUBLE PRECISION' data.
-
- * Ensure that `crt0.o' or `crt1.o' on your system guarantees a 64-bit
- aligned stack for `main()'. The recent one from GNU (`glibc2')
- will do this on x86 systems, but we don't know of any other x86
- setups where it will be right. Read your system's documentation
- to determine if it is appropriate to upgrade to a more recent
- version to obtain the optimal alignment.
-
- Progress is being made on making this work "out of the box" on
-future versions of `g77', `gcc', and some of the relevant operating
-systems (such as GNU/Linux).
-
-\1f
-File: g77.info, Node: Prefer Automatic Uninitialized Variables, Next: Avoid f2c Compatibility, Prev: Aligned Data, Up: Faster Programs
-
-Prefer Automatic Uninitialized Variables
-----------------------------------------
-
- If you're using `-fno-automatic' already, you probably should change
-your code to allow compilation with `-fautomatic' (the default), to
-allow the program to run faster.
-
- Similarly, you should be able to use `-fno-init-local-zero' (the
-default) instead of `-finit-local-zero'. This is because it is rare
-that every variable affected by these options in a given program
-actually needs to be so affected.
-
- For example, `-fno-automatic', which effectively `SAVE's every local
-non-automatic variable and array, affects even things like `DO'
-iteration variables, which rarely need to be `SAVE'd, and this often
-reduces run-time performances. Similarly, `-fno-init-local-zero'
-forces such variables to be initialized to zero--when `SAVE'd (such as
-when `-fno-automatic'), this by itself generally affects only startup
-time for a program, but when not `SAVE'd, it can slow down the
-procedure every time it is called.
-
- *Note Overly Convenient Command-Line Options: Overly Convenient
-Options, for information on the `-fno-automatic' and
-`-finit-local-zero' options and how to convert their use into selective
-changes in your own code.
-
-\1f
-File: g77.info, Node: Avoid f2c Compatibility, Next: Use Submodel Options, Prev: Prefer Automatic Uninitialized Variables, Up: Faster Programs
-
-Avoid f2c Compatibility
------------------------
-
- If you aren't linking with any code compiled using `f2c', try using
-the `-fno-f2c' option when compiling *all* the code in your program.
-(Note that `libf2c' is *not* an example of code that is compiled using
-`f2c'--it is compiled by a C compiler, typically `gcc'.)
-
-\1f
-File: g77.info, Node: Use Submodel Options, Prev: Avoid f2c Compatibility, Up: Faster Programs
-
-Use Submodel Options
---------------------
-
- Using an appropriate `-m' option to generate specific code for your
-CPU may be worthwhile, though it may mean the executable won't run on
-other versions of the CPU that don't support the same instruction set.
-*Note Hardware Models and Configurations: (gcc)Submodel Options.
-
- For recent CPUs that don't have explicit support in the released
-version of `gcc', it may still be possible to get improvements. For
-instance, the flags recommended for 586/686 (Pentium(Pro)) chips for
-building the Linux kernel are:
-
- -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
- -fomit-frame-pointer
-
-`-fomit-frame-pointer' will, however, inhibit debugging on x86 systems.
-
-\1f
-File: g77.info, Node: Trouble, Next: Open Questions, Prev: Collected Fortran Wisdom, Up: Top
-
-Known Causes of Trouble with GNU Fortran
-****************************************
-
- This section describes known problems that affect users of GNU
-Fortran. Most of these are not GNU Fortran bugs per se--if they were,
-we would fix them. But the result for a user might be like the result
-of a bug.
-
- Some of these problems are due to bugs in other software, some are
-missing features that are too much work to add, and some are places
-where people's opinions differ as to what is best.
-
- Information on bugs that show up when configuring, porting, building,
-or installing `g77' is not provided here. *Note Problems Installing::.
-
- To find out about major bugs discovered in the current release and
-possible workarounds for them, retrieve
-`ftp://alpha.gnu.ai.mit.edu/g77.plan'.
-
- (Note that some of this portion of the manual is lifted directly
-from the `gcc' manual, with minor modifications to tailor it to users
-of `g77'. Anytime a bug seems to have more to do with the `gcc'
-portion of `g77', *Note Known Causes of Trouble with GNU CC:
-(gcc)Trouble.)
-
-* Menu:
-
-* But-bugs:: Bugs really in other programs or elsewhere.
-* Actual Bugs:: Bugs and misfeatures we will fix later.
-* Missing Features:: Features we already know we want to add later.
-* Disappointments:: Regrettable things we can't change.
-* Non-bugs:: Things we think are right, but some others disagree.
-* Warnings and Errors:: Which problems in your code get warnings,
- and which get errors.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: But-bugs, Next: Actual Bugs, Up: Trouble
-
-Bugs Not In GNU Fortran
-=======================
-
- These are bugs to which the maintainers often have to reply, "but
-that isn't a bug in `g77'...". Some of these already are fixed in new
-versions of other software; some still need to be fixed; some are
-problems with how `g77' is installed or is being used; some are the
-result of bad hardware that causes software to misbehave in sometimes
-bizarre ways; some just cannot be addressed at this time until more is
-known about the problem.
-
- Please don't re-report these bugs to the `g77' maintainers--if you
-must remind someone how important it is to you that the problem be
-fixed, talk to the people responsible for the other products identified
-below, but preferably only after you've tried the latest versions of
-those products. The `g77' maintainers have their hands full working on
-just fixing and improving `g77', without serving as a clearinghouse for
-all bugs that happen to affect `g77' users.
-
- *Note Collected Fortran Wisdom::, for information on behavior of
-Fortran programs, and the programs that compile them, that might be
-*thought* to indicate bugs.
-
-* Menu:
-
-* Signal 11 and Friends:: Strange behavior by any software.
-* Cannot Link Fortran Programs:: Unresolved references.
-* Large Common Blocks:: Problems on older GNU/Linux systems.
-* Debugger Problems:: When the debugger crashes.
-* NeXTStep Problems:: Misbehaving executables.
-* Stack Overflow:: More misbehaving executables.
-* Nothing Happens:: Less behaving executables.
-* Strange Behavior at Run Time:: Executables misbehaving due to
- bugs in your program.
-* Floating-point Errors:: The results look wrong, but....
-
-\1f
-File: g77.info, Node: Signal 11 and Friends, Next: Cannot Link Fortran Programs, Up: But-bugs
-
-Signal 11 and Friends
----------------------
-
- A whole variety of strange behaviors can occur when the software, or
-the way you are using the software, stresses the hardware in a way that
-triggers hardware bugs. This might seem hard to believe, but it
-happens frequently enough that there exist documents explaining in
-detail what the various causes of the problems are, what typical
-symptoms look like, and so on.
-
- Generally these problems are referred to in this document as "signal
-11" crashes, because the Linux kernel, running on the most popular
-hardware (the Intel x86 line), often stresses the hardware more than
-other popular operating systems. When hardware problems do occur under
-GNU/Linux on x86 systems, these often manifest themselves as "signal 11"
-problems, as illustrated by the following diagnostic:
-
- sh# g77 myprog.f
- gcc: Internal compiler error: program f771 got fatal signal 11
- sh#
-
- It is *very* important to remember that the above message is *not*
-the only one that indicates a hardware problem, nor does it always
-indicate a hardware problem.
-
- In particular, on systems other than those running the Linux kernel,
-the message might appear somewhat or very different, as it will if the
-error manifests itself while running a program other than the `g77'
-compiler. For example, it will appear somewhat different when running
-your program, when running Emacs, and so on.
-
- How to cope with such problems is well beyond the scope of this
-manual.
-
- However, users of Linux-based systems (such as GNU/Linux) should
-review `http://www.bitwizard.nl/sig11', a source of detailed
-information on diagnosing hardware problems, by recognizing their
-common symptoms.
-
- Users of other operating systems and hardware might find this
-reference useful as well. If you know of similar material for another
-hardware/software combination, please let us know so we can consider
-including a reference to it in future versions of this manual.
-
-\1f
-File: g77.info, Node: Cannot Link Fortran Programs, Next: Large Common Blocks, Prev: Signal 11 and Friends, Up: But-bugs
-
-Cannot Link Fortran Programs
-----------------------------
-
- On some systems, perhaps just those with out-of-date (shared?)
-libraries, unresolved-reference errors happen when linking
-`g77'-compiled programs (which should be done using `g77').
-
- If this happens to you, try appending `-lc' to the command you use
-to link the program, e.g. `g77 foo.f -lc'. `g77' already specifies
-`-lf2c -lm' when it calls the linker, but it cannot also specify `-lc'
-because not all systems have a file named `libc.a'.
-
- It is unclear at this point whether there are legitimately installed
-systems where `-lf2c -lm' is insufficient to resolve code produced by
-`g77'.
-
- If your program doesn't link due to unresolved references to names
-like `_main', make sure you're using the `g77' command to do the link,
-since this command ensures that the necessary libraries are loaded by
-specifying `-lf2c -lm' when it invokes the `gcc' command to do the
-actual link. (Use the `-v' option to discover more about what actually
-happens when you use the `g77' and `gcc' commands.)
-
- Also, try specifying `-lc' as the last item on the `g77' command
-line, in case that helps.
-
-\1f
-File: g77.info, Node: Large Common Blocks, Next: Debugger Problems, Prev: Cannot Link Fortran Programs, Up: But-bugs
-
-Large Common Blocks
--------------------
-
- On some older GNU/Linux systems, programs with common blocks larger
-than 16MB cannot be linked without some kind of error message being
-produced.
-
- This is a bug in older versions of `ld', fixed in more recent
-versions of `binutils', such as version 2.6.
-
-\1f
-File: g77.info, Node: Debugger Problems, Next: NeXTStep Problems, Prev: Large Common Blocks, Up: But-bugs
-
-Debugger Problems
------------------
-
- There are some known problems when using `gdb' on code compiled by
-`g77'. Inadequate investigation as of the release of 0.5.16 results in
-not knowing which products are the culprit, but `gdb-4.14' definitely
-crashes when, for example, an attempt is made to print the contents of
-a `COMPLEX(KIND=2)' dummy array, on at least some GNU/Linux machines,
-plus some others.
-
-\1f
-File: g77.info, Node: NeXTStep Problems, Next: Stack Overflow, Prev: Debugger Problems, Up: But-bugs
-
-NeXTStep Problems
------------------
-
- Developers of Fortran code on NeXTStep (all architectures) have to
-watch out for the following problem when writing programs with large,
-statically allocated (i.e. non-stack based) data structures (common
-blocks, saved arrays).
-
- Due to the way the native loader (`/bin/ld') lays out data
-structures in virtual memory, it is very easy to create an executable
-wherein the `__DATA' segment overlaps (has addresses in common) with
-the `UNIX STACK' segment.
-
- This leads to all sorts of trouble, from the executable simply not
-executing, to bus errors. The NeXTStep command line tool `ebadexec'
-points to the problem as follows:
-
- % /bin/ebadexec a.out
- /bin/ebadexec: __LINKEDIT segment (truncated address = 0x3de000
- rounded size = 0x2a000) of executable file: a.out overlaps with UNIX
- STACK segment (truncated address = 0x400000 rounded size =
- 0x3c00000) of executable file: a.out
-
- (In the above case, it is the `__LINKEDIT' segment that overlaps the
-stack segment.)
-
- This can be cured by assigning the `__DATA' segment (virtual)
-addresses beyond the stack segment. A conservative estimate for this
-is from address 6000000 (hexadecimal) onwards--this has always worked
-for me [Toon Moene]:
-
- % g77 -segaddr __DATA 6000000 test.f
- % ebadexec a.out
- ebadexec: file: a.out appears to be executable
- %
-
- Browsing through `gcc/f/Makefile.in', you will find that the `f771'
-program itself also has to be linked with these flags--it has large
-statically allocated data structures. (Version 0.5.18 reduces this
-somewhat, but probably not enough.)
-
- (The above item was contributed by Toon Moene
-(<toon@moene.indiv.nluug.nl>).)
-
-\1f
-File: g77.info, Node: Stack Overflow, Next: Nothing Happens, Prev: NeXTStep Problems, Up: But-bugs
-
-Stack Overflow
---------------
-
- `g77' code might fail at runtime (probably with a "segmentation
-violation") due to overflowing the stack. This happens most often on
-systems with an environment that provides substantially more heap space
-(for use when arbitrarily allocating and freeing memory) than stack
-space.
-
- Often this can be cured by increasing or removing your shell's limit
-on stack usage, typically using `limit stacksize' (in `csh' and
-derivatives) or `ulimit -s' (in `sh' and derivatives).
-
- Increasing the allowed stack size might, however, require changing
-some operating system or system configuration parameters.
-
- You might be able to work around the problem by compiling with the
-`-fno-automatic' option to reduce stack usage, probably at the expense
-of speed.
-
- *Note Maximum Stackable Size::, for information on patching `g77' to
-use different criteria for placing local non-automatic variables and
-arrays on the stack.
-
- However, if your program uses large automatic arrays (for example,
-has declarations like `REAL A(N)' where `A' is a local array and `N' is
-a dummy or `COMMON' variable that can have a large value), neither use
-of `-fno-automatic', nor changing the cut-off point for `g77' for using
-the stack, will solve the problem by changing the placement of these
-large arrays, as they are *necessarily* automatic.
-
- `g77' currently provides no means to specify that automatic arrays
-are to be allocated on the heap instead of the stack. So, other than
-increasing the stack size, your best bet is to change your source code
-to avoid large automatic arrays. Methods for doing this currently are
-outside the scope of this document.
-
- (*Note:* If your system puts stack and heap space in the same memory
-area, such that they are effectively combined, then a stack overflow
-probably indicates a program that is either simply too large for the
-system, or buggy.)
-
-\1f
-File: g77.info, Node: Nothing Happens, Next: Strange Behavior at Run Time, Prev: Stack Overflow, Up: But-bugs
-
-Nothing Happens
----------------
-
- It is occasionally reported that a "simple" program, such as a
-"Hello, World!" program, does nothing when it is run, even though the
-compiler reported no errors, despite the program containing nothing
-other than a simple `PRINT' statement.
-
- This most often happens because the program has been compiled and
-linked on a UNIX system and named `test', though other names can lead
-to similarly unexpected run-time behavior on various systems.
-
- Essentially this problem boils down to giving your program a name
-that is already known to the shell you are using to identify some other
-program, which the shell continues to execute instead of your program
-when you invoke it via, for example:
-
- sh# test
- sh#
-
- Under UNIX and many other system, a simple command name invokes a
-searching mechanism that might well not choose the program located in
-the current working directory if there is another alternative (such as
-the `test' command commonly installed on UNIX systems).
-
- The reliable way to invoke a program you just linked in the current
-directory under UNIX is to specify it using an explicit pathname, as in:
-
- sh# ./test
- Hello, World!
- sh#
-
- Users who encounter this problem should take the time to read up on
-how their shell searches for commands, how to set their search path,
-and so on. The relevant UNIX commands to learn about include `man',
-`info' (on GNU systems), `setenv' (or `set' and `env'), `which', and
-`find'.
-
-\1f
-File: g77.info, Node: Strange Behavior at Run Time, Next: Floating-point Errors, Prev: Nothing Happens, Up: But-bugs
-
-Strange Behavior at Run Time
-----------------------------
-
- `g77' code might fail at runtime with "segmentation violation", "bus
-error", or even something as subtle as a procedure call overwriting a
-variable or array element that it is not supposed to touch.
-
- These can be symptoms of a wide variety of actual bugs that occurred
-earlier during the program's run, but manifested themselves as
-*visible* problems some time later.
-
- Overflowing the bounds of an array--usually by writing beyond the
-end of it--is one of two kinds of bug that often occurs in Fortran code.
-
- The other kind of bug is a mismatch between the actual arguments
-passed to a procedure and the dummy arguments as declared by that
-procedure.
-
- Both of these kinds of bugs, and some others as well, can be
-difficult to track down, because the bug can change its behavior, or
-even appear to not occur, when using a debugger.
-
- That is, these bugs can be quite sensitive to data, including data
-representing the placement of other data in memory (that is, pointers,
-such as the placement of stack frames in memory).
-
- Plans call for improving `g77' so that it can offer the ability to
-catch and report some of these problems at compile, link, or run time,
-such as by generating code to detect references to beyond the bounds of
-an array, or checking for agreement between calling and called
-procedures.
-
- In the meantime, finding and fixing the programming bugs that lead
-to these behaviors is, ultimately, the user's responsibility, as
-difficult as that task can sometimes be.
-
- One runtime problem that has been observed might have a simple
-solution. If a formatted `WRITE' produces an endless stream of spaces,
-check that your program is linked against the correct version of the C
-library. The configuration process takes care to account for your
-system's normal `libc' not being ANSI-standard, which will otherwise
-cause this behaviour. If your system's default library is
-ANSI-standard and you subsequently link against a non-ANSI one, there
-might be problems such as this one.
-
- Specifically, on Solaris2 systems, avoid picking up the `BSD'
-library from `/usr/ucblib'.
-
-\1f
-File: g77.info, Node: Floating-point Errors, Prev: Strange Behavior at Run Time, Up: But-bugs
-
-Floating-point Errors
----------------------
-
- Some programs appear to produce inconsistent floating-point results
-compiled by `g77' versus by other compilers.
-
- Often the reason for this behavior is the fact that floating-point
-values are represented on almost all Fortran systems by
-*approximations*, and these approximations are inexact even for
-apparently simple values like 0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9,
-1.1, and so on. Most Fortran systems, including all current ports of
-`g77', use binary arithmetic to represent these approximations.
-
- Therefore, the exact value of any floating-point approximation as
-manipulated by `g77'-compiled code is representable by adding some
-combination of the values 1.0, 0.5, 0.25, 0.125, and so on (just keep
-dividing by two) through the precision of the fraction (typically
-around 23 bits for `REAL(KIND=1)', 52 for `REAL(KIND=2)'), then
-multiplying the sum by a integral power of two (in Fortran, by `2**N')
-that typically is between -127 and +128 for `REAL(KIND=1)' and -1023
-and +1024 for `REAL(KIND=2)', then multiplying by -1 if the number is
-negative.
-
- So, a value like 0.2 is exactly represented in decimal--since it is
-a fraction, `2/10', with a denomenator that is compatible with the base
-of the number system (base 10). However, `2/10' cannot be represented
-by any finite number of sums of any of 1.0, 0.5, 0.25, and so on, so
-0.2 cannot be exactly represented in binary notation.
-
- (On the other hand, decimal notation can represent any binary number
-in a finite number of digits. Decimal notation cannot do so with
-ternary, or base-3, notation, which would represent floating-point
-numbers as sums of any of `1/1', `1/3', `1/9', and so on. After all,
-no finite number of decimal digits can exactly represent `1/3'.
-Fortunately, few systems use ternary notation.)
-
- Moreover, differences in the way run-time I/O libraries convert
-between these approximations and the decimal representation often used
-by programmers and the programs they write can result in apparent
-differences between results that do not actually exist, or exist to
-such a small degree that they usually are not worth worrying about.
-
- For example, consider the following program:
-
- PRINT *, 0.2
- END
-
- When compiled by `g77', the above program might output `0.20000003',
-while another compiler might produce a executable that outputs `0.2'.
-
- This particular difference is due to the fact that, currently,
-conversion of floating-point values by the `libf2c' library, used by
-`g77', handles only double-precision values.
-
- Since `0.2' in the program is a single-precision value, it is
-converted to double precision (still in binary notation) before being
-converted back to decimal. The conversion to binary appends _binary_
-zero digits to the original value--which, again, is an inexact
-approximation of 0.2--resulting in an approximation that is much less
-exact than is connoted by the use of double precision.
-
- (The appending of binary zero digits has essentially the same effect
-as taking a particular decimal approximation of `1/3', such as
-`0.3333333', and appending decimal zeros to it, producing
-`0.33333330000000000'. Treating the resulting decimal approximation as
-if it really had 18 or so digits of valid precision would make it seem
-a very poor approximation of `1/3'.)
-
- As a result of converting the single-precision approximation to
-double precision by appending binary zeros, the conversion of the
-resulting double-precision value to decimal produces what looks like an
-incorrect result, when in fact the result is *inexact*, and is probably
-no less inaccurate or imprecise an approximation of 0.2 than is
-produced by other compilers that happen to output the converted value
-as "exactly" `0.2'. (Some compilers behave in a way that can make them
-appear to retain more accuracy across a conversion of a single-precision
-constant to double precision. *Note Context-Sensitive Constants::, to
-see why this practice is illusory and even dangerous.)
-
- Note that a more exact approximation of the constant is computed
-when the program is changed to specify a double-precision constant:
-
- PRINT *, 0.2D0
- END
-
- Future versions of `g77' and/or `libf2c' might convert
-single-precision values directly to decimal, instead of converting them
-to double precision first. This would tend to result in output that is
-more consistent with that produced by some other Fortran
-implementations.
-
-\1f
-File: g77.info, Node: Actual Bugs, Next: Missing Features, Prev: But-bugs, Up: Trouble
-
-Actual Bugs We Haven't Fixed Yet
-================================
-
- This section identifies bugs that `g77' *users* might run into.
-This includes bugs that are actually in the `gcc' back end (GBE) or in
-`libf2c', because those sets of code are at least somewhat under the
-control of (and necessarily intertwined with) `g77', so it isn't worth
-separating them out.
-
- For information on bugs that might afflict people who configure,
-port, build, and install `g77', *Note Problems Installing::.
-
- * `g77''s version of `gcc', and probably `g77' itself, cannot be
- reliably used with the `-O2' option (or higher) on Digital
- Semiconductor Alpha AXP machines. The problem is most immediately
- noticed in differences discovered by `make compare' following a
- bootstrap build using `-O2'. It also manifests itself as a
- failure to compile `DATA' statements such as `DATA R/7./'
- correctly; in this case, `R' might be initialized to `4.0'.
-
- Until this bug is fixed, use only `-O1' or no optimization.
-
- * A code-generation bug afflicts Intel x86 targets when `-O2' is
- specified compiling, for example, an old version of the `DNRM2'
- routine. The x87 coprocessor stack is being somewhat mismanaged
- in cases where assigned `GOTO' and `ASSIGN' are involved.
-
- Version 0.5.21 of `g77' contains an initial effort to fix the
- problem, but this effort is incomplete, and a more complete fix is
- planned for the next release.
-
- * Work is needed on the `SIGNAL()' intrinsic to ensure that pointers
- and integers are properly handled on all targets, including 64-bit
- machines.
-
- * When using `-fugly-comma', `g77' assumes an extra `%VAL(0)'
- argument is to be passed to intrinsics taking no arguments, such
- as `IARGC()', which in turn reject such a call. Although this has
- been worked around for 0.5.18 due to changes in the handling of
- intrinsics, `g77' needs to do the ugly-argument-appending trick
- only for external-function invocation, as this would probably be
- more consistent with compilers that default to using that trick.
-
- * Something about `g77''s straightforward handling of label
- references and definitions sometimes prevents the GBE from
- unrolling loops. Until this is solved, try inserting or removing
- `CONTINUE' statements as the terminal statement, using the `END DO'
- form instead, and so on. (Probably improved, but not wholly
- fixed, in 0.5.21.)
-
- * The `g77' command itself should more faithfully process options
- the way the `gcc' command does. For example, `gcc' accepts
- abbreviated forms of long options, `g77' generally doesn't.
-
- * Some confusion in diagnostics concerning failing `INCLUDE'
- statements from within `INCLUDE''d or `#include''d files.
-
- * `g77' assumes that `INTEGER(KIND=1)' constants range from `-2**31'
- to `2**31-1' (the range for two's-complement 32-bit values),
- instead of determining their range from the actual range of the
- type for the configuration (and, someday, for the constant).
-
- Further, it generally doesn't implement the handling of constants
- very well in that it makes assumptions about the configuration
- that it no longer makes regarding variables (types).
-
- Included with this item is the fact that `g77' doesn't recognize
- that, on IEEE-754/854-compliant systems, `0./0.' should produce a
- NaN and no warning instead of the value `0.' and a warning. This
- is to be fixed in version 0.6, when `g77' will use the `gcc' back
- end's constant-handling mechanisms to replace its own.
-
- * `g77' uses way too much memory and CPU time to process large
- aggregate areas having any initialized elements.
-
- For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up
- way too much time and space, including the size of the generated
- assembler file. This is to be mitigated somewhat in version 0.6.
-
- Version 0.5.18 improves cases like this--specifically, cases of
- *sparse* initialization that leave large, contiguous areas
- uninitialized--significantly. However, even with the
- improvements, these cases still require too much memory and CPU
- time.
-
- (Version 0.5.18 also improves cases where the initial values are
- zero to a much greater degree, so if the above example ends with
- `DATA A(1)/0/', the compile-time performance will be about as good
- as it will ever get, aside from unrelated improvements to the
- compiler.)
-
- Note that `g77' does display a warning message to notify the user
- before the compiler appears to hang. *Note Initialization of
- Large Aggregate Areas: Large Initialization, for information on
- how to change the point at which `g77' decides to issue this
- warning.
-
- * `g77' doesn't emit variable and array members of common blocks for
- use with a debugger (the `-g' command-line option). The code is
- present to do this, but doesn't work with at least one debug
- format--perhaps it works with others. And it turns out there's a
- similar bug for local equivalence areas, so that has been disabled
- as well.
-
- As of Version 0.5.19, a temporary kludge solution is provided
- whereby some rudimentary information on a member is written as a
- string that is the member's value as a character string.
-
- *Note Options for Code Generation Conventions: Code Gen Options,
- for information on the `-fdebug-kludge' option.
-
- * When debugging, after starting up the debugger but before being
- able to see the source code for the main program unit, the user
- must currently set a breakpoint at `MAIN__' (or `MAIN___' or
- `MAIN_' if `MAIN__' doesn't exist) and run the program until it
- hits the breakpoint. At that point, the main program unit is
- activated and about to execute its first executable statement, but
- that's the state in which the debugger should start up, as is the
- case for languages like C.
-
- * Debugging `g77'-compiled code using debuggers other than `gdb' is
- likely not to work.
-
- Getting `g77' and `gdb' to work together is a known
- problem--getting `g77' to work properly with other debuggers, for
- which source code often is unavailable to `g77' developers, seems
- like a much larger, unknown problem, and is a lower priority than
- making `g77' and `gdb' work together properly.
-
- On the other hand, information about problems other debuggers have
- with `g77' output might make it easier to properly fix `g77', and
- perhaps even improve `gdb', so it is definitely welcome. Such
- information might even lead to all relevant products working
- together properly sooner.
-
- * `g77' currently inserts needless padding for things like `COMMON
- A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)'
- on machines like x86, because the back end insists that `IPAD' be
- aligned to a 4-byte boundary, but the processor has no such
- requirement (though it's good for performance).
-
- It is possible that this is not a real bug, and could be considered
- a performance feature, but it might be important to provide the
- ability to Fortran code to specify minimum padding for aggregate
- areas such as common blocks--and, certainly, there is the
- potential, with the current setup, for interface differences in
- the way such areas are laid out between `g77' and other compilers.
-
- * Some crashes occur when compiling under Solaris on x86 machines.
-
- Nothing has been heard about any such problems for some time, so
- this is considering a closed item as of 0.5.20. Please submit any
- bug reports pertinent to `g77''s support for Solaris/x86 systems.
-
- * RS/6000 support is not complete as of the gcc 2.6.3 back end. The
- 2.7.0 back end appears to fix this problem, or at least mitigate
- it significantly, but there is at least one known problem that is
- likely to be a code-generation bug in `gcc-2.7.0' plus
- `g77-0.5.16'. This problem shows up only when compiling the
- Fortran program with `-O'.
-
- Nothing has been heard about any RS/6000 problems for some time,
- so this is considering a closed item as of 0.5.20. Please submit
- any bug reports pertinent to `g77''s support for RS/6000 systems.
-
- * SGI support is known to be a bit buggy. The known problem shows
- up only when compiling the Fortran program with `-O'.
-
- It is possible these problems have all been fixed in 0.5.20 by
- emulating complex arithmetic in the front end. Please submit any
- bug reports pertinent to `g77''s support for SGI systems.
-
- * `g77' doesn't work perfectly on 64-bit configurations such as the
- Alpha. This problem is expected to be largely resolved as of
- version 0.5.20, and further addressed by 0.5.21. Version 0.6
- should solve most or all related problems (such as 64-bit machines
- other than Digital Semiconductor ("DEC") Alphas).
-
- One known bug that causes a compile-time crash occurs when
- compiling code such as the following with optimization:
-
- SUBROUTINE CRASH (TEMP)
- INTEGER*2 HALF(2)
- REAL TEMP
- HALF(1) = NINT (TEMP)
- END
-
- It is expected that a future version of `g77' will have a fix for
- this problem, almost certainly by the time `g77' supports the
- forthcoming version 2.8.0 of `gcc'.
-
- * Maintainers of gcc report that the back end definitely has "broken"
- support for `COMPLEX' types. Based on their input, it seems many
- of the problems affect only the more-general facilities for gcc's
- `__complex__' type, such as `__complex__ int' (where the real and
- imaginary parts are integers) that GNU Fortran does not use.
-
- Version 0.5.20 of `g77' works around this problem by not using the
- back end's support for `COMPLEX'. The new option
- `-fno-emulate-complex' avoids the work-around, reverting to using
- the same "broken" mechanism as that used by versions of `g77'
- prior to 0.5.20.
-
- * There seem to be some problems with passing constants, and perhaps
- general expressions (other than simple variables/arrays), to
- procedures when compiling on some systems (such as i386) with
- `-fPIC', as in when compiling for ELF targets. The symptom is
- that the assembler complains about invalid opcodes. More
- investigation is needed, but the problem is almost certainly in
- the gcc back end, and it apparently occurs only when compiling
- sufficiently complicated functions *without* the `-O' option.
-
-\1f
-File: g77.info, Node: Missing Features, Next: Disappointments, Prev: Actual Bugs, Up: Trouble
-
-Missing Features
-================
-
- This section lists features we know are missing from `g77', and
-which we want to add someday. (There is no priority implied in the
-ordering below.)
-
-* Menu:
-
-GNU Fortran language:
-* Better Source Model::
-* Fortran 90 Support::
-* Intrinsics in PARAMETER Statements::
-* SELECT CASE on CHARACTER Type::
-* RECURSIVE Keyword::
-* Popular Non-standard Types::
-* Full Support for Compiler Types::
-* Array Bounds Expressions::
-* POINTER Statements::
-* Sensible Non-standard Constructs::
-* FLUSH Statement::
-* Expressions in FORMAT Statements::
-* Explicit Assembler Code::
-* Q Edit Descriptor::
-
-GNU Fortran dialects:
-* Old-style PARAMETER Statements::
-* TYPE and ACCEPT I/O Statements::
-* STRUCTURE UNION RECORD MAP::
-* OPEN CLOSE and INQUIRE Keywords::
-* ENCODE and DECODE::
-* Suppressing Space Padding::
-* Fortran Preprocessor::
-* Bit Operations on Floating-point Data::
-
-New facilities:
-* POSIX Standard::
-* Floating-point Exception Handling::
-* Nonportable Conversions::
-* Large Automatic Arrays::
-* Support for Threads::
-* Increasing Precision/Range::
-
-Better diagnostics:
-* Gracefully Handle Sensible Bad Code::
-* Non-standard Conversions::
-* Non-standard Intrinsics::
-* Modifying DO Variable::
-* Better Pedantic Compilation::
-* Warn About Implicit Conversions::
-* Invalid Use of Hollerith Constant::
-* Dummy Array Without Dimensioning Dummy::
-* Invalid FORMAT Specifiers::
-* Ambiguous Dialects::
-* Unused Labels::
-* Informational Messages::
-
-Run-time facilities:
-* Uninitialized Variables at Run Time::
-* Bounds Checking at Run Time::
-
-Debugging:
-* Labels Visible to Debugger::
-
-\1f
-File: g77.info, Node: Better Source Model, Next: Fortran 90 Support, Up: Missing Features
-
-Better Source Model
--------------------
-
- `g77' needs to provide, as the default source-line model, a "pure
-visual" mode, where the interpretation of a source program in this mode
-can be accurately determined by a user looking at a traditionally
-displayed rendition of the program (assuming the user knows whether the
-program is fixed or free form).
-
- The design should assume the user cannot tell tabs from spaces and
-cannot see trailing spaces on lines, but has canonical tab stops and,
-for fixed-form source, has the ability to always know exactly where
-column 72 is (since the Fortran standard itself requires this for
-fixed-form source).
-
- This would change the default treatment of fixed-form source to not
-treat lines with tabs as if they were infinitely long--instead, they
-would end at column 72 just as if the tabs were replaced by spaces in
-the canonical way.
-
- As part of this, provide common alternate models (Digital, `f2c',
-and so on) via command-line options. This includes allowing
-arbitrarily long lines for free-form source as well as fixed-form
-source and providing various limits and diagnostics as appropriate.
-
- Also, `g77' should offer, perhaps even default to, warnings when
-characters beyond the last valid column are anything other than spaces.
-This would mean code with "sequence numbers" in columns 73 through 80
-would be rejected, and there's a lot of that kind of code around, but
-one of the most frequent bugs encountered by new users is accidentally
-writing fixed-form source code into and beyond column 73. So, maybe
-the users of old code would be able to more easily handle having to
-specify, say, a `-Wno-col73to80' option.
-
-\1f
-File: g77.info, Node: Fortran 90 Support, Next: Intrinsics in PARAMETER Statements, Prev: Better Source Model, Up: Missing Features
-
-Fortran 90 Support
-------------------
-
- `g77' does not support many of the features that distinguish Fortran
-90 (and, now, Fortran 95) from ANSI FORTRAN 77.
-
- Some Fortran 90 features are supported, because they make sense to
-offer even to die-hard users of F77. For example, many of them codify
-various ways F77 has been extended to meet users' needs during its
-tenure, so `g77' might as well offer them as the primary way to meet
-those same needs, even if it offers compatibility with one or more of
-the ways those needs were met by other F77 compilers in the industry.
-
- Still, many important F90 features are not supported, because no
-attempt has been made to research each and every feature and assess its
-viability in `g77'. In the meantime, users who need those features must
-use Fortran 90 compilers anyway, and the best approach to adding some
-F90 features to GNU Fortran might well be to fund a comprehensive
-project to create GNU Fortran 95.
-
-\1f
-File: g77.info, Node: Intrinsics in PARAMETER Statements, Next: SELECT CASE on CHARACTER Type, Prev: Fortran 90 Support, Up: Missing Features
-
-Intrinsics in `PARAMETER' Statements
-------------------------------------
-
- `g77' doesn't allow intrinsics in `PARAMETER' statements. This
-feature is considered to be absolutely vital, even though it is not
-standard-conforming, and is scheduled for version 0.6.
-
- Related to this, `g77' doesn't allow non-integral exponentiation in
-`PARAMETER' statements, such as `PARAMETER (R=2**.25)'. It is unlikely
-`g77' will ever support this feature, as doing it properly requires
-complete emulation of a target computer's floating-point facilities when
-building `g77' as a cross-compiler. But, if the `gcc' back end is
-enhanced to provide such a facility, `g77' will likely use that facility
-in implementing this feature soon afterwards.
-
-\1f
-File: g77.info, Node: SELECT CASE on CHARACTER Type, Next: RECURSIVE Keyword, Prev: Intrinsics in PARAMETER Statements, Up: Missing Features
-
-`SELECT CASE' on `CHARACTER' Type
----------------------------------
-
- Character-type selector/cases for `SELECT CASE' currently are not
-supported.
-
-\1f
-File: g77.info, Node: RECURSIVE Keyword, Next: Popular Non-standard Types, Prev: SELECT CASE on CHARACTER Type, Up: Missing Features
-
-`RECURSIVE' Keyword
--------------------
-
- `g77' doesn't support the `RECURSIVE' keyword that F90 compilers do.
-Nor does it provide any means for compiling procedures designed to do
-recursion.
-
- All recursive code can be rewritten to not use recursion, but the
-result is not pretty.
-
-\1f
-File: g77.info, Node: Increasing Precision/Range, Next: Gracefully Handle Sensible Bad Code, Prev: Support for Threads, Up: Missing Features
-
-Increasing Precision/Range
---------------------------
-
- Some compilers, such as `f2c', have an option (`-r8' or similar)
-that provides automatic treatment of `REAL' entities such that they
-have twice the storage size, and a corresponding increase in the range
-and precision, of what would normally be the `REAL(KIND=1)' (default
-`REAL') type. (This affects `COMPLEX' the same way.)
-
- They also typically offer another option (`-i8') to increase
-`INTEGER' entities so they are twice as large (with roughly twice as
-much range).
-
- (There are potential pitfalls in using these options.)
-
- `g77' does not yet offer any option that performs these kinds of
-transformations. Part of the problem is the lack of detailed
-specifications regarding exactly how these options affect the
-interpretation of constants, intrinsics, and so on.
-
- Until `g77' addresses this need, programmers could improve the
-portability of their code by modifying it to not require compile-time
-options to produce correct results. Some free tools are available
-which may help, specifically in Toolpack (which one would expect to be
-sound) and the `fortran' section of the Netlib repository.
-
- Use of preprocessors can provide a fairly portable means to work
-around the lack of widely portable methods in the Fortran language
-itself (though increasing acceptance of Fortran 90 would alleviate this
-problem).
-
-\1f
-File: g77.info, Node: Popular Non-standard Types, Next: Full Support for Compiler Types, Prev: RECURSIVE Keyword, Up: Missing Features
-
-Popular Non-standard Types
---------------------------
-
- `g77' doesn't fully support `INTEGER*2', `LOGICAL*1', and similar.
-Version 0.6 will provide full support for this very popular set of
-features. In the meantime, version 0.5.18 provides rudimentary support
-for them.
-
-\1f
-File: g77.info, Node: Full Support for Compiler Types, Next: Array Bounds Expressions, Prev: Popular Non-standard Types, Up: Missing Features
-
-Full Support for Compiler Types
--------------------------------
-
- `g77' doesn't support `INTEGER', `REAL', and `COMPLEX' equivalents
-for *all* applicable back-end-supported types (`char', `short int',
-`int', `long int', `long long int', and `long double'). This means
-providing intrinsic support, and maybe constant support (using F90
-syntax) as well, and, for most machines will result in automatic
-support of `INTEGER*1', `INTEGER*2', `INTEGER*8', maybe even `REAL*16',
-and so on. This is scheduled for version 0.6.
-
-\1f
-File: g77.info, Node: Array Bounds Expressions, Next: POINTER Statements, Prev: Full Support for Compiler Types, Up: Missing Features
-
-Array Bounds Expressions
-------------------------
-
- `g77' doesn't support more general expressions to dimension arrays,
-such as array element references, function references, etc.
-
- For example, `g77' currently does not accept the following:
-
- SUBROUTINE X(M, N)
- INTEGER N(10), M(N(2), N(1))
-
-\1f
-File: g77.info, Node: POINTER Statements, Next: Sensible Non-standard Constructs, Prev: Array Bounds Expressions, Up: Missing Features
-
-POINTER Statements
-------------------
-
- `g77' doesn't support pointers or allocatable objects (other than
-automatic arrays). This set of features is probably considered just
-behind intrinsics in `PARAMETER' statements on the list of large,
-important things to add to `g77'.
-
- In the meantime, consider using the `INTEGER(KIND=7)' declaration to
-specify that a variable must be able to hold a pointer. This construct
-is not portable to other non-GNU compilers, but it is portable to all
-machines GNU Fortran supports when `g77' is used.
-
- *Note Functions and Subroutines::, for information on `%VAL()',
-`%REF()', and `%DESCR()' constructs, which are useful for passing
-pointers to procedures written in languages other than Fortran.
-
-\1f
-File: g77.info, Node: Sensible Non-standard Constructs, Next: FLUSH Statement, Prev: POINTER Statements, Up: Missing Features
-
-Sensible Non-standard Constructs
---------------------------------
-
- `g77' rejects things other compilers accept, like `INTRINSIC
-SQRT,SQRT'. As time permits in the future, some of these things that
-are easy for humans to read and write and unlikely to be intended to
-mean something else will be accepted by `g77' (though `-fpedantic'
-should trigger warnings about such non-standard constructs).
-
- Until `g77' no longer gratuitously rejects sensible code, you might
-as well fix your code to be more standard-conforming and portable.
-
- The kind of case that is important to except from the recommendation
-to change your code is one where following good coding rules would
-force you to write non-standard code that nevertheless has a clear
-meaning.
-
- For example, when writing an `INCLUDE' file that defines a common
-block, it might be appropriate to include a `SAVE' statement for the
-common block (such as `SAVE /CBLOCK/'), so that variables defined in
-the common block retain their values even when all procedures declaring
-the common block become inactive (return to their callers).
-
- However, putting `SAVE' statements in an `INCLUDE' file would
-prevent otherwise standard-conforming code from also specifying the
-`SAVE' statement, by itself, to indicate that all local variables and
-arrays are to have the `SAVE' attribute.
-
- For this reason, `g77' already has been changed to allow this
-combination, because although the general problem of gratuitously
-rejecting unambiguous and "safe" constructs still exists in `g77', this
-particular construct was deemed useful enough that it was worth fixing
-`g77' for just this case.
-
- So, while there is no need to change your code to avoid using this
-particular construct, there might be other, equally appropriate but
-non-standard constructs, that you shouldn't have to stop using just
-because `g77' (or any other compiler) gratuitously rejects it.
-
- Until the general problem is solved, if you have any such construct
-you believe is worthwhile using (e.g. not just an arbitrary, redundant
-specification of an attribute), please submit a bug report with an
-explanation, so we can consider fixing `g77' just for cases like yours.
-
-\1f
-File: g77.info, Node: FLUSH Statement, Next: Expressions in FORMAT Statements, Prev: Sensible Non-standard Constructs, Up: Missing Features
-
-`FLUSH' Statement
------------------
-
- `g77' could perhaps use a `FLUSH' statement that does what `CALL
-FLUSH' does, but that supports `*' as the unit designator (same unit as
-for `PRINT') and accepts `ERR=' and/or `IOSTAT=' specifiers.
-
-\1f
-File: g77.info, Node: Expressions in FORMAT Statements, Next: Explicit Assembler Code, Prev: FLUSH Statement, Up: Missing Features
-
-Expressions in `FORMAT' Statements
-----------------------------------
-
- `g77' doesn't support `FORMAT(I<J>)' and the like. Supporting this
-requires a significant redesign or replacement of `libf2c'.
-
- However, a future version of `g77' might support this construct when
-the expression is constant. For example:
-
- PARAMETER (IWIDTH = 12)
- 10 FORMAT (I<IWIDTH>)
-
- In the meantime, at least for output (`PRINT' and `WRITE'), Fortran
-code making use of this feature can be rewritten to avoid it by
-constructing the `FORMAT' string in a `CHARACTER' variable or array,
-then using that variable or array in place of the `FORMAT' statement
-label to do the original `PRINT' or `WRITE'.
-
- Many uses of this feature on input can be rewritten this way as
-well, but not all can. For example, this can be rewritten:
-
- READ 20, I
- 20 FORMAT (I<J>)
-
- However, this cannot, in general, be rewritten, especially when
-`ERR=' and `END=' constructs are employed:
-
- READ 30, J, I
- 30 FORMAT (I<J>)
-
-\1f
-File: g77.info, Node: Explicit Assembler Code, Next: Q Edit Descriptor, Prev: Expressions in FORMAT Statements, Up: Missing Features
-
-Explicit Assembler Code
------------------------
-
- `g77' needs to provide some way, a la `gcc', for `g77' code to
-specify explicit assembler code.
-
-\1f
-File: g77.info, Node: Q Edit Descriptor, Next: Old-style PARAMETER Statements, Prev: Explicit Assembler Code, Up: Missing Features
-
-Q Edit Descriptor
------------------
-
- The `Q' edit descriptor in `FORMAT's isn't supported. (This is
-meant to get the number of characters remaining in an input record.)
-Supporting this requires a significant redesign or replacement of
-`libf2c'.
-
- A workaround might be using internal I/O or the stream-based
-intrinsics. *Note FGetC Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Old-style PARAMETER Statements, Next: TYPE and ACCEPT I/O Statements, Prev: Q Edit Descriptor, Up: Missing Features
-
-Old-style PARAMETER Statements
-------------------------------
-
- `g77' doesn't accept `PARAMETER I=1'. Supporting this obsolete form
-of the `PARAMETER' statement would not be particularly hard, as most of
-the parsing code is already in place and working.
-
- Until time/money is spent implementing it, you might as well fix
-your code to use the standard form, `PARAMETER (I=1)' (possibly needing
-`INTEGER I' preceding the `PARAMETER' statement as well, otherwise, in
-the obsolete form of `PARAMETER', the type of the variable is set from
-the type of the constant being assigned to it).
-
-\1f
-File: g77.info, Node: TYPE and ACCEPT I/O Statements, Next: STRUCTURE UNION RECORD MAP, Prev: Old-style PARAMETER Statements, Up: Missing Features
-
-`TYPE' and `ACCEPT' I/O Statements
-----------------------------------
-
- `g77' doesn't support the I/O statements `TYPE' and `ACCEPT'. These
-are common extensions that should be easy to support, but also are
-fairly easy to work around in user code.
-
- Generally, any `TYPE fmt,list' I/O statement can be replaced by
-`PRINT fmt,list'. And, any `ACCEPT fmt,list' statement can be replaced
-by `READ fmt,list'.
-
-\1f
-File: g77.info, Node: STRUCTURE UNION RECORD MAP, Next: OPEN CLOSE and INQUIRE Keywords, Prev: TYPE and ACCEPT I/O Statements, Up: Missing Features
-
-`STRUCTURE', `UNION', `RECORD', `MAP'
--------------------------------------
-
- `g77' doesn't support `STRUCTURE', `UNION', `RECORD', `MAP'. This
-set of extensions is quite a bit lower on the list of large, important
-things to add to `g77', partly because it requires a great deal of work
-either upgrading or replacing `libf2c'.
-
-\1f
-File: g77.info, Node: OPEN CLOSE and INQUIRE Keywords, Next: ENCODE and DECODE, Prev: STRUCTURE UNION RECORD MAP, Up: Missing Features
-
-`OPEN', `CLOSE', and `INQUIRE' Keywords
----------------------------------------
-
- `g77' doesn't have support for keywords such as `DISP='DELETE'' in
-the `OPEN', `CLOSE', and `INQUIRE' statements. These extensions are
-easy to add to `g77' itself, but require much more work on `libf2c'.
-
-\1f
-File: g77.info, Node: ENCODE and DECODE, Next: Suppressing Space Padding, Prev: OPEN CLOSE and INQUIRE Keywords, Up: Missing Features
-
-`ENCODE' and `DECODE'
----------------------
-
- `g77' doesn't support `ENCODE' or `DECODE'.
-
- These statements are best replaced by READ and WRITE statements
-involving internal files (CHARACTER variables and arrays).
-
- For example, replace a code fragment like
-
- INTEGER*1 LINE(80)
- ...
- DECODE (80, 9000, LINE) A, B, C
- ...
- 9000 FORMAT (1X, 3(F10.5))
-
-with:
-
- CHARACTER*80 LINE
- ...
- READ (UNIT=LINE, FMT=9000) A, B, C
- ...
- 9000 FORMAT (1X, 3(F10.5))
-
- Similarly, replace a code fragment like
-
- INTEGER*1 LINE(80)
- ...
- ENCODE (80, 9000, LINE) A, B, C
- ...
- 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
-
-with:
-
- CHARACTER*80 LINE
- ...
- WRITE (UNIT=LINE, FMT=9000) A, B, C
- ...
- 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
-
- It is entirely possible that `ENCODE' and `DECODE' will be supported
-by a future version of `g77'.
-
-\1f
-File: g77.info, Node: Suppressing Space Padding, Next: Fortran Preprocessor, Prev: ENCODE and DECODE, Up: Missing Features
-
-Suppressing Space Padding of Source Lines
------------------------------------------
-
- `g77' should offer VXT-Fortran-style suppression of virtual spaces
-at the end of a source line if an appropriate command-line option is
-specified.
-
- This affects cases where a character constant is continued onto the
-next line in a fixed-form source file, as in the following example:
-
- 10 PRINT *,'HOW MANY
- 1 SPACES?'
-
-`g77', and many other compilers, virtually extend the continued line
-through column 72 with spaces that become part of the character
-constant, but Digital Fortran normally didn't, leaving only one space
-between `MANY' and `SPACES?' in the output of the above statement.
-
- Fairly recently, at least one version of Digital Fortran was
-enhanced to provide the other behavior when a command-line option is
-specified, apparently due to demand from readers of the USENET group
-`comp.lang.fortran' to offer conformance to this widespread practice in
-the industry. `g77' should return the favor by offering conformance to
-Digital's approach to handling the above example.
-
-\1f
-File: g77.info, Node: Fortran Preprocessor, Next: Bit Operations on Floating-point Data, Prev: Suppressing Space Padding, Up: Missing Features
-
-Fortran Preprocessor
---------------------
-
- `g77' should offer a preprocessor designed specifically for Fortran
-to replace `cpp -traditional'. There are several out there worth
-evaluating, at least.
-
- Such a preprocessor would recognize Hollerith constants, properly
-parse comments and character constants, and so on. It might also
-recognize, process, and thus preprocess files included via the
-`INCLUDE' directive.
-
-\1f
-File: g77.info, Node: Bit Operations on Floating-point Data, Next: POSIX Standard, Prev: Fortran Preprocessor, Up: Missing Features
-
-Bit Operations on Floating-point Data
--------------------------------------
-
- `g77' does not allow `REAL' and other non-integral types for
-arguments to intrinsics like `AND', `OR', and `SHIFT'.
-
- For example, this program is rejected by `g77', because the
-intrinsic `IAND' does not accept `REAL' arguments:
-
- DATA A/7.54/, B/9.112/
- PRINT *, IAND(A, B)
- END
-
-\1f
-File: g77.info, Node: POSIX Standard, Next: Floating-point Exception Handling, Prev: Bit Operations on Floating-point Data, Up: Missing Features
-
-`POSIX' Standard
-----------------
-
- `g77' should support the POSIX standard for Fortran.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Floating-point Exception Handling, Next: Nonportable Conversions, Prev: POSIX Standard, Up: Missing Features
-
-Floating-point Exception Handling
----------------------------------
-
- The `gcc' backend and, consequently, `g77', currently provides no
-control over whether or not floating-point exceptions are trapped or
-ignored. (Ignoring them typically results in NaN values being
-propagated in systems that conform to IEEE 754.) The behaviour is
-inherited from the system-dependent startup code.
-
- Most systems provide some C-callable mechanism to change this; this
-can be invoked at startup using `gcc''s `constructor' attribute. For
-example, just compiling and linking the following C code with your
-program will turn on exception trapping for the "common" exceptions on
-an x86-based GNU system:
-
- #include <fpu_control.h>
- void __attribute__ ((constructor))
- trapfpe () {
- (void) __setfpucw (_FPU_DEFAULT &
- ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
- }
-
-\1f
-File: g77.info, Node: Nonportable Conversions, Next: Large Automatic Arrays, Prev: Floating-point Exception Handling, Up: Missing Features
-
-Nonportable Conversions
------------------------
-
- `g77' doesn't accept some particularly nonportable, silent data-type
-conversions such as `LOGICAL' to `REAL' (as in `A=.FALSE.', where `A'
-is type `REAL'), that other compilers might quietly accept.
-
- Some of these conversions are accepted by `g77' when the `-fugly'
-option is specified. Perhaps it should accept more or all of them.
-
-\1f
-File: g77.info, Node: Large Automatic Arrays, Next: Support for Threads, Prev: Nonportable Conversions, Up: Missing Features
-
-Large Automatic Arrays
-----------------------
-
- Currently, automatic arrays always are allocated on the stack. For
-situations where the stack cannot be made large enough, `g77' should
-offer a compiler option that specifies allocation of automatic arrays
-in heap storage.
-
-\1f
-File: g77.info, Node: Support for Threads, Next: Increasing Precision/Range, Prev: Large Automatic Arrays, Up: Missing Features
-
-Support for Threads
--------------------
-
- Neither the code produced by `g77' nor the `libf2c' library are
-thread-safe, nor does `g77' have support for parallel processing (other
-than the instruction-level parallelism available on some processors).
-A package such as PVM might help here.
-
-\1f
-File: g77.info, Node: Gracefully Handle Sensible Bad Code, Next: Non-standard Conversions, Prev: Increasing Precision/Range, Up: Missing Features
-
-Gracefully Handle Sensible Bad Code
------------------------------------
-
- `g77' generally should continue processing for warnings and
-recoverable (user) errors whenever possible--that is, it shouldn't
-gratuitously make bad or useless code.
-
- For example:
-
- INTRINSIC ZABS
- CALL FOO(ZABS)
- END
-
-When compiling the above with `-ff2c-intrinsics-disable', `g77' should
-indeed complain about passing `ZABS', but it still should compile,
-instead of rejecting the entire `CALL' statement. (Some of this is
-related to improving the compiler internals to improve how statements
-are analyzed.)
-
-\1f
-File: g77.info, Node: Non-standard Conversions, Next: Non-standard Intrinsics, Prev: Gracefully Handle Sensible Bad Code, Up: Missing Features
-
-Non-standard Conversions
-------------------------
-
- `-Wconversion' and related should flag places where non-standard
-conversions are found. Perhaps much of this would be part of `-Wugly*'.
-
-\1f
-File: g77.info, Node: Non-standard Intrinsics, Next: Modifying DO Variable, Prev: Non-standard Conversions, Up: Missing Features
-
-Non-standard Intrinsics
------------------------
-
- `g77' needs a new option, like `-Wintrinsics', to warn about use of
-non-standard intrinsics without explicit `INTRINSIC' statements for
-them. This would help find code that might fail silently when ported
-to another compiler.
-
-\1f
-File: g77.info, Node: Modifying DO Variable, Next: Better Pedantic Compilation, Prev: Non-standard Intrinsics, Up: Missing Features
-
-Modifying `DO' Variable
------------------------
-
- `g77' should warn about modifying `DO' variables via `EQUIVALENCE'.
-(The internal information gathered to produce this warning might also
-be useful in setting the internal "doiter" flag for a variable or even
-array reference within a loop, since that might produce faster code
-someday.)
-
- For example, this code is invalid, so `g77' should warn about the
-invalid assignment to `NOTHER':
-
- EQUIVALENCE (I, NOTHER)
- DO I = 1, 100
- IF (I.EQ. 10) NOTHER = 20
- END DO
-
-\1f
-File: g77.info, Node: Better Pedantic Compilation, Next: Warn About Implicit Conversions, Prev: Modifying DO Variable, Up: Missing Features
-
-Better Pedantic Compilation
----------------------------
-
- `g77' needs to support `-fpedantic' more thoroughly, and use it only
-to generate warnings instead of rejecting constructs outright. Have it
-warn: if a variable that dimensions an array is not a dummy or placed
-explicitly in `COMMON' (F77 does not allow it to be placed in `COMMON'
-via `EQUIVALENCE'); if specification statements follow
-statement-function-definition statements; about all sorts of syntactic
-extensions.
-
-\1f
-File: g77.info, Node: Warn About Implicit Conversions, Next: Invalid Use of Hollerith Constant, Prev: Better Pedantic Compilation, Up: Missing Features
-
-Warn About Implicit Conversions
--------------------------------
-
- `g77' needs a `-Wpromotions' option to warn if source code appears
-to expect automatic, silent, and somewhat dangerous compiler-assisted
-conversion of `REAL(KIND=1)' constants to `REAL(KIND=2)' based on
-context.
-
- For example, it would warn about cases like this:
-
- DOUBLE PRECISION FOO
- PARAMETER (TZPHI = 9.435784839284958)
- FOO = TZPHI * 3D0
-
-\1f
-File: g77.info, Node: Invalid Use of Hollerith Constant, Next: Dummy Array Without Dimensioning Dummy, Prev: Warn About Implicit Conversions, Up: Missing Features
-
-Invalid Use of Hollerith Constant
----------------------------------
-
- `g77' should disallow statements like `RETURN 2HAB', which are
-invalid in both source forms (unlike `RETURN (2HAB)', which probably
-still makes no sense but at least can be reliably parsed). Fixed-form
-processing rejects it, but not free-form, except in a way that is a bit
-difficult to understand.
-
-\1f
-File: g77.info, Node: Dummy Array Without Dimensioning Dummy, Next: Invalid FORMAT Specifiers, Prev: Invalid Use of Hollerith Constant, Up: Missing Features
-
-Dummy Array Without Dimensioning Dummy
---------------------------------------
-
- `g77' should complain when a list of dummy arguments containing an
-adjustable dummy array does not also contain every variable listed in
-the dimension list of the adjustable array.
-
- Currently, `g77' does complain about a variable that dimensions an
-array but doesn't appear in any dummy list or `COMMON' area, but this
-needs to be extended to catch cases where it doesn't appear in every
-dummy list that also lists any arrays it dimensions.
-
- For example, `g77' should warn about the entry point `ALT' below,
-since it includes `ARRAY' but not `ISIZE' in its list of arguments:
-
- SUBROUTINE PRIMARY(ARRAY, ISIZE)
- REAL ARRAY(ISIZE)
- ENTRY ALT(ARRAY)
-
-\1f
-File: g77.info, Node: Invalid FORMAT Specifiers, Next: Ambiguous Dialects, Prev: Dummy Array Without Dimensioning Dummy, Up: Missing Features
-
-Invalid FORMAT Specifiers
--------------------------
-
- `g77' should check `FORMAT' specifiers for validity as it does
-`FORMAT' statements.
-
- For example, a diagnostic would be produced for:
-
- PRINT 'HI THERE!' !User meant PRINT *, 'HI THERE!'
-
-\1f
-File: g77.info, Node: Ambiguous Dialects, Next: Unused Labels, Prev: Invalid FORMAT Specifiers, Up: Missing Features
-
-Ambiguous Dialects
-------------------
-
- `g77' needs a set of options such as `-Wugly*', `-Wautomatic',
-`-Wvxt', `-Wf90', and so on. These would warn about places in the
-user's source where ambiguities are found, helpful in resolving
-ambiguities in the program's dialect or dialects.
-
-\1f
-File: g77.info, Node: Unused Labels, Next: Informational Messages, Prev: Ambiguous Dialects, Up: Missing Features
-
-Unused Labels
--------------
-
- `g77' should warn about unused labels when `-Wunused' is in effect.
-
-\1f
-File: g77.info, Node: Informational Messages, Next: Uninitialized Variables at Run Time, Prev: Unused Labels, Up: Missing Features
-
-Informational Messages
-----------------------
-
- `g77' needs an option to suppress information messages (notes).
-`-w' does this but also suppresses warnings. The default should be to
-suppress info messages.
-
- Perhaps info messages should simply be eliminated.
-
-\1f
-File: g77.info, Node: Uninitialized Variables at Run Time, Next: Bounds Checking at Run Time, Prev: Informational Messages, Up: Missing Features
-
-Uninitialized Variables at Run Time
------------------------------------
-
- `g77' needs an option to initialize everything (not otherwise
-explicitly initialized) to "weird" (machine-dependent) values, e.g.
-NaNs, bad (non-`NULL') pointers, and largest-magnitude integers, would
-help track down references to some kinds of uninitialized variables at
-run time.
-
- Note that use of the options `-O -Wuninitialized' can catch many
-such bugs at compile time.
-
-\1f
-File: g77.info, Node: Bounds Checking at Run Time, Next: Labels Visible to Debugger, Prev: Uninitialized Variables at Run Time, Up: Missing Features
-
-Bounds Checking at Run Time
----------------------------
-
- `g77' should offer run-time bounds-checking of array/subscript
-references in a fashion similar to `f2c'.
-
- Note that `g77' already warns about references to out-of-bounds
-elements of arrays when it detects these at compile time.
-
-\1f
-File: g77.info, Node: Labels Visible to Debugger, Prev: Bounds Checking at Run Time, Up: Missing Features
-
-Labels Visible to Debugger
---------------------------
-
- `g77' should output debugging information for statements labels, for
-use by debuggers that know how to support them. Same with weirder
-things like construct names. It is not yet known if any debug formats
-or debuggers support these.
-
-\1f
-File: g77.info, Node: Disappointments, Next: Non-bugs, Prev: Missing Features, Up: Trouble
-
-Disappointments and Misunderstandings
-=====================================
-
- These problems are perhaps regrettable, but we don't know any
-practical way around them for now.
-
-* Menu:
-
-* Mangling of Names:: `SUBROUTINE FOO' is given
- external name `foo_'.
-* Multiple Definitions of External Names:: No doing both `COMMON /FOO/'
- and `SUBROUTINE FOO'.
-* Limitation on Implicit Declarations:: No `IMPLICIT CHARACTER*(*)'.
-
-\1f
-File: g77.info, Node: Mangling of Names, Next: Multiple Definitions of External Names, Up: Disappointments
-
-Mangling of Names in Source Code
---------------------------------
-
- The current external-interface design, which includes naming of
-external procedures, COMMON blocks, and the library interface, has
-various usability problems, including things like adding underscores
-where not really necessary (and preventing easier inter-language
-operability) and yet not providing complete namespace freedom for user
-C code linked with Fortran apps (due to the naming of functions in the
-library, among other things).
-
- Project GNU should at least get all this "right" for systems it
-fully controls, such as the Hurd, and provide defaults and options for
-compatibility with existing systems and interoperability with popular
-existing compilers.
-
-\1f
-File: g77.info, Node: Multiple Definitions of External Names, Next: Limitation on Implicit Declarations, Prev: Mangling of Names, Up: Disappointments
-
-Multiple Definitions of External Names
---------------------------------------
-
- `g77' doesn't allow a common block and an external procedure or
-`BLOCK DATA' to have the same name. Some systems allow this, but `g77'
-does not, to be compatible with `f2c'.
-
- `g77' could special-case the way it handles `BLOCK DATA', since it
-is not compatible with `f2c' in this particular area (necessarily,
-since `g77' offers an important feature here), but it is likely that
-such special-casing would be very annoying to people with programs that
-use `EXTERNAL FOO', with no other mention of `FOO' in the same program
-unit, to refer to external procedures, since the result would be that
-`g77' would treat these references as requests to force-load BLOCK DATA
-program units.
-
- In that case, if `g77' modified names of `BLOCK DATA' so they could
-have the same names as `COMMON', users would find that their programs
-wouldn't link because the `FOO' procedure didn't have its name
-translated the same way.
-
- (Strictly speaking, `g77' could emit a
-null-but-externally-satisfying definition of `FOO' with its name
-transformed as if it had been a `BLOCK DATA', but that probably invites
-more trouble than it's worth.)
-
-\1f
-File: g77.info, Node: Limitation on Implicit Declarations, Prev: Multiple Definitions of External Names, Up: Disappointments
-
-Limitation on Implicit Declarations
------------------------------------
-
- `g77' disallows `IMPLICIT CHARACTER*(*)'. This is not
-standard-conforming.
-
-\1f
-File: g77.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Disappointments, Up: Trouble
-
-Certain Changes We Don't Want to Make
-=====================================
-
- This section lists changes that people frequently request, but which
-we do not make because we think GNU Fortran is better without them.
-
-* Menu:
-
-* Backslash in Constants:: Why `'\\'' is a constant that
- is one, not two, characters long.
-* Initializing Before Specifying:: Why `DATA VAR/1/' can't precede
- `COMMON VAR'.
-* Context-Sensitive Intrinsicness:: Why `CALL SQRT' won't work.
-* Context-Sensitive Constants:: Why `9.435784839284958' is a
- single-precision constant,
- and might be interpreted as
- `9.435785' or similar.
-* Equivalence Versus Equality:: Why `.TRUE. .EQ. .TRUE.' won't work.
-* Order of Side Effects:: Why `J = IFUNC() - IFUNC()' might
- not behave as expected.
-
-\1f
-File: g77.info, Node: Backslash in Constants, Next: Initializing Before Specifying, Up: Non-bugs
-
-Backslash in Constants
-----------------------
-
- In the opinion of many experienced Fortran users, `-fno-backslash'
-should be the default, not `-fbackslash', as currently set by `g77'.
-
- First of all, you can always specify `-fno-backslash' to turn off
-this processing.
-
- Despite not being within the spirit (though apparently within the
-letter) of the ANSI FORTRAN 77 standard, `g77' defaults to
-`-fbackslash' because that is what most UNIX `f77' commands default to,
-and apparently lots of code depends on this feature.
-
- This is a particularly troubling issue. The use of a C construct in
-the midst of Fortran code is bad enough, worse when it makes existing
-Fortran programs stop working (as happens when programs written for
-non-UNIX systems are ported to UNIX systems with compilers that provide
-the `-fbackslash' feature as the default--sometimes with no option to
-turn it off).
-
- The author of GNU Fortran wished, for reasons of linguistic purity,
-to make `-fno-backslash' the default for GNU Fortran and thus require
-users of UNIX `f77' and `f2c' to specify `-fbackslash' to get the UNIX
-behavior.
-
- However, the realization that `g77' is intended as a replacement for
-*UNIX* `f77', caused the author to choose to make `g77' as compatible
-with `f77' as feasible, which meant making `-fbackslash' the default.
-
- The primary focus on compatibility is at the source-code level, and
-the question became "What will users expect a replacement for `f77' to
-do, by default?" Although at least one UNIX `f77' does not provide
-`-fbackslash' as a default, it appears that the majority of them do,
-which suggests that the majority of code that is compiled by UNIX `f77'
-compilers expects `-fbackslash' to be the default.
-
- It is probably the case that more code exists that would *not* work
-with `-fbackslash' in force than code that requires it be in force.
-
- However, most of *that* code is not being compiled with `f77', and
-when it is, new build procedures (shell scripts, makefiles, and so on)
-must be set up anyway so that they work under UNIX. That makes a much
-more natural and safe opportunity for non-UNIX users to adapt their
-build procedures for `g77''s default of `-fbackslash' than would exist
-for the majority of UNIX `f77' users who would have to modify existing,
-working build procedures to explicitly specify `-fbackslash' if that was
-not the default.
-
- One suggestion has been to configure the default for `-fbackslash'
-(and perhaps other options as well) based on the configuration of `g77'.
-
- This is technically quite straightforward, but will be avoided even
-in cases where not configuring defaults to be dependent on a particular
-configuration greatly inconveniences some users of legacy code.
-
- Many users appreciate the GNU compilers because they provide an
-environment that is uniform across machines. These users would be
-inconvenienced if the compiler treated things like the format of the
-source code differently on certain machines.
-
- Occasionally users write programs intended only for a particular
-machine type. On these occasions, the users would benefit if the GNU
-Fortran compiler were to support by default the same dialect as the
-other compilers on that machine. But such applications are rare. And
-users writing a program to run on more than one type of machine cannot
-possibly benefit from this kind of compatibility. (This is consistent
-with the design goals for `gcc'. To change them for `g77', you must
-first change them for `gcc'. Do not ask the maintainers of `g77' to do
-this for you, or to disassociate `g77' from the widely understood, if
-not widely agreed-upon, goals for GNU compilers in general.)
-
- This is why GNU Fortran does and will treat backslashes in the same
-fashion on all types of machines (by default). *Note Direction of
-Language Development::, for more information on this overall philosophy
-guiding the development of the GNU Fortran language.
-
- Of course, users strongly concerned about portability should indicate
-explicitly in their build procedures which options are expected by
-their source code, or write source code that has as few such
-expectations as possible.
-
- For example, avoid writing code that depends on backslash (`\')
-being interpreted either way in particular, such as by starting a
-program unit with:
-
- CHARACTER BACKSL
- PARAMETER (BACKSL = '\\')
-
-Then, use concatenation of `BACKSL' anyplace a backslash is desired.
-In this way, users can write programs which have the same meaning in
-many Fortran dialects.
-
- (However, this technique does not work for Hollerith constants--which
-is just as well, since the only generally portable uses for Hollerith
-constants are in places where character constants can and should be
-used instead, for readability.)
-
-\1f
-File: g77.info, Node: Initializing Before Specifying, Next: Context-Sensitive Intrinsicness, Prev: Backslash in Constants, Up: Non-bugs
-
-Initializing Before Specifying
-------------------------------
-
- `g77' does not allow `DATA VAR/1/' to appear in the source code
-before `COMMON VAR', `DIMENSION VAR(10)', `INTEGER VAR', and so on. In
-general, `g77' requires initialization of a variable or array to be
-specified *after* all other specifications of attributes (type, size,
-placement, and so on) of that variable or array are specified (though
-*confirmation* of data type is permitted).
-
- It is *possible* `g77' will someday allow all of this, even though
-it is not allowed by the FORTRAN 77 standard.
-
- Then again, maybe it is better to have `g77' always require
-placement of `DATA' so that it can possibly immediately write constants
-to the output file, thus saving time and space.
-
- That is, `DATA A/1000000*1/' should perhaps always be immediately
-writable to canonical assembler, unless it's already known to be in a
-`COMMON' area following as-yet-uninitialized stuff, and to do this it
-cannot be followed by `COMMON A'.
-
-\1f
-File: g77.info, Node: Context-Sensitive Intrinsicness, Next: Context-Sensitive Constants, Prev: Initializing Before Specifying, Up: Non-bugs
-
-Context-Sensitive Intrinsicness
--------------------------------
-
- `g77' treats procedure references to *possible* intrinsic names as
-always enabling their intrinsic nature, regardless of whether the
-*form* of the reference is valid for that intrinsic.
-
- For example, `CALL SQRT' is interpreted by `g77' as an invalid
-reference to the `SQRT' intrinsic function, because the reference is a
-subroutine invocation.
-
- First, `g77' recognizes the statement `CALL SQRT' as a reference to
-a *procedure* named `SQRT', not to a *variable* with that name (as it
-would for a statement such as `V = SQRT').
-
- Next, `g77' establishes that, in the program unit being compiled,
-`SQRT' is an intrinsic--not a subroutine that happens to have the same
-name as an intrinsic (as would be the case if, for example, `EXTERNAL
-SQRT' was present).
-
- Finally, `g77' recognizes that the *form* of the reference is
-invalid for that particular intrinsic. That is, it recognizes that it
-is invalid for an intrinsic *function*, such as `SQRT', to be invoked as
-a *subroutine*.
-
- At that point, `g77' issues a diagnostic.
-
- Some users claim that it is "obvious" that `CALL SQRT' references an
-external subroutine of their own, not an intrinsic function.
-
- However, `g77' knows about intrinsic subroutines, not just
-functions, and is able to support both having the same names, for
-example.
-
- As a result of this, `g77' rejects calls to intrinsics that are not
-subroutines, and function invocations of intrinsics that are not
-functions, just as it (and most compilers) rejects invocations of
-intrinsics with the wrong number (or types) of arguments.
-
- So, use the `EXTERNAL SQRT' statement in a program unit that calls a
-user-written subroutine named `SQRT'.
-
-\1f
-File: g77.info, Node: Context-Sensitive Constants, Next: Equivalence Versus Equality, Prev: Context-Sensitive Intrinsicness, Up: Non-bugs
-
-Context-Sensitive Constants
----------------------------
-
- `g77' does not use context to determine the types of constants or
-named constants (`PARAMETER'), except for (non-standard) typeless
-constants such as `'123'O'.
-
- For example, consider the following statement:
-
- PRINT *, 9.435784839284958 * 2D0
-
-`g77' will interpret the (truncated) constant `9.435784839284958' as a
-`REAL(KIND=1)', not `REAL(KIND=2)', constant, because the suffix `D0'
-is not specified.
-
- As a result, the output of the above statement when compiled by
-`g77' will appear to have "less precision" than when compiled by other
-compilers.
-
- In these and other cases, some compilers detect the fact that a
-single-precision constant is used in a double-precision context and
-therefore interpret the single-precision constant as if it was
-*explicitly* specified as a double-precision constant. (This has the
-effect of appending *decimal*, not *binary*, zeros to the fractional
-part of the number--producing different computational results.)
-
- The reason this misfeature is dangerous is that a slight, apparently
-innocuous change to the source code can change the computational
-results. Consider:
-
- REAL ALMOST, CLOSE
- DOUBLE PRECISION FIVE
- PARAMETER (ALMOST = 5.000000000001)
- FIVE = 5
- CLOSE = 5.000000000001
- PRINT *, 5.000000000001 - FIVE
- PRINT *, ALMOST - FIVE
- PRINT *, CLOSE - FIVE
- END
-
-Running the above program should result in the same value being printed
-three times. With `g77' as the compiler, it does.
-
- However, compiled by many other compilers, running the above program
-would print two or three distinct values, because in two or three of
-the statements, the constant `5.000000000001', which on most systems is
-exactly equal to `5.' when interpreted as a single-precision constant,
-is instead interpreted as a double-precision constant, preserving the
-represented precision. However, this "clever" promotion of type does
-not extend to variables or, in some compilers, to named constants.
-
- Since programmers often are encouraged to replace manifest constants
-or permanently-assigned variables with named constants (`PARAMETER' in
-Fortran), and might need to replace some constants with variables
-having the same values for pertinent portions of code, it is important
-that compilers treat code so modified in the same way so that the
-results of such programs are the same. `g77' helps in this regard by
-treating constants just the same as variables in terms of determining
-their types in a context-independent way.
-
- Still, there is a lot of existing Fortran code that has been written
-to depend on the way other compilers freely interpret constants' types
-based on context, so anything `g77' can do to help flag cases of this
-in such code could be very helpful.
-
-\1f
-File: g77.info, Node: Equivalence Versus Equality, Next: Order of Side Effects, Prev: Context-Sensitive Constants, Up: Non-bugs
-
-Equivalence Versus Equality
----------------------------
-
- Use of `.EQ.' and `.NE.' on `LOGICAL' operands is not supported,
-except via `-fugly', which is not recommended except for legacy code
-(where the behavior expected by the *code* is assumed).
-
- Legacy code should be changed, as resources permit, to use `.EQV.'
-and `.NEQV.' instead, as these are permitted by the various Fortran
-standards.
-
- New code should never be written expecting `.EQ.' or `.NE.' to work
-if either of its operands is `LOGICAL'.
-
- The problem with supporting this "feature" is that there is unlikely
-to be consensus on how it works, as illustrated by the following sample
-program:
-
- LOGICAL L,M,N
- DATA L,M,N /3*.FALSE./
- IF (L.AND.M.EQ.N) PRINT *,'L.AND.M.EQ.N'
- END
-
- The issue raised by the above sample program is: what is the
-precedence of `.EQ.' (and `.NE.') when applied to `LOGICAL' operands?
-
- Some programmers will argue that it is the same as the precedence
-for `.EQ.' when applied to numeric (such as `INTEGER') operands. By
-this interpretation, the subexpression `M.EQ.N' must be evaluated first
-in the above program, resulting in a program that, when run, does not
-execute the `PRINT' statement.
-
- Other programmers will argue that the precedence is the same as the
-precedence for `.EQV.', which is restricted by the standards to
-`LOGICAL' operands. By this interpretation, the subexpression
-`L.AND.M' must be evaluated first, resulting in a program that *does*
-execute the `PRINT' statement.
-
- Assigning arbitrary semantic interpretations to syntactic expressions
-that might legitimately have more than one "obvious" interpretation is
-generally unwise.
-
- The creators of the various Fortran standards have done a good job
-in this case, requiring a distinct set of operators (which have their
-own distinct precedence) to compare `LOGICAL' operands. This
-requirement results in expression syntax with more certain precedence
-(without requiring substantial context), making it easier for
-programmers to read existing code. `g77' will avoid muddying up
-elements of the Fortran language that were well-designed in the first
-place.
-
- (Ask C programmers about the precedence of expressions such as `(a)
-& (b)' and `(a) - (b)'--they cannot even tell you, without knowing more
-context, whether the `&' and `-' operators are infix (binary) or unary!)
-
-\1f
-File: g77.info, Node: Order of Side Effects, Prev: Equivalence Versus Equality, Up: Non-bugs
-
-Order of Side Effects
----------------------
-
- `g77' does not necessarily produce code that, when run, performs
-side effects (such as those performed by function invocations) in the
-same order as in some other compiler--or even in the same order as
-another version, port, or invocation (using different command-line
-options) of `g77'.
-
- It is never safe to depend on the order of evaluation of side
-effects. For example, an expression like this may very well behave
-differently from one compiler to another:
-
- J = IFUNC() - IFUNC()
-
-There is no guarantee that `IFUNC' will be evaluated in any particular
-order. Either invocation might happen first. If `IFUNC' returns 5 the
-first time it is invoked, and returns 12 the second time, `J' might end
-up with the value `7', or it might end up with `-7'.
-
- Generally, in Fortran, procedures with side-effects intended to be
-visible to the caller are best designed as *subroutines*, not functions.
-Examples of such side-effects include:
-
- * The generation of random numbers that are intended to influence
- return values.
-
- * Performing I/O (other than internal I/O to local variables).
-
- * Updating information in common blocks.
-
- An example of a side-effect that is not intended to be visible to
-the caller is a function that maintains a cache of recently calculated
-results, intended solely to speed repeated invocations of the function
-with identical arguments. Such a function can be safely used in
-expressions, because if the compiler optimizes away one or more calls
-to the function, operation of the program is unaffected (aside from
-being speeded up).
-
-\1f
-File: g77.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble
-
-Warning Messages and Error Messages
-===================================
-
- The GNU compiler can produce two kinds of diagnostics: errors and
-warnings. Each kind has a different purpose:
-
- *Errors* report problems that make it impossible to compile your
- program. GNU Fortran reports errors with the source file name,
- line number, and column within the line where the problem is
- apparent.
-
- *Warnings* report other unusual conditions in your code that
- *might* indicate a problem, although compilation can (and does)
- proceed. Warning messages also report the source file name, line
- number, and column information, but include the text `warning:' to
- distinguish them from error messages.
-
- Warnings might indicate danger points where you should check to make
-sure that your program really does what you intend; or the use of
-obsolete features; or the use of nonstandard features of GNU Fortran.
-Many warnings are issued only if you ask for them, with one of the `-W'
-options (for instance, `-Wall' requests a variety of useful warnings).
-
- *Note:* Currently, the text of the line and a pointer to the column
-is printed in most `g77' diagnostics. Probably, as of version 0.6,
-`g77' will no longer print the text of the source line, instead printing
-the column number following the file name and line number in a form
-that GNU Emacs recognizes. This change is expected to speed up and
-reduce the memory usage of the `g77' compiler.
-
- *Note Options to Request or Suppress Warnings: Warning Options, for
-more detail on these and related command-line options.
-
-\1f
-File: g77.info, Node: Open Questions, Next: Bugs, Prev: Trouble, Up: Top
-
-Open Questions
-**************
-
- Please consider offering useful answers to these questions!
-
- * How do system administrators and users manage multiple incompatible
- Fortran compilers on their systems? How can `g77' contribute to
- this, or at least avoiding intefering with it?
-
- Currently, `g77' provides rudimentary ways to choose whether to
- overwrite portions of other Fortran compilation systems (such as
- the `f77' command and the `libf2c' library). Is this sufficient?
- What happens when users choose not to overwrite these--does `g77'
- work properly in all such installations, picking up its own
- versions, or does it pick up the existing "alien" versions it
- didn't overwrite with its own, possibly leading to subtle bugs?
-
- * `LOC()' and other intrinsics are probably somewhat misclassified.
- Is the a need for more precise classification of intrinsics, and
- if so, what are the appropriate groupings? Is there a need to
- individually enable/disable/delete/hide intrinsics from the
- command line?
-
-\1f
-File: g77.info, Node: Bugs, Next: Service, Prev: Open Questions, Up: Top
-
-Reporting Bugs
-**************
-
- Your bug reports play an essential role in making GNU Fortran
-reliable.
-
- When you encounter a problem, the first thing to do is to see if it
-is already known. *Note Trouble::. If it isn't known, then you should
-report the problem.
-
- Reporting a bug might help you by bringing a solution to your
-problem, or it might not. (If it does not, look in the service
-directory; see *Note Service::.) In any case, the principal function
-of a bug report is to help the entire community by making the next
-version of GNU Fortran work better. Bug reports are your contribution
-to the maintenance of GNU Fortran.
-
- Since the maintainers are very overloaded, we cannot respond to every
-bug report. However, if the bug has not been fixed, we are likely to
-send you a patch and ask you to tell us whether it works.
-
- In order for a bug report to serve its purpose, you must include the
-information that makes for fixing the bug.
-
-* Menu:
-
-* Criteria: Bug Criteria. Have you really found a bug?
-* Where: Bug Lists. Where to send your bug report.
-* Reporting: Bug Reporting. How to report a bug effectively.
-* Patches: Sending Patches. How to send a patch for GNU Fortran.
-
- *Note Known Causes of Trouble with GNU Fortran: Trouble, for
-information on problems we already know about.
-
- *Note How To Get Help with GNU Fortran: Service, for information on
-where to ask for help.
-
-\1f
-File: g77.info, Node: Bug Criteria, Next: Bug Lists, Up: Bugs
-
-Have You Found a Bug?
-=====================
-
- If you are not sure whether you have found a bug, here are some
-guidelines:
-
- * If the compiler gets a fatal signal, for any input whatever, that
- is a compiler bug. Reliable compilers never crash--they just
- remain obsolete.
-
- * If the compiler produces invalid assembly code, for any input
- whatever, that is a compiler bug, unless the compiler reports
- errors (not just warnings) which would ordinarily prevent the
- assembler from being run.
-
- * If the compiler produces valid assembly code that does not
- correctly execute the input source code, that is a compiler bug.
-
- However, you must double-check to make sure, because you might
- have run into an incompatibility between GNU Fortran and
- traditional Fortran. These incompatibilities might be considered
- bugs, but they are inescapable consequences of valuable features.
-
- Or you might have a program whose behavior is undefined, which
- happened by chance to give the desired results with another
- Fortran compiler. It is best to check the relevant Fortran
- standard thoroughly if it is possible that the program indeed does
- something undefined.
-
- After you have localized the error to a single source line, it
- should be easy to check for these things. If your program is
- correct and well defined, you have found a compiler bug.
-
- It might help if, in your submission, you identified the specific
- language in the relevant Fortran standard that specifies the
- desired behavior, if it isn't likely to be obvious and agreed-upon
- by all Fortran users.
-
- * If the compiler produces an error message for valid input, that is
- a compiler bug.
-
- * If the compiler does not produce an error message for invalid
- input, that is a compiler bug. However, you should note that your
- idea of "invalid input" might be someone else's idea of "an
- extension" or "support for traditional practice".
-
- * If you are an experienced user of Fortran compilers, your
- suggestions for improvement of GNU Fortran are welcome in any case.
-
- Many, perhaps most, bug reports against `g77' turn out to be bugs in
-the user's code. While we find such bug reports educational, they
-sometimes take a considerable amount of time to track down or at least
-respond to--time we could be spending making `g77', not some user's
-code, better.
-
- Some steps you can take to verify that the bug is not certainly in
-the code you're compiling with `g77':
-
- * Compile your code using the `g77' options `-W -Wall -O'. These
- options enable many useful warning; the `-O' option enables flow
- analysis that enables the uninitialized-variable warning.
-
- If you investigate the warnings and find evidence of possible bugs
- in your code, fix them first and retry `g77'.
-
- * Compile your code using the `g77' options `-finit-local-zero',
- `-fno-automatic', `-ffloat-store', and various combinations
- thereof.
-
- If your code works with any of these combinations, that is not
- proof that the bug isn't in `g77'--a `g77' bug exposed by your
- code might simply be avoided, or have a different, more subtle
- effect, when different options are used--but it can be a strong
- indicator that your code is making unawarranted assumptions about
- the Fortran dialect and/or underlying machine it is being compiled
- and run on.
-
- *Note Overly Convenient Command-Line Options: Overly Convenient
- Options, for information on the `-fno-automatic' and
- `-finit-local-zero' options and how to convert their use into
- selective changes in your own code.
-
- * Validate your code with `ftnchek' or a similar code-checking tool.
- `ftncheck' can be found at `ftp://ftp.netlib.org/fortran' or
- `ftp://ftp.dsm.fordham.edu'.
-
- * Try your code out using other Fortran compilers, such as `f2c'.
- If it does not work on at least one other compiler (assuming the
- compiler supports the features the code needs), that is a strong
- indicator of a bug in the code.
-
- However, even if your code works on many compilers *except* `g77',
- that does *not* mean the bug is in `g77'. It might mean the bug
- is in your code, and that `g77' simply exposes it more readily
- than other compilers.
-
-\1f
-File: g77.info, Node: Bug Lists, Next: Bug Reporting, Prev: Bug Criteria, Up: Bugs
-
-Where to Report Bugs
-====================
-
- Send bug reports for GNU Fortran to <fortran@gnu.ai.mit.edu>.
-
- Often people think of posting bug reports to a newsgroup instead of
-mailing them. This sometimes appears to work, but it has one problem
-which can be crucial: a newsgroup posting does not contain a mail path
-back to the sender. Thus, if maintainers need more information, they
-might be unable to reach you. For this reason, you should always send
-bug reports by mail to the proper mailing list.
-
- As a last resort, send bug reports on paper to:
-
- GNU Compiler Bugs
- Free Software Foundation
- 59 Temple Place - Suite 330
- Boston, MA 02111-1307, USA
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Bug Reporting, Next: Sending Patches, Prev: Bug Lists, Up: Bugs
-
-How to Report Bugs
-==================
-
- The fundamental principle of reporting bugs usefully is this:
-*report all the facts*. If you are not sure whether to state a fact or
-leave it out, state it!
-
- Often people omit facts because they think they know what causes the
-problem and they conclude that some details don't matter. Thus, you
-might assume that the name of the variable you use in an example does
-not matter. Well, probably it doesn't, but one cannot be sure.
-Perhaps the bug is a stray memory reference which happens to fetch from
-the location where that name is stored in memory; perhaps, if the name
-were different, the contents of that location would fool the compiler
-into doing the right thing despite the bug. Play it safe and give a
-specific, complete example. That is the easiest thing for you to do,
-and the most helpful.
-
- Keep in mind that the purpose of a bug report is to enable someone to
-fix the bug if it is not known. It isn't very important what happens if
-the bug is already known. Therefore, always write your bug reports on
-the assumption that the bug is not known.
-
- Sometimes people give a few sketchy facts and ask, "Does this ring a
-bell?" This cannot help us fix a bug, so it is rarely helpful. We
-respond by asking for enough details to enable us to investigate. You
-might as well expedite matters by sending them to begin with.
-(Besides, there are enough bells ringing around here as it is.)
-
- Try to make your bug report self-contained. If we have to ask you
-for more information, it is best if you include all the previous
-information in your response, as well as the information that was
-missing.
-
- Please report each bug in a separate message. This makes it easier
-for us to track which bugs have been fixed and to forward your bugs
-reports to the appropriate maintainer.
-
- Do not compress and encode any part of your bug report using programs
-such as `uuencode'. If you do so it will slow down the processing of
-your bug. If you must submit multiple large files, use `shar', which
-allows us to read your message without having to run any decompression
-programs.
-
- (As a special exception for GNU Fortran bug-reporting, at least for
-now, if you are sending more than a few lines of code, if your
-program's source file format contains "interesting" things like
-trailing spaces or strange characters, or if you need to include binary
-data files, it is acceptable to put all the files together in a `tar'
-archive, and, whether you need to do that, it is acceptable to then
-compress the single file (`tar' archive or source file) using `gzip'
-and encode it via `uuencode'. Do not use any MIME stuff--the current
-maintainer can't decode this. Using `compress' instead of `gzip' is
-acceptable, assuming you have licensed the use of the patented
-algorithm in `compress' from Unisys.)
-
- To enable someone to investigate the bug, you should include all
-these things:
-
- * The version of GNU Fortran. You can get this by running `g77'
- with the `-v' option. (Ignore any error messages that might be
- displayed when the linker is run.)
-
- Without this, we won't know whether there is any point in looking
- for the bug in the current version of GNU Fortran.
-
- * A complete input file that will reproduce the bug. If the bug is
- in the compiler proper (`f771') and you are using the C
- preprocessor, run your source file through the C preprocessor by
- doing `g77 -E SOURCEFILE > OUTFILE', then include the contents of
- OUTFILE in the bug report. (When you do this, use the same `-I',
- `-D' or `-U' options that you used in actual compilation.)
-
- A single statement is not enough of an example. In order to
- compile it, it must be embedded in a complete file of compiler
- input; and the bug might depend on the details of how this is done.
-
- Without a real example one can compile, all anyone can do about
- your bug report is wish you luck. It would be futile to try to
- guess how to provoke the bug. For example, bugs in register
- allocation and reloading frequently depend on every little detail
- of the function they happen in.
-
- * Note that you should include with your bug report any files
- included by the source file (via the `#include' or `INCLUDE'
- directive) that you send, and any files they include, and so on.
-
- It is not necessary to replace the `#include' and `INCLUDE'
- directives with the actual files in the version of the source file
- that you send, but it might make submitting the bug report easier
- in the end. However, be sure to *reproduce* the bug using the
- *exact* version of the source material you submit, to avoid
- wild-goose chases.
-
- * The command arguments you gave GNU Fortran to compile that example
- and observe the bug. For example, did you use `-O'? To guarantee
- you won't omit something important, list all the options.
-
- If we were to try to guess the arguments, we would probably guess
- wrong and then we would not encounter the bug.
-
- * The type of machine you are using, and the operating system name
- and version number. (Much of this information is printed by `g77
- -v'--if you include that, send along any additional info you have
- that you don't see clearly represented in that output.)
-
- * The operands you gave to the `configure' command when you installed
- the compiler.
-
- * A complete list of any modifications you have made to the compiler
- source. (We don't promise to investigate the bug unless it
- happens in an unmodified compiler. But if you've made
- modifications and don't tell us, then you are sending us on a
- wild-goose chase.)
-
- Be precise about these changes. A description in English is not
- enough--send a context diff for them.
-
- Adding files of your own (such as a machine description for a
- machine we don't support) is a modification of the compiler source.
-
- * Details of any other deviations from the standard procedure for
- installing GNU Fortran.
-
- * A description of what behavior you observe that you believe is
- incorrect. For example, "The compiler gets a fatal signal," or,
- "The assembler instruction at line 208 in the output is incorrect."
-
- Of course, if the bug is that the compiler gets a fatal signal,
- then one can't miss it. But if the bug is incorrect output, the
- maintainer might not notice unless it is glaringly wrong. None of
- us has time to study all the assembler code from a 50-line Fortran
- program just on the chance that one instruction might be wrong.
- We need *you* to do this part!
-
- Even if the problem you experience is a fatal signal, you should
- still say so explicitly. Suppose something strange is going on,
- such as, your copy of the compiler is out of synch, or you have
- encountered a bug in the C library on your system. (This has
- happened!) Your copy might crash and the copy here would not. If
- you said to expect a crash, then when the compiler here fails to
- crash, we would know that the bug was not happening. If you don't
- say to expect a crash, then we would not know whether the bug was
- happening. We would not be able to draw any conclusion from our
- observations.
-
- If the problem is a diagnostic when building GNU Fortran with some
- other compiler, say whether it is a warning or an error.
-
- Often the observed symptom is incorrect output when your program
- is run. Sad to say, this is not enough information unless the
- program is short and simple. None of us has time to study a large
- program to figure out how it would work if compiled correctly,
- much less which line of it was compiled wrong. So you will have
- to do that. Tell us which source line it is, and what incorrect
- result happens when that line is executed. A person who
- understands the program can find this as easily as finding a bug
- in the program itself.
-
- * If you send examples of assembler code output from GNU Fortran,
- please use `-g' when you make them. The debugging information
- includes source line numbers which are essential for correlating
- the output with the input.
-
- * If you wish to mention something in the GNU Fortran source, refer
- to it by context, not by line number.
-
- The line numbers in the development sources don't match those in
- your sources. Your line numbers would convey no convenient
- information to the maintainers.
-
- * Additional information from a debugger might enable someone to
- find a problem on a machine which he does not have available.
- However, you need to think when you collect this information if
- you want it to have any chance of being useful.
-
- For example, many people send just a backtrace, but that is never
- useful by itself. A simple backtrace with arguments conveys little
- about GNU Fortran because the compiler is largely data-driven; the
- same functions are called over and over for different RTL insns,
- doing different things depending on the details of the insn.
-
- Most of the arguments listed in the backtrace are useless because
- they are pointers to RTL list structure. The numeric values of the
- pointers, which the debugger prints in the backtrace, have no
- significance whatever; all that matters is the contents of the
- objects they point to (and most of the contents are other such
- pointers).
-
- In addition, most compiler passes consist of one or more loops that
- scan the RTL insn sequence. The most vital piece of information
- about such a loop--which insn it has reached--is usually in a
- local variable, not in an argument.
-
- What you need to provide in addition to a backtrace are the values
- of the local variables for several stack frames up. When a local
- variable or an argument is an RTX, first print its value and then
- use the GDB command `pr' to print the RTL expression that it points
- to. (If GDB doesn't run on your machine, use your debugger to call
- the function `debug_rtx' with the RTX as an argument.) In
- general, whenever a variable is a pointer, its value is no use
- without the data it points to.
-
- Here are some things that are not necessary:
-
- * A description of the envelope of the bug.
-
- Often people who encounter a bug spend a lot of time investigating
- which changes to the input file will make the bug go away and which
- changes will not affect it.
-
- This is often time consuming and not very useful, because the way
- we will find the bug is by running a single example under the
- debugger with breakpoints, not by pure deduction from a series of
- examples. You might as well save your time for something else.
-
- Of course, if you can find a simpler example to report *instead* of
- the original one, that is a convenience. Errors in the output
- will be easier to spot, running under the debugger will take less
- time, etc. Most GNU Fortran bugs involve just one function, so
- the most straightforward way to simplify an example is to delete
- all the function definitions except the one where the bug occurs.
- Those earlier in the file may be replaced by external declarations
- if the crucial function depends on them. (Exception: inline
- functions might affect compilation of functions defined later in
- the file.)
-
- However, simplification is not vital; if you don't want to do this,
- report the bug anyway and send the entire test case you used.
-
- * In particular, some people insert conditionals `#ifdef BUG' around
- a statement which, if removed, makes the bug not happen. These
- are just clutter; we won't pay any attention to them anyway.
- Besides, you should send us preprocessor output, and that can't
- have conditionals.
-
- * A patch for the bug.
-
- A patch for the bug is useful if it is a good one. But don't omit
- the necessary information, such as the test case, on the
- assumption that a patch is all we need. We might see problems
- with your patch and decide to fix the problem another way, or we
- might not understand it at all.
-
- Sometimes with a program as complicated as GNU Fortran it is very
- hard to construct an example that will make the program follow a
- certain path through the code. If you don't send the example, we
- won't be able to construct one, so we won't be able to verify that
- the bug is fixed.
-
- And if we can't understand what bug you are trying to fix, or why
- your patch should be an improvement, we won't install it. A test
- case will help us to understand.
-
- *Note Sending Patches::, for guidelines on how to make it easy for
- us to understand and install your patches.
-
- * A guess about what the bug is or what it depends on.
-
- Such guesses are usually wrong. Even the maintainer can't guess
- right about such things without first using the debugger to find
- the facts.
-
- * A core dump file.
-
- We have no way of examining a core dump for your type of machine
- unless we have an identical system--and if we do have one, we
- should be able to reproduce the crash ourselves.
-
-\1f
-File: g77.info, Node: Sending Patches, Prev: Bug Reporting, Up: Bugs
-
-Sending Patches for GNU Fortran
-===============================
-
- If you would like to write bug fixes or improvements for the GNU
-Fortran compiler, that is very helpful. Send suggested fixes to the
-bug report mailing list, <fortran@gnu.ai.mit.edu>.
-
- Please follow these guidelines so we can study your patches
-efficiently. If you don't follow these guidelines, your information
-might still be useful, but using it will take extra work. Maintaining
-GNU Fortran is a lot of work in the best of circumstances, and we can't
-keep up unless you do your best to help.
-
- * Send an explanation with your changes of what problem they fix or
- what improvement they bring about. For a bug fix, just include a
- copy of the bug report, and explain why the change fixes the bug.
-
- (Referring to a bug report is not as good as including it, because
- then we will have to look it up, and we have probably already
- deleted it if we've already fixed the bug.)
-
- * Always include a proper bug report for the problem you think you
- have fixed. We need to convince ourselves that the change is
- right before installing it. Even if it is right, we might have
- trouble judging it if we don't have a way to reproduce the problem.
-
- * Include all the comments that are appropriate to help people
- reading the source in the future understand why this change was
- needed.
-
- * Don't mix together changes made for different reasons. Send them
- *individually*.
-
- If you make two changes for separate reasons, then we might not
- want to install them both. We might want to install just one. If
- you send them all jumbled together in a single set of diffs, we
- have to do extra work to disentangle them--to figure out which
- parts of the change serve which purpose. If we don't have time
- for this, we might have to ignore your changes entirely.
-
- If you send each change as soon as you have written it, with its
- own explanation, then the two changes never get tangled up, and we
- can consider each one properly without any extra work to
- disentangle them.
-
- Ideally, each change you send should be impossible to subdivide
- into parts that we might want to consider separately, because each
- of its parts gets its motivation from the other parts.
-
- * Send each change as soon as that change is finished. Sometimes
- people think they are helping us by accumulating many changes to
- send them all together. As explained above, this is absolutely
- the worst thing you could do.
-
- Since you should send each change separately, you might as well
- send it right away. That gives us the option of installing it
- immediately if it is important.
-
- * Use `diff -c' to make your diffs. Diffs without context are hard
- for us to install reliably. More than that, they make it hard for
- us to study the diffs to decide whether we want to install them.
- Unidiff format is better than contextless diffs, but not as easy
- to read as `-c' format.
-
- If you have GNU `diff', use `diff -cp', which shows the name of the
- function that each change occurs in. (The maintainer of GNU
- Fortran currently uses `diff -rcp2N'.)
-
- * Write the change log entries for your changes. We get lots of
- changes, and we don't have time to do all the change log writing
- ourselves.
-
- Read the `ChangeLog' file to see what sorts of information to put
- in, and to learn the style that we use. The purpose of the change
- log is to show people where to find what was changed. So you need
- to be specific about what functions you changed; in large
- functions, it's often helpful to indicate where within the
- function the change was.
-
- On the other hand, once you have shown people where to find the
- change, you need not explain its purpose. Thus, if you add a new
- function, all you need to say about it is that it is new. If you
- feel that the purpose needs explaining, it probably does--but the
- explanation will be much more useful if you put it in comments in
- the code.
-
- If you would like your name to appear in the header line for who
- made the change, send us the header line.
-
- * When you write the fix, keep in mind that we can't install a
- change that would break other systems.
-
- People often suggest fixing a problem by changing
- machine-independent files such as `toplev.c' to do something
- special that a particular system needs. Sometimes it is totally
- obvious that such changes would break GNU Fortran for almost all
- users. We can't possibly make a change like that. At best it
- might tell us how to write another patch that would solve the
- problem acceptably.
-
- Sometimes people send fixes that *might* be an improvement in
- general--but it is hard to be sure of this. It's hard to install
- such changes because we have to study them very carefully. Of
- course, a good explanation of the reasoning by which you concluded
- the change was correct can help convince us.
-
- The safest changes are changes to the configuration files for a
- particular machine. These are safe because they can't create new
- bugs on other machines.
-
- Please help us keep up with the workload by designing the patch in
- a form that is good to install.
-
-\1f
-File: g77.info, Node: Service, Next: Adding Options, Prev: Bugs, Up: Top
-
-How To Get Help with GNU Fortran
-********************************
-
- If you need help installing, using or changing GNU Fortran, there
-are two ways to find it:
-
- * Look in the service directory for someone who might help you for a
- fee. The service directory is found in the file named `SERVICE'
- in the GNU CC distribution.
-
- * Send a message to <fortran@gnu.ai.mit.edu>.
-
-\1f
-File: g77.info, Node: Adding Options, Next: Projects, Prev: Service, Up: Top
-
-Adding Options
-**************
-
- To add a new command-line option to `g77', first decide what kind of
-option you wish to add. Search the `g77' and `gcc' documentation for
-one or more options that is most closely like the one you want to add
-(in terms of what kind of effect it has, and so on) to help clarify its
-nature.
-
- * *Fortran options* are options that apply only when compiling
- Fortran programs. They are accepted by `g77' and `gcc', but they
- apply only when compiling Fortran programs.
-
- * *Compiler options* are options that apply when compiling most any
- kind of program.
-
- *Fortran options* are listed in the file `gcc/f/lang-options.h',
-which is used during the build of `gcc' to build a list of all options
-that are accepted by at least one language's compiler. This list goes
-into the `lang_options' array in `gcc/toplev.c', which uses this array
-to determine whether a particular option should be offered to the
-linked-in front end for processing by calling `lang_option_decode',
-which, for `g77', is in `gcc/f/com.c' and just calls
-`ffe_decode_option'.
-
- If the linked-in front end "rejects" a particular option passed to
-it, `toplev.c' just ignores the option, because *some* language's
-compiler is willing to accept it.
-
- This allows commands like `gcc -fno-asm foo.c bar.f' to work, even
-though Fortran compilation does not currently support the `-fno-asm'
-option; even though the `f771' version of `lang_decode_option' rejects
-`-fno-asm', `toplev.c' doesn't produce a diagnostic because some other
-language (C) does accept it.
-
- This also means that commands like `g77 -fno-asm foo.f' yield no
-diagnostics, despite the fact that no phase of the command was able to
-recognize and process `-fno-asm'--perhaps a warning about this would be
-helpful if it were possible.
-
- Code that processes Fortran options is found in `gcc/f/top.c',
-function `ffe_decode_option'. This code needs to check positive and
-negative forms of each option.
-
- The defaults for Fortran options are set in their global
-definitions, also found in `gcc/f/top.c'. Many of these defaults are
-actually macros defined in `gcc/f/target.h', since they might be
-machine-specific. However, since, in practice, GNU compilers should
-behave the same way on all configurations (especially when it comes to
-language constructs), the practice of setting defaults in `target.h' is
-likely to be deprecated and, ultimately, stopped in future versions of
-`g77'.
-
- Accessor macros for Fortran options, used by code in the `g77' FFE,
-are defined in `gcc/f/top.h'.
-
- *Compiler options* are listed in `gcc/toplev.c' in the array
-`f_options'. An option not listed in `lang_options' is looked up in
-`f_options' and handled from there.
-
- The defaults for compiler options are set in the global definitions
-for the corresponding variables, some of which are in `gcc/toplev.c'.
-
- You can set different defaults for *Fortran-oriented* or
-*Fortran-reticent* compiler options by changing the way `f771' handles
-the `-fset-g77-defaults' option, which is always provided as the first
-option when called by `g77' or `gcc'.
-
- This code is in `ffe_decode_options' in `gcc/f/top.c'. Have it
-change just the variables that you want to default to a different
-setting for Fortran compiles compared to compiles of other languages.
-
- The `-fset-g77-defaults' option is passed to `f771' automatically
-because of the specification information kept in `gcc/f/lang-specs.h'.
-This file tells the `gcc' command how to recognize, in this case,
-Fortran source files (those to be preprocessed, and those that are
-not), and further, how to invoke the appropriate programs (including
-`f771') to process those source files.
-
- It is in `gcc/f/lang-specs.h' that `-fset-g77-defaults',
-`-fversion', and other options are passed, as appropriate, even when
-the user has not explicitly specified them. Other "internal" options
-such as `-quiet' also are passed via this mechanism.
-
-\1f
-File: g77.info, Node: Projects, Next: Diagnostics, Prev: Adding Options, Up: Top
-
-Projects
-********
-
- If you want to contribute to `g77' by doing research, design,
-specification, documentation, coding, or testing, the following
-information should give you some ideas.
-
-* Menu:
-
-* Efficiency:: Make `g77' itself compile code faster.
-* Better Optimization:: Teach `g77' to generate faster code.
-* Simplify Porting:: Make `g77' easier to configure, build,
- and install.
-* More Extensions:: Features many users won't know to ask for.
-* Machine Model:: `g77' should better leverage `gcc'.
-* Internals Documentation:: Make maintenance easier.
-* Internals Improvements:: Make internals more robust.
-* Better Diagnostics:: Make using `g77' on new code easier.
-
-\1f
-File: g77.info, Node: Efficiency, Next: Better Optimization, Up: Projects
-
-Improve Efficiency
-==================
-
- Don't bother doing any performance analysis until most of the
-following items are taken care of, because there's no question they
-represent serious space/time problems, although some of them show up
-only given certain kinds of (popular) input.
-
- * Improve `malloc' package and its uses to specify more info about
- memory pools and, where feasible, use obstacks to implement them.
-
- * Skip over uninitialized portions of aggregate areas (arrays,
- `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output.
- This would reduce memory usage for large initialized aggregate
- areas, even ones with only one initialized element.
-
- As of version 0.5.18, a portion of this item has already been
- accomplished.
-
- * Prescan the statement (in `sta.c') so that the nature of the
- statement is determined as much as possible by looking entirely at
- its form, and not looking at any context (previous statements,
- including types of symbols). This would allow ripping out of the
- statement-confirmation, symbol retraction/confirmation, and
- diagnostic inhibition mechanisms. Plus, it would result in
- much-improved diagnostics. For example, `CALL
- some-intrinsic(...)', where the intrinsic is not a subroutine
- intrinsic, would result actual error instead of the
- unimplemented-statement catch-all.
-
- * Throughout `g77', don't pass line/column pairs where a simple
- `ffewhere' type, which points to the error as much as is desired
- by the configuration, will do, and don't pass `ffelexToken' types
- where a simple `ffewhere' type will do. Then, allow new default
- configuration of `ffewhere' such that the source line text is not
- preserved, and leave it to things like Emacs' next-error function
- to point to them (now that `next-error' supports column, or,
- perhaps, character-offset, numbers). The change in calling
- sequences should improve performance somewhat, as should not
- having to save source lines. (Whether this whole item will
- improve performance is questionable, but it should improve
- maintainability.)
-
- * Handle `DATA (A(I),I=1,1000000)/1000000*2/' more efficiently,
- especially as regards the assembly output. Some of this might
- require improving the back end, but lots of improvement in
- space/time required in `g77' itself can be fairly easily obtained
- without touching the back end. Maybe type-conversion, where
- necessary, can be speeded up as well in cases like the one shown
- (converting the `2' into `2.').
-
- * If analysis shows it to be worthwhile, optimize `lex.c'.
-
- * Consider redesigning `lex.c' to not need any feedback during
- tokenization, by keeping track of enough parse state on its own.
-
-\1f
-File: g77.info, Node: Better Optimization, Next: Simplify Porting, Prev: Efficiency, Up: Projects
-
-Better Optimization
-===================
-
- Much of this work should be put off until after `g77' has all the
-features necessary for its widespread acceptance as a useful F77
-compiler. However, perhaps this work can be done in parallel during
-the feature-adding work.
-
- * Do the equivalent of the trick of putting `extern inline' in front
- of every function definition in `libf2c' and #include'ing the
- resulting file in `f2c'+`gcc'--that is, inline all
- run-time-library functions that are at all worth inlining. (Some
- of this has already been done, such as for integral
- exponentiation.)
-
- * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types
- line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make
- `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'.
- (This is now done for `COMPLEX' variables.)
-
- * Design and implement Fortran-specific optimizations that don't
- really belong in the back end, or where the front end needs to
- give the back end more info than it currently does.
-
- * Design and implement a new run-time library interface, with the
- code going into `libgcc' so no special linking is required to link
- Fortran programs using standard language features. This library
- would speed up lots of things, from I/O (using precompiled formats,
- doing just one, or, at most, very few, calls for arrays or array
- sections, and so on) to general computing (array/section
- implementations of various intrinsics, implementation of commonly
- performed loops that aren't likely to be optimally compiled
- otherwise, etc.).
-
- Among the important things the library would do are:
-
- * Be a one-stop-shop-type library, hence shareable and usable
- by all, in that what are now library-build-time options in
- `libf2c' would be moved at least to the `g77' compile phase,
- if not to finer grains (such as choosing how list-directed
- I/O formatting is done by default at `OPEN' time, for
- preconnected units via options or even statements in the main
- program unit, maybe even on a per-I/O basis with appropriate
- pragma-like devices).
-
- * Probably requiring the new library design, change interface to
- normally have `COMPLEX' functions return their values in the way
- `gcc' would if they were declared `__complex__ float', rather than
- using the mechanism currently used by `CHARACTER' functions
- (whereby the functions are compiled as returning void and their
- first arg is a pointer to where to store the result). (Don't
- append underscores to external names for `COMPLEX' functions in
- some cases once `g77' uses `gcc' rather than `f2c' calling
- conventions.)
-
- * Do something useful with `doiter' references where possible. For
- example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop
- that uses `I' as the iteration variable, and the back end might
- find that info useful in determining whether it needs to read `I'
- back into a register after the call. (It normally has to do that,
- unless it knows `FOO' never modifies its passed-by-reference
- argument, which is rarely the case for Fortran-77 code.)
-
-\1f
-File: g77.info, Node: Simplify Porting, Next: More Extensions, Prev: Better Optimization, Up: Projects
-
-Simplify Porting
-================
-
- Making `g77' easier to configure, port, build, and install, either
-as a single-system compiler or as a cross-compiler, would be very
-useful.
-
- * A new library (replacing `libf2c') should improve portability as
- well as produce more optimal code. Further, `g77' and the new
- library should conspire to simplify naming of externals, such as
- by removing unnecessarily added underscores, and to
- reduce/eliminate the possibility of naming conflicts, while making
- debugger more straightforward.
-
- Also, it should make multi-language applications more feasible,
- such as by providing Fortran intrinsics that get Fortran unit
- numbers given C `FILE *' descriptors.
-
- * Possibly related to a new library, `g77' should produce the
- equivalent of a `gcc' `main(argc, argv)' function when it compiles
- a main program unit, instead of compiling something that must be
- called by a library implementation of `main()'.
-
- This would do many useful things such as provide more flexibility
- in terms of setting up exception handling, not requiring
- programmers to start their debugging sessions with `breakpoint
- MAIN__' followed by `run', and so on.
-
- * The GBE needs to understand the difference between alignment
- requirements and desires. For example, on Intel x86 machines,
- `g77' currently imposes overly strict alignment requirements, due
- to the back end, but it would be useful for Fortran and C
- programmers to be able to override these *recommendations* as long
- as they don't violate the actual processor *requirements*.
-
-\1f
-File: g77.info, Node: More Extensions, Next: Machine Model, Prev: Simplify Porting, Up: Projects
-
-More Extensions
-===============
-
- These extensions are not the sort of things users ask for "by name",
-but they might improve the usability of `g77', and Fortran in general,
-in the long run. Some of these items really pertain to improving `g77'
-internals so that some popular extensions can be more easily supported.
-
- * Look through all the documentation on the GNU Fortran language,
- dialects, compiler, missing features, bugs, and so on. Many
- mentions of incomplete or missing features are sprinkled
- throughout. It is not worth repeating them here.
-
- * Support arbitrary operands for concatenation, even in contexts
- where run-time allocation is required.
-
- * Consider adding a `NUMERIC' type to designate typeless numeric
- constants, named and unnamed. The idea is to provide a
- forward-looking, effective replacement for things like the
- old-style `PARAMETER' statement when people really need
- typelessness in a maintainable, portable, clearly documented way.
- Maybe `TYPELESS' would include `CHARACTER', `POINTER', and
- whatever else might come along. (This is not really a call for
- polymorphism per se, just an ability to express limited, syntactic
- polymorphism.)
-
- * Support `OPEN(...,KEY=(...),...)'.
-
- * Support arbitrary file unit numbers, instead of limiting them to 0
- through `MXUNIT-1'. (This is a `libf2c' issue.)
-
- * `OPEN(NOSPANBLOCKS,...)' is treated as
- `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first
- example is invalid. Make sure this is what users of this feature
- would expect.
-
- * Currently `g77' disallows `READ(1'10)' since it is an obnoxious
- syntax, but supporting it might be pretty easy if needed. More
- details are needed, such as whether general expressions separated
- by an apostrophe are supported, or maybe the record number can be
- a general expression, and so on.
-
- * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully.
- Currently there is no support at all for `%FILL' in `STRUCTURE'
- and related syntax, whereas the rest of the stuff has at least
- some parsing support. This requires either major changes to
- `libf2c' or its replacement.
-
- * F90 and `g77' probably disagree about label scoping relative to
- `INTERFACE' and `END INTERFACE', and their contained procedure
- interface bodies (blocks?).
-
- * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added
- after S8.112.
-
- * Empty-statement handling (10 ;;CONTINUE;;) probably isn't
- consistent with the final form of the standard (it was vague at
- S8.112).
-
- * It seems to be an "open" question whether a file, immediately
- after being `OPEN'ed,is positioned at the beginning, the end, or
- wherever--it might be nice to offer an option of opening to
- "undefined" status, requiring an explicit absolute-positioning
- operation to be performed before any other (besides `CLOSE') to
- assist in making applications port to systems (some IBM?) that
- `OPEN' to the end of a file or some such thing.
-
-\1f
-File: g77.info, Node: Machine Model, Next: Internals Documentation, Prev: More Extensions, Up: Projects
-
-Machine Model
-=============
-
- This items pertain to generalizing `g77''s view of the machine model
-to more fully accept whatever the GBE provides it via its configuration.
-
- * Switch to using `REAL_VALUE_TYPE' to represent floating-point
- constants exclusively so the target float format need not be
- required. This means changing the way `g77' handles
- initialization of aggregate areas having more than one type, such
- as `REAL' and `INTEGER', because currently it initializes them as
- if they were arrays of `char' and uses the bit patterns of the
- constants of the various types in them to determine what to stuff
- in elements of the arrays.
-
- * Rely more and more on back-end info and capabilities, especially
- in the area of constants (where having the `g77' front-end's IL
- just store the appropriate tree nodes containing constants might
- be best).
-
- * Suite of C and Fortran programs that a user/administrator can run
- on a machine to help determine the configuration for `g77' before
- building and help determine if the compiler works (especially with
- whatever libraries are installed) after building.
-
-\1f
-File: g77.info, Node: Internals Documentation, Next: Internals Improvements, Prev: Machine Model, Up: Projects
-
-Internals Documentation
-=======================
-
- Better info on how `g77' works and how to port it is needed. Much
-of this should be done only after the redesign planned for 0.6 is
-complete.
-
-\1f
-File: g77.info, Node: Internals Improvements, Next: Better Diagnostics, Prev: Internals Documentation, Up: Projects
-
-Internals Improvements
-======================
-
- Some more items that would make `g77' more reliable and easier to
-maintain:
-
- * Generally make expression handling focus more on critical syntax
- stuff, leaving semantics to callers. For example, anything a
- caller can check, semantically, let it do so, rather than having
- `expr.c' do it. (Exceptions might include things like diagnosing
- `FOO(I--K:)=BAR' where `FOO' is a `PARAMETER'--if it seems
- important to preserve the left-to-right-in-source order of
- production of diagnostics.)
-
- * Come up with better naming conventions for `-D' to establish
- requirements to achieve desired implementation dialect via
- `proj.h'.
-
- * Clean up used tokens and `ffewhere's in `ffeglobal_terminate_1'.
-
- * Replace `sta.c' `outpooldisp' mechanism with `malloc_pool_use'.
-
- * Check for `opANY' in more places in `com.c', `std.c', and `ste.c',
- and get rid of the `opCONVERT(opANY)' kludge (after determining if
- there is indeed no real need for it).
-
- * Utility to read and check `bad.def' messages and their references
- in the code, to make sure calls are consistent with message
- templates.
-
- * Search and fix `&ffe...' and similar so that `ffe...ptr...' macros
- are available instead (a good argument for wishing this could have
- written all this stuff in C++, perhaps). On the other hand, it's
- questionable whether this sort of improvement is really necessary,
- given the availability of tools such as Emacs and Perl, which make
- finding any address-taking of structure members easy enough?
-
- * Some modules truly export the member names of their structures
- (and the structures themselves), maybe fix this, and fix other
- modules that just appear to as well (by appending `_', though it'd
- be ugly and probably not worth the time).
-
- * Implement C macros `RETURNS(value)' and `SETS(something,value)' in
- `proj.h' and use them throughout `g77' source code (especially in
- the definitions of access macros in `.h' files) so they can be
- tailored to catch code writing into a `RETURNS()' or reading from
- a `SETS()'.
-
- * Decorate throughout with `const' and other such stuff.
-
- * All F90 notational derivations in the source code are still based
- on the S8.112 version of the draft standard. Probably should
- update to the official standard, or put documentation of the rules
- as used in the code...uh...in the code.
-
- * Some `ffebld_new' calls (those outside of `ffeexpr.c' or inside
- but invoked via paths not involving `ffeexpr_lhs' or
- `ffeexpr_rhs') might be creating things in improper pools, leading
- to such things staying around too long or (doubtful, but possible
- and dangerous) not long enough.
-
- * Some `ffebld_list_new' (or whatever) calls might not be matched by
- `ffebld_list_bottom' (or whatever) calls, which might someday
- matter. (It definitely is not a problem just yet.)
-
- * Probably not doing clean things when we fail to `EQUIVALENCE'
- something due to alignment/mismatch or other problems--they end up
- without `ffestorag' objects, so maybe the backend (and other parts
- of the front end) can notice that and handle like an `opANY' (do
- what it wants, just don't complain or crash). Most of this seems
- to have been addressed by now, but a code review wouldn't hurt.
-
-\1f
-File: g77.info, Node: Better Diagnostics, Prev: Internals Improvements, Up: Projects
-
-Better Diagnostics
-==================
-
- These are things users might not ask about, or that need to be
-looked into, before worrying about. Also here are items that involve
-reducing unnecessary diagnostic clutter.
-
- * When `FUNCTION' and `ENTRY' point types disagree (`CHARACTER'
- lengths, type classes, and so on), `ANY'-ize the offending `ENTRY'
- point and any *new* dummies it specifies.
-
- * Speed up and improve error handling for data when repeat-count is
- specified. For example, don't output 20 unnecessary messages
- after the first necessary one for:
-
- INTEGER X(20)
- CONTINUE
- DATA (X(I), J= 1, 20) /20*5/
- END
-
- (The `CONTINUE' statement ensures the `DATA' statement is
- processed in the context of executable, not specification,
- statements.)
-
-\1f
-File: g77.info, Node: Diagnostics, Next: Index, Prev: Projects, Up: Top
-
-Diagnostics
-***********
-
- Some diagnostics produced by `g77' require sufficient explanation
-that the explanations are given below, and the diagnostics themselves
-identify the appropriate explanation.
-
- Identification uses the GNU Info format--specifically, the `info'
-command that displays the explanation is given in within square
-brackets in the diagnostic. For example:
-
- foo.f:5: Invalid statement [info -f g77 M FOOEY]
-
- More details about the above diagnostic is found in the `g77' Info
-documentation, menu item `M', submenu item `FOOEY', which is displayed
-by typing the UNIX command `info -f g77 M FOOEY'.
-
- Other Info readers, such as EMACS, may be just as easily used to
-display the pertinent node. In the above example, `g77' is the Info
-document name, `M' is the top-level menu item to select, and, in that
-node (named `Diagnostics', the name of this chapter, which is the very
-text you're reading now), `FOOEY' is the menu item to select.
-
-* Menu:
-
-* CMPAMBIG:: Ambiguous use of intrinsic.
-* EXPIMP:: Intrinsic used explicitly and implicitly.
-* INTGLOB:: Intrinsic also used as name of global.
-* LEX:: Various lexer messages
-* GLOBALS:: Disagreements about globals.
-
-\1f
-File: g77.info, Node: CMPAMBIG, Next: EXPIMP, Up: Diagnostics
-
-`CMPAMBIG'
-==========
-
- Ambiguous use of intrinsic INTRINSIC ...
-
- The type of the argument to the invocation of the INTRINSIC
-intrinsic is a `COMPLEX' type other than `COMPLEX(KIND=1)'. Typically,
-it is `COMPLEX(KIND=2)', also known as `DOUBLE COMPLEX'.
-
- The interpretation of this invocation depends on the particular
-dialect of Fortran for which the code was written. Some dialects
-convert the real part of the argument to `REAL(KIND=1)', thus losing
-precision; other dialects, and Fortran 90, do no such conversion.
-
- So, GNU Fortran rejects such invocations except under certain
-circumstances, to avoid making an incorrect assumption that results in
-generating the wrong code.
-
- To determine the dialect of the program unit, perhaps even whether
-that particular invocation is properly coded, determine how the result
-of the intrinsic is used.
-
- The result of INTRINSIC is expected (by the original programmer) to
-be `REAL(KIND=1)' (the non-Fortran-90 interpretation) if:
-
- * It is passed as an argument to a procedure that explicitly or
- implicitly declares that argument `REAL(KIND=1)'.
-
- For example, a procedure with no `DOUBLE PRECISION' or `IMPLICIT
- DOUBLE PRECISION' statement specifying the dummy argument
- corresponding to an actual argument of `REAL(Z)', where `Z' is
- declared `DOUBLE COMPLEX', strongly suggests that the programmer
- expected `REAL(Z)' to return `REAL(KIND=1)' instead of
- `REAL(KIND=2)'.
-
- * It is used in a context that would otherwise not include any
- `REAL(KIND=2)' but where treating the INTRINSIC invocation as
- `REAL(KIND=2)' would result in unnecessary promotions and
- (typically) more expensive operations on the wider type.
-
- For example:
-
- DOUBLE COMPLEX Z
- ...
- R(1) = T * REAL(Z)
-
- The above example suggests the programmer expected the real part
- of `Z' to be converted to `REAL(KIND=1)' before being multiplied
- by `T' (presumed, along with `R' above, to be type `REAL(KIND=1)').
-
- Otherwise, the conversion would have to be delayed until after the
- multiplication, requiring not only an extra conversion (of `T' to
- `REAL(KIND=2)'), but a (typically) more expensive multiplication
- (a double-precision multiplication instead of a single-precision
- one).
-
- The result of INTRINSIC is expected (by the original programmer) to
-be `REAL(KIND=2)' (the Fortran 90 interpretation) if:
-
- * It is passed as an argument to a procedure that explicitly or
- implicitly declares that argument `REAL(KIND=2)'.
-
- For example, a procedure specifying a `DOUBLE PRECISION' dummy
- argument corresponding to an actual argument of `REAL(Z)', where
- `Z' is declared `DOUBLE COMPLEX', strongly suggests that the
- programmer expected `REAL(Z)' to return `REAL(KIND=2)' instead of
- `REAL(KIND=1)'.
-
- * It is used in an expression context that includes other
- `REAL(KIND=2)' operands, or is assigned to a `REAL(KIND=2)'
- variable or array element.
-
- For example:
-
- DOUBLE COMPLEX Z
- DOUBLE PRECISION R, T
- ...
- R(1) = T * REAL(Z)
-
- The above example suggests the programmer expected the real part
- of `Z' to *not* be converted to `REAL(KIND=1)' by the `REAL()'
- intrinsic.
-
- Otherwise, the conversion would have to be immediately followed by
- a conversion back to `REAL(KIND=2)', losing the original, full
- precision of the real part of `Z', before being multiplied by `T'.
-
- Once you have determined whether a particular invocation of INTRINSIC
-expects the Fortran 90 interpretation, you can:
-
- * Change it to `DBLE(EXPR)' (if INTRINSIC is `REAL') or
- `DIMAG(EXPR)' (if INTRINSIC is `AIMAG') if it expected the Fortran
- 90 interpretation.
-
- This assumes EXPR is `COMPLEX(KIND=2)'--if it is some other type,
- such as `COMPLEX*32', you should use the appropriate intrinsic,
- such as the one to convert to `REAL*16' (perhaps `DBLEQ()' in
- place of `DBLE()', and `QIMAG()' in place of `DIMAG()').
-
- * Change it to `REAL(INTRINSIC(EXPR))', otherwise. This converts to
- `REAL(KIND=1)' in all working Fortran compilers.
-
- If you don't want to change the code, and you are certain that all
-ambiguous invocations of INTRINSIC in the source file have the same
-expectation regarding interpretation, you can:
-
- * Compile with the `g77' option `-ff90', to enable the Fortran 90
- interpretation.
-
- * Compile with the `g77' options `-fno-f90 -fugly-complex', to
- enable the non-Fortran-90 interpretations.
-
- *Note REAL() and AIMAG() of Complex::, for more information on this
-issue.
-
- Note: If the above suggestions don't produce enough evidence as to
-whether a particular program expects the Fortran 90 interpretation of
-this ambiguous invocation of INTRINSIC, there is one more thing you can
-try.
-
- If you have access to most or all the compilers used on the program
-to create successfully tested and deployed executables, read the
-documentation for, and *also* test out, each compiler to determine how
-it treats the INTRINSIC intrinsic in this case. (If all the compilers
-don't agree on an interpretation, there might be lurking bugs in the
-deployed versions of the program.)
-
- The following sample program might help:
-
- PROGRAM JCB003
- C
- C Written by James Craig Burley 1997-02-23.
- C Contact via Internet email: burley@gnu.ai.mit.edu
- C
- C Determine how compilers handle non-standard REAL
- C and AIMAG on DOUBLE COMPLEX operands.
- C
- DOUBLE COMPLEX Z
- REAL R
- Z = (3.3D0, 4.4D0)
- R = Z
- CALL DUMDUM(Z, R)
- R = REAL(Z) - R
- IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90'
- IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90'
- R = 4.4D0
- CALL DUMDUM(Z, R)
- R = AIMAG(Z) - R
- IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90'
- IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90'
- END
- C
- C Just to make sure compiler doesn't use naive flow
- C analysis to optimize away careful work above,
- C which might invalidate results....
- C
- SUBROUTINE DUMDUM(Z, R)
- DOUBLE COMPLEX Z
- REAL R
- END
-
- If the above program prints contradictory results on a particular
-compiler, run away!
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: EXPIMP, Next: INTGLOB, Prev: CMPAMBIG, Up: Diagnostics
-
-`EXPIMP'
-========
-
- Intrinsic INTRINSIC referenced ...
-
- The INTRINSIC is explicitly declared in one program unit in the
-source file and implicitly used as an intrinsic in another program unit
-in the same source file.
-
- This diagnostic is designed to catch cases where a program might
-depend on using the name INTRINSIC as an intrinsic in one program unit
-and as a global name (such as the name of a subroutine or function) in
-another, but `g77' recognizes the name as an intrinsic in both cases.
-
- After verifying that the program unit making implicit use of the
-intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
-INTRINSIC' statement to that program unit to prevent this warning.
-
- This and related warnings are disabled by using the `-Wno-globals'
-option when compiling.
-
- Note that this warning is not issued for standard intrinsics.
-Standard intrinsics include those described in the FORTRAN 77 standard
-and, if `-ff90' is specified, those described in the Fortran 90
-standard. Such intrinsics are not as likely to be confused with user
-procedures as intrinsics provided as extensions to the standard by
-`g77'.
-
-\1f
-File: g77.info, Node: INTGLOB, Next: LEX, Prev: EXPIMP, Up: Diagnostics
-
-`INTGLOB'
-=========
-
- Same name `INTRINSIC' given ...
-
- The name INTRINSIC is used for a global entity (a common block or a
-program unit) in one program unit and implicitly used as an intrinsic
-in another program unit.
-
- This diagnostic is designed to catch cases where a program intends
-to use a name entirely as a global name, but `g77' recognizes the name
-as an intrinsic in the program unit that references the name, a
-situation that would likely produce incorrect code.
-
- For example:
-
- INTEGER FUNCTION TIME()
- ...
- END
- ...
- PROGRAM SAMP
- INTEGER TIME
- PRINT *, 'Time is ', TIME()
- END
-
- The above example defines a program unit named `TIME', but the
-reference to `TIME' in the main program unit `SAMP' is normally treated
-by `g77' as a reference to the intrinsic `TIME()' (unless a
-command-line option that prevents such treatment has been specified).
-
- As a result, the program `SAMP' will *not* invoke the `TIME'
-function in the same source file.
-
- Since `g77' recognizes `libU77' procedures as intrinsics, and since
-some existing code uses the same names for its own procedures as used
-by some `libU77' procedures, this situation is expected to arise often
-enough to make this sort of warning worth issuing.
-
- After verifying that the program unit making implicit use of the
-intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
-INTRINSIC' statement to that program unit to prevent this warning.
-
- Or, if you believe the program unit is designed to invoke the
-program-defined procedure instead of the intrinsic (as recognized by
-`g77'), add an `EXTERNAL INTRINSIC' statement to the program unit that
-references the name to prevent this warning.
-
- This and related warnings are disabled by using the `-Wno-globals'
-option when compiling.
-
- Note that this warning is not issued for standard intrinsics.
-Standard intrinsics include those described in the FORTRAN 77 standard
-and, if `-ff90' is specified, those described in the Fortran 90
-standard. Such intrinsics are not as likely to be confused with user
-procedures as intrinsics provided as extensions to the standard by
-`g77'.
-
-\1f
-File: g77.info, Node: LEX, Next: GLOBALS, Prev: INTGLOB, Up: Diagnostics
-
-`LEX'
-=====
-
- Unrecognized character ...
- Invalid first character ...
- Line too long ...
- Non-numeric character ...
- Continuation indicator ...
- Label at ... invalid with continuation line indicator ...
- Character constant ...
- Continuation line ...
- Statement at ... begins with invalid token
-
- Although the diagnostics identify specific problems, they can be
-produced when general problems such as the following occur:
-
- * The source file contains something other than Fortran code.
-
- If the code in the file does not look like many of the examples
- elsewhere in this document, it might not be Fortran code. (Note
- that Fortran code often is written in lower case letters, while
- the examples in this document use upper case letters, for
- stylistic reasons.)
-
- For example, if the file contains lots of strange-looking
- characters, it might be APL source code; if it contains lots of
- parentheses, it might be Lisp source code; if it contains lots of
- bugs, it might be C++ source code.
-
- * The source file contains free-form Fortran code, but `-ffree-form'
- was not specified on the command line to compile it.
-
- Free form is a newer form for Fortran code. The older, classic
- form is called fixed form.
-
- Fixed-form code is visually fairly distinctive, because numerical
- labels and comments are all that appear in the first five columns
- of a line, the sixth column is reserved to denote continuation
- lines, and actual statements start at or beyond column 7. Spaces
- generally are not significant, so if you see statements such as
- `REALX,Y' and `DO10I=1,100', you are looking at fixed-form code.
- Comment lines are indicated by the letter `C' or the symbol `*' in
- column 1. (Some code uses `!' or `/*' to begin in-line comments,
- which many compilers support.)
-
- Free-form code is distinguished from fixed-form source primarily
- by the fact that statements may start anywhere. (If lots of
- statements start in columns 1 through 6, that's a strong indicator
- of free-form source.) Consecutive keywords must be separated by
- spaces, so `REALX,Y' is not valid, while `REAL X,Y' is. There are
- no comment lines per se, but `!' starts a comment anywhere in a
- line (other than within a character or hollerith constant).
-
- *Note Source Form::, for more information.
-
- * The source file is in fixed form and has been edited without
- sensitivity to the column requirements.
-
- Statements in fixed-form code must be entirely contained within
- columns 7 through 72 on a given line. Starting them "early" is
- more likely to result in diagnostics than finishing them "late",
- though both kinds of errors are often caught at compile time.
-
- For example, if the following code fragment is edited by following
- the commented instructions literally, the result, shown afterward,
- would produce a diagnostic when compiled:
-
- C On XYZZY systems, remove "C" on next line:
- C CALL XYZZY_RESET
-
- The result of editing the above line might be:
-
- C On XYZZY systems, remove "C" on next line:
- CALL XYZZY_RESET
-
- However, that leaves the first `C' in the `CALL' statement in
- column 6, making it a comment line, which is not really what the
- author intended, and which is likely to result in one of the
- above-listed diagnostics.
-
- *Replacing* the `C' in column 1 with a space is the proper change
- to make, to ensure the `CALL' keyword starts in or after column 7.
-
- Another common mistake like this is to forget that fixed-form
- source lines are significant through only column 72, and that,
- normally, any text beyond column 72 is ignored or is diagnosed at
- compile time.
-
- *Note Source Form::, for more information.
-
- * The source file requires preprocessing, and the preprocessing is
- not being specified at compile time.
-
- A source file containing lines beginning with `#define',
- `#include', `#if', and so on is likely one that requires
- preprocessing.
-
- If the file's suffix is `.f' or `.for', the file will normally be
- compiled *without* preprocessing by `g77'.
-
- Change the file's suffix from `.f' to `.F' (or, on systems with
- case-insensitive file names, to `.fpp') or from `.for' to `.fpp'.
- `g77' compiles files with such names *with* preprocessing.
-
- Or, learn how to use `gcc''s `-x' option to specify the language
- `f77-cpp-input' for Fortran files that require preprocessing.
- *Note gcc: (Using and Porting GNU CC)Overall Options.
-
- * The source file is preprocessed, and the results of preprocessing
- result in syntactic errors that are not necessarily obvious to
- someone examining the source file itself.
-
- Examples of errors resulting from preprocessor macro expansion
- include exceeding the line-length limit, improperly starting,
- terminating, or incorporating the apostrophe or double-quote in a
- character constant, improperly forming a hollerith constant, and
- so on.
-
- *Note Options Controlling the Kind of Output: Overall Options, for
- suggestions about how to use, and not use, preprocessing for
- Fortran code.
-
-\1f
-File: g77.info, Node: GLOBALS, Prev: LEX, Up: Diagnostics
-
-`GLOBALS'
-=========
-
- Global name NAME defined at ... already defined...
- Global name NAME at ... has different type...
- Too many arguments passed to NAME at ...
- Too few arguments passed to NAME at ...
- Argument #N of NAME is ...
-
- These messages all identify disagreements about the global procedure
-named NAME among different program units (usually including NAME
-itself).
-
- These disagreements, if not diagnosed, could result in a compiler
-crash if the compiler attempted to inline a reference to NAME within a
-calling program unit that disagreed with the NAME program unit
-regarding whether the procedure is a subroutine or function, the type
-of the return value of the procedure (if it is a function), the number
-of arguments the procedure accepts, or the type of each argument.
-
- Such disagreements *should* be fixed in the Fortran code itself.
-However, if that is not immediately practical, and the code has been
-working for some time, it is possible it will work when compiled by
-`g77' with the `-fno-globals' option.
-
- The `-fno-globals' option disables these diagnostics, and also
-disables all inlining of references to global procedures to avoid
-compiler crashes. The diagnostics are actually produced, but as
-warnings, unless the `-Wno-globals' option also is specified.
-
- After using `-fno-globals' to work around these problems, it is wise
-to stop using that option and address them by fixing the Fortran code,
-because such problems, while they might not actually result in bugs on
-some systems, indicate that the code is not as portable as it could be.
-In particular, the code might appear to work on a particular system,
-but have bugs that affect the reliability of the data without
-exhibiting any other outward manifestations of the bugs.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Overall Options, Next: Shorthand Options, Prev: Option Summary, Up: Invoking G77
-
-Options Controlling the Kind of Output
-======================================
-
- Compilation can involve as many as four stages: preprocessing, code
-generation (often what is really meant by the term "compilation"),
-assembly, and linking, always in that order. The first three stages
-apply to an individual source file, and end by producing an object
-file; linking combines all the object files (those newly compiled, and
-those specified as input) into an executable file.
-
- For any given input file, the file name suffix determines what kind
-of program is contained in the file--that is, the language in which the
-program is written is generally indicated by the suffix. Suffixes
-specific to GNU Fortran are listed below. *Note gcc: (Using and
-Porting GNU CC)Overall Options, for information on suffixes recognized
-by GNU CC.
-
-`FILE.f'
-
-`FILE.for'
- Fortran source code that should not be preprocessed.
-
- Such source code cannot contain any preprocessor directives, such
- as `#include', `#define', `#if', and so on.
-
-`FILE.F'
-
-`FILE.fpp'
- Fortran source code that must be preprocessed (by the C
- preprocessor `cpp', which is part of GNU CC).
-
- Note that preprocessing is not extended to the contents of files
- included by the `INCLUDE' directive--the `#include' preprocessor
- directive must be used instead.
-
-`FILE.r'
- Ratfor source code, which must be preprocessed by the `ratfor'
- command, which is available separately (as it is not yet part of
- the GNU Fortran distribution).
-
- UNIX users typically use the `FILE.f' and `FILE.F' nomenclature.
-Users of other operating systems, especially those that cannot
-distinguish upper-case letters from lower-case letters in their file
-names, typically use the `FILE.for' and `FILE.fpp' nomenclature.
-
- Use of the preprocessor `cpp' allows use of C-like constructs such
-as `#define' and `#include', but can lead to unexpected, even mistaken,
-results due to Fortran's source file format. It is recommended that
-use of the C preprocessor be limited to `#include' and, in conjunction
-with `#define', only `#if' and related directives, thus avoiding
-in-line macro expansion entirely. This recommendation applies
-especially when using the traditional fixed source form. With free
-source form, fewer unexpected transformations are likely to happen, but
-use of constructs such as Hollerith and character constants can
-nevertheless present problems, especially when these are continued
-across multiple source lines. These problems result, primarily, from
-differences between the way such constants are interpreted by the C
-preprocessor and by a Fortran compiler.
-
- Another example of a problem that results from using the C
-preprocessor is that a Fortran comment line that happens to contain any
-characters "interesting" to the C preprocessor, such as a backslash at
-the end of the line, is not recognized by the preprocessor as a comment
-line, so instead of being passed through "raw", the line is edited
-according to the rules for the preprocessor. For example, the
-backslash at the end of the line is removed, along with the subsequent
-newline, resulting in the next line being effectively commented
-out--unfortunate if that line is a non-comment line of important code!
-
- *Note:* The `-traditional' and `-undef' flags are supplied to `cpp'
-by default, to avoid unpleasant surprises. *Note Options Controlling
-the Preprocessor: (gcc)Preprocessor Options. This means that ANSI C
-preprocessor features (such as the `#' operator) aren't available, and
-only variables in the C reserved namespace (generally, names with a
-leading underscore) are liable to substitution by C predefines. Thus,
-if you want to do system-specific tests, use, for example, `#ifdef
-__linux__' rather than `#ifdef linux'. Use the `-v' option to see
-exactly how the preprocessor is invoked.
-
- The following options that affect overall processing are recognized
-by the `g77' and `gcc' commands in a GNU Fortran installation:
-
-`--driver=COMMAND'
- This works when invoking only the `g77' command, not when invoking
- the `gcc' command. *Note GNU Fortran Command Options: Invoking
- G77, for information on this option.
-
-`-fversion'
- Ensure that the `g77'-specific version of the compiler phase is
- reported, if run. (This is supplied automatically when `-v' or
- `--verbose' is specified as a command-line option for `g77' or
- `gcc' and when the resulting commands compile Fortran source
- files.)
-
-`-fset-g77-defaults'
- Set up whatever `gcc' options are to apply to Fortran
- compilations, and avoid running internal consistency checks that
- might take some time.
-
- As of version 0.5.20, this is equivalent to `-fmove-all-movables
- -freduce-all-givs -frerun-loop-opt -fargument-noalias-global'.
-
- This option is supplied automatically when compiling Fortran code
- via the `g77' or `gcc' command. The description of this option is
- provided so that users seeing it in the output of, say, `g77 -v'
- understand why it is there.
-
- Also, developers who run `f771' directly might want to specify it
- by hand to get the same defaults as they would running `f771' via
- `g77' or `gcc'. However, such developers should, after linking a
- new `f771' executable, invoke it without this option once, e.g.
- via `./f771 -quiet < /dev/null', to ensure that they have not
- introduced any internal inconsistencies (such as in the table of
- intrinsics) before proceeding--`g77' will crash with a diagnostic
- if it detects an inconsistency.
-
-`-fno-silent'
- Print (to `stderr') the names of the program units as they are
- compiled, in a form similar to that used by popular UNIX `f77'
- implementations and `f2c'.
-
- *Note Options Controlling the Kind of Output: (gcc)Overall Options,
-for information on more options that control the overall operation of
-the `gcc' command (and, by extension, the `g77' command).
-
-\1f
-File: g77.info, Node: Shorthand Options, Next: Fortran Dialect Options, Prev: Overall Options, Up: Invoking G77
-
-Shorthand Options
-=================
-
- The following options serve as "shorthand" for other options
-accepted by the compiler:
-
-`-fugly'
- Specify that certain "ugly" constructs are to be quietly accepted.
- Same as:
-
- -fugly-args -fugly-assign -fugly-assumed
- -fugly-comma -fugly-complex -fugly-init
- -fugly-logint
-
- These constructs are considered inappropriate to use in new or
- well-maintained portable Fortran code, but widely used in old code.
- *Note Distensions::, for more information.
-
- *Note:* The `-fugly' option is likely to be removed in a future
- version. Implicitly enabling all the `-fugly-*' options is
- unlikely to be feasible, or sensible, in the future, so users
- should learn to specify only those `-fugly-*' options they really
- need for a particular source file.
-
-`-fno-ugly'
- Specify that all "ugly" constructs are to be noisily rejected.
- Same as:
-
- -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
- -fno-ugly-comma -fno-ugly-complex -fno-ugly-init
- -fno-ugly-logint
-
- *Note Distensions::, for more information.
-
-`-ff66'
- Specify that the program is written in idiomatic FORTRAN 66. Same
- as `-fonetrip -fugly-assumed'.
-
- The `-fno-f66' option is the inverse of `-ff66'. As such, it is
- the same as `-fno-onetrip -fno-ugly-assumed'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-`-ff77'
- Specify that the program is written in idiomatic UNIX FORTRAN 77
- and/or the dialect accepted by the `f2c' product. Same as
- `-fbackslash -fno-typeless-boz'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-`-fno-f77'
- The `-fno-f77' option is *not* the inverse of `-ff77'. It
- specifies that the program is not written in idiomatic UNIX
- FORTRAN 77 or `f2c', but in a more widely portable dialect.
- `-fno-f77' is the same as `-fno-backslash'.
-
- The meaning of this option is likely to be refined as future
- versions of `g77' provide more compatibility with other existing
- and obsolete Fortran implementations.
-
-\1f
-File: g77.info, Node: Fortran Dialect Options, Next: Warning Options, Prev: Shorthand Options, Up: Invoking G77
-
-Options Controlling Fortran Dialect
-===================================
-
- The following options control the dialect of Fortran that the
-compiler accepts:
-
-`-ffree-form'
-
-`-fno-fixed-form'
- Specify that the source file is written in free form (introduced
- in Fortran 90) instead of the more-traditional fixed form.
-
-`-ff90'
- Allow certain Fortran-90 constructs.
-
- This option controls whether certain Fortran 90 constructs are
- recognized. (Other Fortran 90 constructs might or might not be
- recognized depending on other options such as `-fvxt',
- `-ff90-intrinsics-enable', and the current level of support for
- Fortran 90.)
-
- *Note Fortran 90::, for more information.
-
-`-fvxt'
- Specify the treatment of certain constructs that have different
- meanings depending on whether the code is written in GNU Fortran
- (based on FORTRAN 77 and akin to Fortran 90) or VXT Fortran (more
- like VAX FORTRAN).
-
- The default is `-fno-vxt'. `-fvxt' specifies that the VXT Fortran
- interpretations for those constructs are to be chosen.
-
- *Note VXT Fortran::, for more information.
-
-`-fdollar-ok'
- Allow `$' as a valid character in a symbol name.
-
-`-fno-backslash'
- Specify that `\' is not to be specially interpreted in character
- and Hollerith constants a la C and many UNIX Fortran compilers.
-
- For example, with `-fbackslash' in effect, `A\nB' specifies three
- characters, with the second one being newline. With
- `-fno-backslash', it specifies four characters, `A', `\', `n', and
- `B'.
-
- Note that `g77' implements a fairly general form of backslash
- processing that is incompatible with the narrower forms supported
- by some other compilers. For example, `'A\003B'' is a
- three-character string in `g77', whereas other compilers that
- support backslash might not support the three-octal-digit form,
- and thus treat that string as longer than three characters.
-
- *Note Backslash in Constants::, for information on why
- `-fbackslash' is the default instead of `-fno-backslash'.
-
-`-fno-ugly-args'
- Disallow passing Hollerith and typeless constants as actual
- arguments (for example, `CALL FOO(4HABCD)').
-
- *Note Ugly Implicit Argument Conversion::, for more information.
-
-`-fugly-assign'
- Use the same storage for a given variable regardless of whether it
- is used to hold an assigned-statement label (as in `ASSIGN 10 TO
- I') or used to hold numeric data (as in `I = 3').
-
- *Note Ugly Assigned Labels::, for more information.
-
-`-fugly-assumed'
- Assume any dummy array with a final dimension specified as `1' is
- really an assumed-size array, as if `*' had been specified for the
- final dimension instead of `1'.
-
- For example, `DIMENSION X(1)' is treated as if it had read
- `DIMENSION X(*)'.
-
- *Note Ugly Assumed-Size Arrays::, for more information.
-
-`-fugly-comma'
- Treat a trailing comma in an argument list as specification of a
- trailing null argument, and treat an empty argument list as
- specification of a single null argument.
-
- For example, `CALL FOO(,)' is treated as `CALL FOO(%VAL(0),
- %VAL(0))'. That is, *two* null arguments are specified by the
- procedure call when `-fugly-comma' is in force. And `F = FUNC()'
- is treated as `F = FUNC(%VAL(0))'.
-
- The default behavior, `-fno-ugly-comma', is to ignore a single
- trailing comma in an argument list.
-
- *Note Ugly Null Arguments::, for more information.
-
-`-fugly-complex'
- Do not complain about `REAL(EXPR)' or `AIMAG(EXPR)' when EXPR is a
- `COMPLEX' type other than `COMPLEX(KIND=1)'--usually this is used
- to permit `COMPLEX(KIND=2)' (`DOUBLE COMPLEX') operands.
-
- The `-ff90' option controls the interpretation of this construct.
-
- *Note Ugly Complex Part Extraction::, for more information.
-
-`-fno-ugly-init'
- Disallow use of Hollerith and typeless constants as initial values
- (in `PARAMETER' and `DATA' statements), and use of character
- constants to initialize numeric types and vice versa.
-
- For example, `DATA I/'F'/, CHRVAR/65/, J/4HABCD/' is disallowed by
- `-fno-ugly-init'.
-
- *Note Ugly Conversion of Initializers::, for more information.
-
-`-fugly-logint'
- Treat `INTEGER' and `LOGICAL' variables and expressions as
- potential stand-ins for each other.
-
- For example, automatic conversion between `INTEGER' and `LOGICAL'
- is enabled, for many contexts, via this option.
-
- *Note Ugly Integer Conversions::, for more information.
-
-`-fonetrip'
- Imperative executable `DO' loops are to be executed at least once
- each time they are reached.
-
- ANSI FORTRAN 77 and more recent versions of the Fortran standard
- specify that the body of an imperative `DO' loop is not executed
- if the number of iterations calculated from the parameters of the
- loop is less than 1. (For example, `DO 10 I = 1, 0'.) Such a
- loop is called a "zero-trip loop".
-
- Prior to ANSI FORTRAN 77, many compilers implemented `DO' loops
- such that the body of a loop would be executed at least once, even
- if the iteration count was zero. Fortran code written assuming
- this behavior is said to require "one-trip loops". For example,
- some code written to the FORTRAN 66 standard expects this behavior
- from its `DO' loops, although that standard did not specify this
- behavior.
-
- The `-fonetrip' option specifies that the source file(s) being
- compiled require one-trip loops.
-
- This option affects only those loops specified by the (imperative)
- `DO' statement and by implied-`DO' lists in I/O statements. Loops
- specified by implied-`DO' lists in `DATA' and specification
- (non-executable) statements are not affected.
-
-`-ftypeless-boz'
- Specifies that prefix-radix non-decimal constants, such as
- `Z'ABCD'', are typeless instead of `INTEGER(KIND=1)'.
-
- You can test for yourself whether a particular compiler treats the
- prefix form as `INTEGER(KIND=1)' or typeless by running the
- following program:
-
- EQUIVALENCE (I, R)
- R = Z'ABCD1234'
- J = Z'ABCD1234'
- IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
- IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
- END
-
- Reports indicate that many compilers process this form as
- `INTEGER(KIND=1)', though a few as typeless, and at least one
- based on a command-line option specifying some kind of
- compatibility.
-
-`-fintrin-case-initcap'
-
-`-fintrin-case-upper'
-
-`-fintrin-case-lower'
-
-`-fintrin-case-any'
- Specify expected case for intrinsic names. `-fintrin-case-lower'
- is the default.
-
-`-fmatch-case-initcap'
-
-`-fmatch-case-upper'
-
-`-fmatch-case-lower'
-
-`-fmatch-case-any'
- Specify expected case for keywords. `-fmatch-case-lower' is the
- default.
-
-`-fsource-case-upper'
-
-`-fsource-case-lower'
-
-`-fsource-case-preserve'
- Specify whether source text other than character and Hollerith
- constants is to be translated to uppercase, to lowercase, or
- preserved as is. `-fsource-case-lower' is the default.
-
-`-fsymbol-case-initcap'
-
-`-fsymbol-case-upper'
-
-`-fsymbol-case-lower'
-
-`-fsymbol-case-any'
- Specify valid cases for user-defined symbol names.
- `-fsymbol-case-any' is the default.
-
-`-fcase-strict-upper'
- Same as `-fintrin-case-upper -fmatch-case-upper
- -fsource-case-preserve -fsymbol-case-upper'. (Requires all
- pertinent source to be in uppercase.)
-
-`-fcase-strict-lower'
- Same as `-fintrin-case-lower -fmatch-case-lower
- -fsource-case-preserve -fsymbol-case-lower'. (Requires all
- pertinent source to be in lowercase.)
-
-`-fcase-initcap'
- Same as `-fintrin-case-initcap -fmatch-case-initcap
- -fsource-case-preserve -fsymbol-case-initcap'. (Requires all
- pertinent source to be in initial capitals, as in `Print
- *,SqRt(Value)'.)
-
-`-fcase-upper'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-upper
- -fsymbol-case-any'. (Maps all pertinent source to uppercase.)
-
-`-fcase-lower'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-lower
- -fsymbol-case-any'. (Maps all pertinent source to lowercase.)
-
-`-fcase-preserve'
- Same as `-fintrin-case-any -fmatch-case-any -fsource-case-preserve
- -fsymbol-case-any'. (Preserves all case in user-defined symbols,
- while allowing any-case matching of intrinsics and keywords. For
- example, `call Foo(i,I)' would pass two *different* variables
- named `i' and `I' to a procedure named `Foo'.)
-
-`-ff2c-intrinsics-delete'
-
-`-ff2c-intrinsics-hide'
-
-`-ff2c-intrinsics-disable'
-
-`-ff2c-intrinsics-enable'
- Specify status of f2c-specific intrinsics.
- `-ff2c-intrinsics-enable' is the default.
-
-`-ff90-intrinsics-delete'
-
-`-ff90-intrinsics-hide'
-
-`-ff90-intrinsics-disable'
-
-`-ff90-intrinsics-enable'
- Specify status of F90-specific intrinsics.
- `-ff90-intrinsics-enable' is the default.
-
-`-fgnu-intrinsics-delete'
-
-`-fgnu-intrinsics-hide'
-
-`-fgnu-intrinsics-disable'
-
-`-fgnu-intrinsics-enable'
- Specify status of Digital's COMPLEX-related intrinsics.
- `-fgnu-intrinsics-enable' is the default.
-
-`-fmil-intrinsics-delete'
-
-`-fmil-intrinsics-hide'
-
-`-fmil-intrinsics-disable'
-
-`-fmil-intrinsics-enable'
- Specify status of MIL-STD-1753-specific intrinsics.
- `-fmil-intrinsics-enable' is the default.
-
-`-funix-intrinsics-delete'
-
-`-funix-intrinsics-hide'
-
-`-funix-intrinsics-disable'
-
-`-funix-intrinsics-enable'
- Specify status of UNIX intrinsics. `-funix-intrinsics-enable' is
- the default.
-
-`-fvxt-intrinsics-delete'
-
-`-fvxt-intrinsics-hide'
-
-`-fvxt-intrinsics-disable'
-
-`-fvxt-intrinsics-enable'
- Specify status of VXT intrinsics. `-fvxt-intrinsics-enable' is
- the default.
-
-`-ffixed-line-length-N'
- Set column after which characters are ignored in typical fixed-form
- lines in the source file, and through which spaces are assumed (as
- if padded to that length) after the ends of short fixed-form lines.
-
- Popular values for N include 72 (the standard and the default), 80
- (card image), and 132 (corresponds to "extended-source" options in
- some popular compilers). N may be `none', meaning that the entire
- line is meaningful and that continued character constants never
- have implicit spaces appended to them to fill out the line.
- `-ffixed-line-length-0' means the same thing as
- `-ffixed-line-length-none'.
-
- *Note Source Form::, for more information.
-
-\1f
-File: g77.info, Node: Warning Options, Next: Debugging Options, Prev: Fortran Dialect Options, Up: Invoking G77
-
-Options to Request or Suppress Warnings
-=======================================
-
- Warnings are diagnostic messages that report constructions which are
-not inherently erroneous but which are risky or suggest there might
-have been an error.
-
- You can request many specific warnings with options beginning `-W',
-for example `-Wimplicit' to request warnings on implicit declarations.
-Each of these specific warning options also has a negative form
-beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
-This manual lists only one of the two forms, whichever is not the
-default.
-
- These options control the amount and kinds of warnings produced by
-GNU Fortran:
-
-`-fsyntax-only'
- Check the code for syntax errors, but don't do anything beyond
- that.
-
-`-pedantic'
- Issue warnings for uses of extensions to ANSI FORTRAN 77.
- `-pedantic' also applies to C-language constructs where they occur
- in GNU Fortran source files, such as use of `\e' in a character
- constant within a directive like `#include'.
-
- Valid ANSI FORTRAN 77 programs should compile properly with or
- without this option. However, without this option, certain GNU
- extensions and traditional Fortran features are supported as well.
- With this option, many of them are rejected.
-
- Some users try to use `-pedantic' to check programs for strict ANSI
- conformance. They soon find that it does not do quite what they
- want--it finds some non-ANSI practices, but not all. However,
- improvements to `g77' in this area are welcome.
-
-`-pedantic-errors'
- Like `-pedantic', except that errors are produced rather than
- warnings.
-
-`-fpedantic'
- Like `-pedantic', but applies only to Fortran constructs.
-
-`-w'
- Inhibit all warning messages.
-
-`-Wno-globals'
- Inhibit warnings about use of a name as both a global name (a
- subroutine, function, or block data program unit, or a common
- block) and implicitly as the name of an intrinsic in a source file.
-
- Also inhibit warnings about inconsistent invocations and/or
- definitions of global procedures (function and subroutines). Such
- inconsistencies include different numbers of arguments and
- different types of arguments.
-
-`-Wimplicit'
- Warn whenever a variable, array, or function is implicitly
- declared. Has an effect similar to using the `IMPLICIT NONE'
- statement in every program unit. (Some Fortran compilers provide
- this feature by an option named `-u' or `/WARNINGS=DECLARATIONS'.)
-
-`-Wunused'
- Warn whenever a variable is unused aside from its declaration.
-
-`-Wuninitialized'
- Warn whenever an automatic variable is used without first being
- initialized.
-
- These warnings are possible only in optimizing compilation,
- because they require data-flow information that is computed only
- when optimizing. If you don't specify `-O', you simply won't get
- these warnings.
-
- These warnings occur only for variables that are candidates for
- register allocation. Therefore, they do not occur for a variable
- whose address is taken, or whose size is other than 1, 2, 4 or 8
- bytes. Also, they do not occur for arrays, even when they are in
- registers.
-
- Note that there might be no warning about a variable that is used
- only to compute a value that itself is never used, because such
- computations may be deleted by data-flow analysis before the
- warnings are printed.
-
- These warnings are made optional because GNU Fortran is not smart
- enough to see all the reasons why the code might be correct
- despite appearing to have an error. Here is one example of how
- this can happen:
-
- SUBROUTINE DISPAT(J)
- IF (J.EQ.1) I=1
- IF (J.EQ.2) I=4
- IF (J.EQ.3) I=5
- CALL FOO(I)
- END
-
- If the value of `J' is always 1, 2 or 3, then `I' is always
- initialized, but GNU Fortran doesn't know this. Here is another
- common case:
-
- SUBROUTINE MAYBE(FLAG)
- LOGICAL FLAG
- IF (FLAG) VALUE = 9.4
- ...
- IF (FLAG) PRINT *, VALUE
- END
-
- This has no bug because `VALUE' is used only if it is set.
-
-`-Wall'
- The `-Wunused' and `-Wuninitialized' options combined. These are
- all the options which pertain to usage that we recommend avoiding
- and that we believe is easy to avoid. (As more warnings are added
- to `g77', some might be added to the list enabled by `-Wall'.)
-
- The remaining `-W...' options are not implied by `-Wall' because
-they warn about constructions that we consider reasonable to use, on
-occasion, in clean programs.
-
-`-Wsurprising'
- Warn about "suspicious" constructs that are interpreted by the
- compiler in a way that might well be surprising to someone reading
- the code. These differences can result in subtle,
- compiler-dependent (even machine-dependent) behavioral differences.
- The constructs warned about include:
-
- * Expressions having two arithmetic operators in a row, such as
- `X*-Y'. Such a construct is nonstandard, and can produce
- unexpected results in more complicated situations such as
- `X**-Y*Z'. `g77', along with many other compilers, interprets
- this example differently than many programmers, and a few
- other compilers. Specifically, `g77' interprets `X**-Y*Z' as
- `(X**(-Y))*Z', while others might think it should be
- interpreted as `X**(-(Y*Z))'.
-
- A revealing example is the constant expression `2**-2*1.',
- which `g77' evaluates to .25, while others might evaluate it
- to 0., the difference resulting from the way precedence
- affects type promotion.
-
- (The `-fpedantic' option also warns about expressions having
- two arithmetic operators in a row.)
-
- * Expressions with a unary minus followed by an operand and then
- a binary operator other than plus or minus. For example,
- `-2**2' produces a warning, because the precedence is
- `-(2**2)', yielding -4, not `(-2)**2', which yields 4, and
- which might represent what a programmer expects.
-
- An example of an expression producing different results in a
- surprising way is `-I*S', where I holds the value
- `-2147483648' and S holds `0.5'. On many systems, negating I
- results in the same value, not a positive number, because it
- is already the lower bound of what an `INTEGER(KIND=1)'
- variable can hold. So, the expression evaluates to a
- positive number, while the "expected" interpretation,
- `(-I)*S', would evaluate to a negative number.
-
- Even cases such as `-I*J' produce warnings, even though, in
- most configurations and situations, there is no computational
- difference between the results of the two
- interpretations--the purpose of this warning is to warn about
- differing interpretations and encourage a better style of
- coding, not to identify only those places where bugs might
- exist in the user's code.
-
- * `DO' loops with `DO' variables that are not of integral
- type--that is, using `REAL' variables as loop control
- variables. Although such loops can be written to work in the
- "obvious" way, the way `g77' is required by the Fortran
- standard to interpret such code is likely to be quite
- different from the way many programmers expect. (This is
- true of all `DO' loops, but the differences are pronounced
- for non-integral loop control variables.)
-
- *Note Loops::, for more information.
-
-`-Werror'
- Make all warnings into errors.
-
-`-W'
- Turns on "extra warnings" and, if optimization is specified via
- `-O', the `-Wuninitialized' option. (This might change in future
- versions of `g77'.)
-
- "Extra warnings" are issued for:
-
- * Unused parameters to a procedure (when `-Wunused' also is
- specified).
-
- * Overflows involving floating-point constants (not available
- for certain configurations).
-
- *Note Options to Request or Suppress Warnings: (gcc)Warning Options,
-for information on more options offered by the GBE shared by `g77',
-`gcc', and other GNU compilers.
-
- Some of these have no effect when compiling programs written in
-Fortran:
-
-`-Wcomment'
-
-`-Wformat'
-
-`-Wparentheses'
-
-`-Wswitch'
-
-`-Wtraditional'
-
-`-Wshadow'
-
-`-Wid-clash-LEN'
-
-`-Wlarger-than-LEN'
-
-`-Wconversion'
-
-`-Waggregate-return'
-
-`-Wredundant-decls'
- These options all could have some relevant meaning for GNU Fortran
- programs, but are not yet supported.
-
-\1f
-File: g77.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking G77
-
-Options for Debugging Your Program or GNU Fortran
-=================================================
-
- GNU Fortran has various special options that are used for debugging
-either your program or `g77'.
-
-`-g'
- Produce debugging information in the operating system's native
- format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
- debugging information.
-
- Support for this option in Fortran programs is incomplete. In
- particular, names of variables and arrays in common blocks or that
- are storage-associated via `EQUIVALENCE' are unavailable to the
- debugger.
-
- However, version 0.5.19 of `g77' does provide this information in
- a rudimentary way, as controlled by the `-fdebug-kludge' option.
-
- *Note Options for Code Generation Conventions: Code Gen Options,
- for more information.
-
- *Note Options for Debugging Your Program or GNU CC: (gcc)Debugging
-Options, for more information on debugging options.
-
-\1f
-File: g77.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking G77
-
-Options That Control Optimization
-=================================
-
- Most Fortran users will want to use no optimization when developing
-and testing programs, and use `-O' or `-O2' when compiling programs for
-late-cycle testing and for production use.
-
- The following flags have particular applicability when compiling
-Fortran programs:
-
-`-malign-double'
- (Intel 386 architecture only.)
-
- Noticeably improves performance of `g77' programs making heavy use
- of `REAL(KIND=2)' (`DOUBLE PRECISION') data on some systems. In
- particular, systems using Pentium, Pentium Pro, 586, and 686
- implementations of the i386 architecture execute programs faster
- when `REAL(KIND=2)' (`DOUBLE PRECISION') data are aligned on
- 64-bit boundaries in memory.
-
- This option can, at least, make benchmark results more consistent
- across various system configurations, versions of the program, and
- data sets.
-
- *Note:* The warning in the `gcc' documentation about this option
- does not apply, generally speaking, to Fortran code compiled by
- `g77'.
-
- *Also note:* `g77' fixes a `gcc' backend bug to allow
- `-malign-double' to work generally, not just with
- statically-allocated data.
-
- *Also also note:* The negative form of `-malign-double' is
- `-mno-align-double', not `-benign-double'.
-
-`-ffloat-store'
- Might help a Fortran program that depends on exact IEEE conformance
- on some machines, but might slow down a program that doesn't.
-
-`-fforce-mem'
-
-`-fforce-addr'
- Might improve optimization of loops.
-
-`-fno-inline'
- Don't compile statement functions inline. Might reduce the size
- of a program unit--which might be at expense of some speed (though
- it should compile faster). Note that if you are not optimizing,
- no functions can be expanded inline.
-
-`-ffast-math'
- Might allow some programs designed to not be too dependent on IEEE
- behavior for floating-point to run faster, or die trying.
-
-`-fstrength-reduce'
- Might make some loops run faster.
-
-`-frerun-cse-after-loop'
-
-`-fexpensive-optimizations'
-
-`-fdelayed-branch'
-
-`-fschedule-insns'
-
-`-fschedule-insns2'
-
-`-fcaller-saves'
- Might improve performance on some code.
-
-`-funroll-loops'
- Definitely improves performance on some code.
-
-`-funroll-all-loops'
- Definitely improves performance on some code.
-
-`-fno-move-all-movables'
-
-`-fno-reduce-all-givs'
-
-`-fno-rerun-loop-opt'
- Each of these might improve performance on some code.
-
- Analysis of Fortran code optimization and the resulting
- optimizations triggered by the above options were contributed by
- Toon Moene (<toon@moene.indiv.nluug.nl>).
-
- These three options are intended to be removed someday, once they
- have helped determine the efficacy of various approaches to
- improving the performance of Fortran code.
-
- Please let us know how use of these options affects the
- performance of your production code. We're particularly
- interested in code that runs faster when these options are
- *disabled*, and in non-Fortran code that benefits when they are
- *enabled* via the above `gcc' command-line options.
-
- *Note Options That Control Optimization: (gcc)Optimize Options, for
-more information on options to optimize the generated machine code.
-
-\1f
-File: g77.info, Node: Preprocessor Options, Next: Directory Options, Prev: Optimize Options, Up: Invoking G77
-
-Options Controlling the Preprocessor
-====================================
-
- These options control the C preprocessor, which is run on each C
-source file before actual compilation.
-
- *Note Options Controlling the Preprocessor: (gcc)Preprocessor
-Options, for information on C preprocessor options.
-
- Some of these options also affect how `g77' processes the `INCLUDE'
-directive. Since this directive is processed even when preprocessing
-is not requested, it is not described in this section. *Note Options
-for Directory Search: Directory Options, for information on how `g77'
-processes the `INCLUDE' directive.
-
- However, the `INCLUDE' directive does not apply preprocessing to the
-contents of the included file itself.
-
- Therefore, any file that contains preprocessor directives (such as
-`#include', `#define', and `#if') must be included via the `#include'
-directive, not via the `INCLUDE' directive. Therefore, any file
-containing preprocessor directives, if included, is necessarily
-included by a file that itself contains preprocessor directives.
-
-\1f
-File: g77.info, Node: Directory Options, Next: Code Gen Options, Prev: Preprocessor Options, Up: Invoking G77
-
-Options for Directory Search
-============================
-
- These options affect how the `cpp' preprocessor searches for files
-specified via the `#include' directive. Therefore, when compiling
-Fortran programs, they are meaningful when the preproecssor is used.
-
- Some of these options also affect how `g77' searches for files
-specified via the `INCLUDE' directive, although files included by that
-directive are not, themselves, preprocessed. These options are:
-
-`-I-'
-
-`-IDIR'
- These affect interpretation of the `INCLUDE' directive (as well as
- of the `#include' directive of the `cpp' preprocessor).
-
- Note that `-IDIR' must be specified *without* any spaces between
- `-I' and the directory name--that is, `-Ifoo/bar' is valid, but
- `-I foo/bar' is rejected by the `g77' compiler (though the
- preprocessor supports the latter form). Also note that the
- general behavior of `-I' and `INCLUDE' is pretty much the same as
- of `-I' with `#include' in the `cpp' preprocessor, with regard to
- looking for `header.gcc' files and other such things.
-
- *Note Options for Directory Search: (gcc)Directory Options, for
- information on the `-I' option.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Index, Prev: Diagnostics, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* #define: Overall Options.
-* #if: Overall Options.
-* #include: Overall Options.
-* #include directive: Bug Reporting.
-* $: Dollar Signs.
-* %DESCR() construct: %DESCR().
-* %LOC() construct: %LOC().
-* %REF() construct: %REF().
-* %VAL() construct: %VAL().
-* *N notation <1>: Compiler Types.
-* *N notation: Star Notation.
-* --driver option <1>: Invoking G77.
-* --driver option: G77 and GCC.
-* -falias-check option <1>: Aliasing Assumed To Work.
-* -falias-check option: Code Gen Options.
-* -fargument-alias option <1>: Aliasing Assumed To Work.
-* -fargument-alias option: Code Gen Options.
-* -fargument-noalias option <1>: Aliasing Assumed To Work.
-* -fargument-noalias option: Code Gen Options.
-* -fcaller-saves option: Optimize Options.
-* -fcase-initcap option: Fortran Dialect Options.
-* -fcase-lower option: Fortran Dialect Options.
-* -fcase-preserve option: Fortran Dialect Options.
-* -fcase-strict-lower option: Fortran Dialect Options.
-* -fcase-strict-upper option: Fortran Dialect Options.
-* -fcase-upper option: Fortran Dialect Options.
-* -fdebug-kludge option: Code Gen Options.
-* -fdelayed-branch option: Optimize Options.
-* -fdollar-ok option: Fortran Dialect Options.
-* -fexpensive-optimizations option: Optimize Options.
-* -ff2c-intrinsics-delete option: Fortran Dialect Options.
-* -ff2c-intrinsics-disable option: Fortran Dialect Options.
-* -ff2c-intrinsics-enable option: Fortran Dialect Options.
-* -ff2c-intrinsics-hide option: Fortran Dialect Options.
-* -ff2c-library option: Code Gen Options.
-* -ff66 option: Shorthand Options.
-* -ff77 option: Shorthand Options.
-* -ff90 option: Fortran Dialect Options.
-* -ff90-intrinsics-delete option: Fortran Dialect Options.
-* -ff90-intrinsics-disable option: Fortran Dialect Options.
-* -ff90-intrinsics-enable option: Fortran Dialect Options.
-* -ff90-intrinsics-hide option: Fortran Dialect Options.
-* -ffast-math option: Optimize Options.
-* -ffixed-line-length-N option: Fortran Dialect Options.
-* -ffloat-store option: Optimize Options.
-* -fforce-addr option: Optimize Options.
-* -fforce-mem option: Optimize Options.
-* -ffree-form option: Fortran Dialect Options.
-* -fgnu-intrinsics-delete option: Fortran Dialect Options.
-* -fgnu-intrinsics-disable option: Fortran Dialect Options.
-* -fgnu-intrinsics-enable option: Fortran Dialect Options.
-* -fgnu-intrinsics-hide option: Fortran Dialect Options.
-* -fGROUP-intrinsics-hide option: Overly Convenient Options.
-* -finit-local-zero option <1>: Overly Convenient Options.
-* -finit-local-zero option: Code Gen Options.
-* -fintrin-case-any option: Fortran Dialect Options.
-* -fintrin-case-initcap option: Fortran Dialect Options.
-* -fintrin-case-lower option: Fortran Dialect Options.
-* -fintrin-case-upper option: Fortran Dialect Options.
-* -fmatch-case-any option: Fortran Dialect Options.
-* -fmatch-case-initcap option: Fortran Dialect Options.
-* -fmatch-case-lower option: Fortran Dialect Options.
-* -fmatch-case-upper option: Fortran Dialect Options.
-* -fmil-intrinsics-delete option: Fortran Dialect Options.
-* -fmil-intrinsics-disable option: Fortran Dialect Options.
-* -fmil-intrinsics-enable option: Fortran Dialect Options.
-* -fmil-intrinsics-hide option: Fortran Dialect Options.
-* -fno-argument-noalias-global option <1>: Aliasing Assumed To Work.
-* -fno-argument-noalias-global option: Code Gen Options.
-* -fno-automatic option <1>: Overly Convenient Options.
-* -fno-automatic option: Code Gen Options.
-* -fno-backslash option: Fortran Dialect Options.
-* -fno-common option: Code Gen Options.
-* -fno-emulate-complex option: Code Gen Options.
-* -fno-f2c option <1>: Avoid f2c Compatibility.
-* -fno-f2c option: Code Gen Options.
-* -fno-f77 option: Shorthand Options.
-* -fno-fixed-form option: Fortran Dialect Options.
-* -fno-globals option: Code Gen Options.
-* -fno-ident option: Code Gen Options.
-* -fno-inline option: Optimize Options.
-* -fno-move-all-movables option: Optimize Options.
-* -fno-reduce-all-givs option: Optimize Options.
-* -fno-rerun-loop-opt option: Optimize Options.
-* -fno-second-underscore: f2c Skeletons and Prototypes.
-* -fno-second-underscore option <1>: Names.
-* -fno-second-underscore option: Code Gen Options.
-* -fno-silent option: Overall Options.
-* -fno-ugly option: Shorthand Options.
-* -fno-ugly-args option: Fortran Dialect Options.
-* -fno-ugly-init option: Fortran Dialect Options.
-* -fno-underscoring option <1>: Names.
-* -fno-underscoring option: Code Gen Options.
-* -fonetrip option: Fortran Dialect Options.
-* -fpack-struct option: Code Gen Options.
-* -fpcc-struct-return option: Code Gen Options.
-* -fpedantic option: Warning Options.
-* -fPIC option: Actual Bugs.
-* -freg-struct-return option: Code Gen Options.
-* -frerun-cse-after-loop option: Optimize Options.
-* -fschedule-insns option: Optimize Options.
-* -fschedule-insns2 option: Optimize Options.
-* -fset-g77-defaults option: Overall Options.
-* -fshort-double option: Code Gen Options.
-* -fsource-case-lower option: Fortran Dialect Options.
-* -fsource-case-preserve option: Fortran Dialect Options.
-* -fsource-case-upper option: Fortran Dialect Options.
-* -fstrength-reduce option: Optimize Options.
-* -fsymbol-case-any option: Fortran Dialect Options.
-* -fsymbol-case-initcap option: Fortran Dialect Options.
-* -fsymbol-case-lower option: Fortran Dialect Options.
-* -fsymbol-case-upper option: Fortran Dialect Options.
-* -fsyntax-only option: Warning Options.
-* -ftypeless-boz option: Fortran Dialect Options.
-* -fugly option <1>: Overly Convenient Options.
-* -fugly option: Shorthand Options.
-* -fugly-assign option: Fortran Dialect Options.
-* -fugly-assumed option: Fortran Dialect Options.
-* -fugly-comma option <1>: Actual Bugs.
-* -fugly-comma option: Fortran Dialect Options.
-* -fugly-complex option: Fortran Dialect Options.
-* -fugly-logint option: Fortran Dialect Options.
-* -funix-intrinsics-delete option: Fortran Dialect Options.
-* -funix-intrinsics-disable option: Fortran Dialect Options.
-* -funix-intrinsics-enable option: Fortran Dialect Options.
-* -funix-intrinsics-hide option: Fortran Dialect Options.
-* -funroll-all-loops option: Optimize Options.
-* -funroll-loops option: Optimize Options.
-* -fversion option: Overall Options.
-* -fvxt option: Fortran Dialect Options.
-* -fvxt-intrinsics-delete option: Fortran Dialect Options.
-* -fvxt-intrinsics-disable option: Fortran Dialect Options.
-* -fvxt-intrinsics-enable option: Fortran Dialect Options.
-* -fvxt-intrinsics-hide option: Fortran Dialect Options.
-* -fzeros option: Code Gen Options.
-* -g option: Debugging Options.
-* -I- option: Directory Options.
-* -i8: Increasing Precision/Range.
-* -Idir option: Directory Options.
-* -malign-double option <1>: Aligned Data.
-* -malign-double option: Optimize Options.
-* -Nl option: Compiler Limits.
-* -Nx option: Compiler Limits.
-* -O2: Actual Bugs.
-* -pedantic option: Warning Options.
-* -pedantic-errors option: Warning Options.
-* -r8: Increasing Precision/Range.
-* -u option: Warning Options.
-* -v option: G77 and GCC.
-* -W option: Warning Options.
-* -w option: Warning Options.
-* -Waggregate-return option: Warning Options.
-* -Wall option: Warning Options.
-* -Wcomment option: Warning Options.
-* -Wconversion option: Warning Options.
-* -Werror option: Warning Options.
-* -Wformat option: Warning Options.
-* -Wid-clash-LEN option: Warning Options.
-* -Wimplicit option: Warning Options.
-* -Wlarger-than-LEN option: Warning Options.
-* -Wno-globals option: Warning Options.
-* -Wparentheses option: Warning Options.
-* -Wredundant-decls option: Warning Options.
-* -Wshadow option: Warning Options.
-* -Wsurprising option: Warning Options.
-* -Wswitch option: Warning Options.
-* -Wtraditional option: Warning Options.
-* -Wuninitialized option: Warning Options.
-* -Wunused option: Warning Options.
-* .EQV., with integer operands: Equivalence Versus Equality.
-* .F filename suffix: Overall Options.
-* .fpp filename suffix: Overall Options.
-* .gdbinit: Main Program Unit.
-* .r filename suffix: Overall Options.
-* /WARNINGS=DECLARATIONS switch: Warning Options.
-* 586/686 CPUs: Use Submodel Options.
-* 64-bit systems: Alpha Problems Fixed.
-* _strtoul: Missing strtoul.
-* `infinite spaces' printed: Strange Behavior at Run Time.
-* Abort intrinsic: Abort Intrinsic.
-* Abs intrinsic: Abs Intrinsic.
-* ACCEPT statement: TYPE and ACCEPT I/O Statements.
-* Access intrinsic: Access Intrinsic.
-* AChar intrinsic: AChar Intrinsic.
-* ACos intrinsic: ACos Intrinsic.
-* ACosD intrinsic: ACosD Intrinsic.
-* adding options: Adding Options.
-* adjustable arrays: Adjustable Arrays.
-* AdjustL intrinsic: AdjustL Intrinsic.
-* AdjustR intrinsic: AdjustR Intrinsic.
-* aggregate initialization: Large Initialization.
-* AImag intrinsic: AImag Intrinsic.
-* AIMAG intrinsic: REAL() and AIMAG() of Complex.
-* AIMax0 intrinsic: AIMax0 Intrinsic.
-* AIMin0 intrinsic: AIMin0 Intrinsic.
-* AInt intrinsic: AInt Intrinsic.
-* AJMax0 intrinsic: AJMax0 Intrinsic.
-* AJMin0 intrinsic: AJMin0 Intrinsic.
-* Alarm intrinsic: Alarm Intrinsic.
-* aliasing: Aliasing Assumed To Work.
-* aligned data: Aligned Data.
-* aligned stack: Aligned Data.
-* All intrinsic: All Intrinsic.
-* all warnings: Warning Options.
-* Allocated intrinsic: Allocated Intrinsic.
-* ALog intrinsic: ALog Intrinsic.
-* ALog10 intrinsic: ALog10 Intrinsic.
-* Alpha: Actual Bugs.
-* Alpha, support <1>: Actual Bugs.
-* Alpha, support: Alpha Problems Fixed.
-* alternate entry points: Alternate Entry Points.
-* alternate returns: Alternate Returns.
-* ALWAYS_FLUSH <1>: Output Assumed To Flush.
-* ALWAYS_FLUSH: Always Flush Output.
-* AMax0 intrinsic: AMax0 Intrinsic.
-* AMax1 intrinsic: AMax1 Intrinsic.
-* AMin0 intrinsic: AMin0 Intrinsic.
-* AMin1 intrinsic: AMin1 Intrinsic.
-* AMod intrinsic: AMod Intrinsic.
-* ampersand continuation line: Ampersands.
-* AND intrinsic: Bit Operations on Floating-point Data.
-* And intrinsic: And Intrinsic.
-* ANInt intrinsic: ANInt Intrinsic.
-* ANSI FORTRAN 77 standard: Language.
-* ANSI FORTRAN 77 support: Standard Support.
-* anti-aliasing: Aliasing Assumed To Work.
-* Any intrinsic: Any Intrinsic.
-* arguments, null: Ugly Null Arguments.
-* arguments, omitting: Ugly Null Arguments.
-* arguments, unused <1>: Unused Arguments.
-* arguments, unused: Warning Options.
-* array bounds, adjustable: Array Bounds Expressions.
-* array elements, in adjustable array bounds: Array Bounds Expressions.
-* array ordering: Arrays.
-* arrays: Arrays.
-* arrays, adjustable: Adjustable Arrays.
-* arrays, assumed-size: Ugly Assumed-Size Arrays.
-* arrays, automatic <1>: Large Automatic Arrays.
-* arrays, automatic <2>: Stack Overflow.
-* arrays, automatic <3>: Overly Convenient Options.
-* arrays, automatic: Adjustable Arrays.
-* arrays, dimensioning: Adjustable Arrays.
-* as command: What is GNU Fortran?.
-* ASin intrinsic: ASin Intrinsic.
-* ASinD intrinsic: ASinD Intrinsic.
-* assembler: What is GNU Fortran?.
-* assembly code: What is GNU Fortran?.
-* assembly code, invalid: Bug Criteria.
-* ASSIGN statement <1>: Assigned Statement Labels.
-* ASSIGN statement: Ugly Assigned Labels.
-* assigned labels: Ugly Assigned Labels.
-* assigned statement labels: Assigned Statement Labels.
-* Associated intrinsic: Associated Intrinsic.
-* association, storage: Aliasing Assumed To Work.
-* assumed-size arrays: Ugly Assumed-Size Arrays.
-* ATan intrinsic: ATan Intrinsic.
-* ATan2 intrinsic: ATan2 Intrinsic.
-* ATan2D intrinsic: ATan2D Intrinsic.
-* ATanD intrinsic: ATanD Intrinsic.
-* automatic arrays <1>: Large Automatic Arrays.
-* automatic arrays <2>: Stack Overflow.
-* automatic arrays <3>: Overly Convenient Options.
-* automatic arrays: Adjustable Arrays.
-* back end, gcc: What is GNU Fortran?.
-* backslash <1>: Backslash in Constants.
-* backslash: Fortran Dialect Options.
-* backtrace for bug reports: Bug Reporting.
-* basic concepts: What is GNU Fortran?.
-* beginners: Getting Started.
-* BesJ0 intrinsic: BesJ0 Intrinsic.
-* BesJ1 intrinsic: BesJ1 Intrinsic.
-* BesJN intrinsic: BesJN Intrinsic.
-* BesY0 intrinsic: BesY0 Intrinsic.
-* BesY1 intrinsic: BesY1 Intrinsic.
-* BesYN intrinsic: BesYN Intrinsic.
-* binaries, distributing: Distributing Binaries.
-* bison: Missing bison?.
-* bit patterns: Floating-point Bit Patterns.
-* Bit_Size intrinsic: Bit_Size Intrinsic.
-* BITest intrinsic: BITest Intrinsic.
-* BJTest intrinsic: BJTest Intrinsic.
-* blanks (spaces) <1>: Lines.
-* blanks (spaces): Character Set.
-* block data: Multiple Definitions of External Names.
-* block data and libraries: Block Data and Libraries.
-* BLOCK DATA statement <1>: Multiple Definitions of External Names.
-* BLOCK DATA statement: Block Data and Libraries.
-* bootstrap build: Bootstrap Build.
-* BTest intrinsic: BTest Intrinsic.
-* bug criteria: Bug Criteria.
-* bug report mailing lists: Bug Lists.
-* bugs: Bugs.
-* bugs, finding: What is GNU Fortran?.
-* bugs, known: Trouble.
-* build, bootstrap: Bootstrap Build.
-* build, straight: Straight Build.
-* building g77: Building gcc.
-* building gcc <1>: Building gcc.
-* building gcc: Building GNU CC Necessary.
-* bus error <1>: Strange Behavior at Run Time.
-* bus error: NeXTStep Problems.
-* but-bugs: But-bugs.
-* C library: Strange Behavior at Run Time.
-* C preprocessor: Overall Options.
-* C routines calling Fortran: Debugging and Interfacing.
-* C++: C++ Considerations.
-* C++, linking with: Interoperating with C and C++.
-* C, linking with: Interoperating with C and C++.
-* CAbs intrinsic: CAbs Intrinsic.
-* calling C routines: Debugging and Interfacing.
-* card image: Fortran Dialect Options.
-* carriage returns: Carriage Returns.
-* case sensitivity: Case Sensitivity.
-* cc1 program: What is GNU Fortran?.
-* cc1plus program: What is GNU Fortran?.
-* CCos intrinsic: CCos Intrinsic.
-* CDAbs intrinsic: CDAbs Intrinsic.
-* CDCos intrinsic: CDCos Intrinsic.
-* CDExp intrinsic: CDExp Intrinsic.
-* CDLog intrinsic: CDLog Intrinsic.
-* CDSin intrinsic: CDSin Intrinsic.
-* CDSqRt intrinsic: CDSqRt Intrinsic.
-* Ceiling intrinsic: Ceiling Intrinsic.
-* CExp intrinsic: CExp Intrinsic.
-* cfortran.h: C Interfacing Tools.
-* changes, user-visible: Changes.
-* Char intrinsic: Char Intrinsic.
-* character constants <1>: Character and Hollerith Constants.
-* character constants <2>: Ugly Conversion of Initializers.
-* character constants <3>: Double Quote Meaning.
-* character constants: Fortran Dialect Options.
-* character set: Fortran Dialect Options.
-* CHARACTER*(*): More Extensions.
-* CHARACTER, null: Character Type.
-* characters: Character Set.
-* characters, comment: Exclamation Point.
-* characters, continuation: Exclamation Point.
-* ChDir intrinsic <1>: ChDir Intrinsic (function).
-* ChDir intrinsic: ChDir Intrinsic (subroutine).
-* ChMod intrinsic <1>: ChMod Intrinsic (function).
-* ChMod intrinsic: ChMod Intrinsic (subroutine).
-* CLog intrinsic: CLog Intrinsic.
-* CLOSE statement: OPEN CLOSE and INQUIRE Keywords.
-* Cmplx intrinsic: Cmplx Intrinsic.
-* CMPLX intrinsic: CMPLX() of DOUBLE PRECISION.
-* code generation conventions: Code Gen Options.
-* code generation, improving: Better Optimization.
-* code generator: What is GNU Fortran?.
-* code, assembly: What is GNU Fortran?.
-* code, displaying main source: Actual Bugs.
-* code, distributing: Distributing Binaries.
-* code, in-line: What is GNU Fortran?.
-* code, legacy: Collected Fortran Wisdom.
-* code, machine: What is GNU Fortran?.
-* code, modifying <1>: Unpacking.
-* code, modifying: Overall Options.
-* code, source <1>: Unpacking.
-* code, source <2>: Case Sensitivity.
-* code, source <3>: Source Form.
-* code, source <4>: Lines.
-* code, source: What is GNU Fortran?.
-* code, stack variables: Maximum Stackable Size.
-* code, user: Cannot Link Fortran Programs.
-* code, writing: Collected Fortran Wisdom.
-* column-major ordering: Arrays.
-* columns 73 through 80: Better Source Model.
-* command options: Invoking G77.
-* commands, as: What is GNU Fortran?.
-* commands, f77: Installing f77.
-* commands, g77 <1>: G77 and GCC.
-* commands, g77: What is GNU Fortran?.
-* commands, gcc <1>: G77 and GCC.
-* commands, gcc: What is GNU Fortran?.
-* commands, gdb: What is GNU Fortran?.
-* commands, ld: What is GNU Fortran?.
-* commas, trailing: Ugly Null Arguments.
-* comment character: Exclamation Point.
-* comments, trailing: Statements Comments Lines.
-* common blocks <1>: Mangling of Names.
-* common blocks <2>: Actual Bugs.
-* common blocks <3>: Common Blocks.
-* common blocks: Debugging Options.
-* common blocks, large: Large Common Blocks.
-* COMMON statement <1>: Multiple Definitions of External Names.
-* COMMON statement: Common Blocks.
-* COMMON, layout: Aligned Data.
-* comparing logical expressions: Equivalence Versus Equality.
-* compatibility, f2c <1>: Avoid f2c Compatibility.
-* compatibility, f2c <2>: Block Data and Libraries.
-* compatibility, f2c <3>: Code Gen Options.
-* compatibility, f2c <4>: Shorthand Options.
-* compatibility, f2c: Overall Options.
-* compatibility, f77: Shorthand Options.
-* compatibility, FORTRAN 66 <1>: Fortran Dialect Options.
-* compatibility, FORTRAN 66: Shorthand Options.
-* compatibility, FORTRAN 77: Standard Support.
-* compatibility, Fortran 90: Fortran 90.
-* compilation status: Overall Options.
-* compilation, in-line: Optimize Options.
-* compilation, pedantic: Pedantic Compilation.
-* compiler bugs, reporting: Bug Reporting.
-* compiler limits: Compiler Limits.
-* compiler memory usage: Actual Bugs.
-* compiler speed: Actual Bugs.
-* compilers: What is GNU Fortran?.
-* compiling programs: G77 and GCC.
-* Complex intrinsic: Complex Intrinsic.
-* COMPLEX intrinsics: Fortran Dialect Options.
-* COMPLEX statement: Complex Variables.
-* COMPLEX support: Actual Bugs.
-* complex values: Ugly Complex Part Extraction.
-* complex variables: Complex Variables.
-* COMPLEX(KIND=1) type: Compiler Types.
-* COMPLEX(KIND=2) type: Compiler Types.
-* components of g77: What is GNU Fortran?.
-* concatenation: More Extensions.
-* concepts, basic: What is GNU Fortran?.
-* conformance, IEEE: Optimize Options.
-* Conjg intrinsic: Conjg Intrinsic.
-* constants <1>: Compiler Constants.
-* constants: Constants.
-* constants, character <1>: Character and Hollerith Constants.
-* constants, character <2>: Ugly Conversion of Initializers.
-* constants, character: Double Quote Meaning.
-* constants, context-sensitive: Context-Sensitive Constants.
-* constants, Hollerith <1>: Character and Hollerith Constants.
-* constants, Hollerith <2>: Ugly Conversion of Initializers.
-* constants, Hollerith: Ugly Implicit Argument Conversion.
-* constants, integer: Actual Bugs.
-* constants, octal: Double Quote Meaning.
-* constants, prefix-radix: Fortran Dialect Options.
-* constants, types: Fortran Dialect Options.
-* construct names: Construct Names.
-* context-sensitive constants: Context-Sensitive Constants.
-* context-sensitive intrinsics: Context-Sensitive Intrinsicness.
-* continuation character: Exclamation Point.
-* continuation line, ampersand: Ampersands.
-* continuation lines, number of: Continuation Line.
-* contributors: Contributors.
-* conversions, nonportable: Nonportable Conversions.
-* core dump: Bug Criteria.
-* Cos intrinsic: Cos Intrinsic.
-* CosD intrinsic: CosD Intrinsic.
-* CosH intrinsic: CosH Intrinsic.
-* Count intrinsic: Count Intrinsic.
-* cpp preprocessor: Overall Options.
-* cpp program <1>: Bug Reporting.
-* cpp program <2>: Preprocessor Options.
-* cpp program <3>: Overall Options.
-* cpp program: What is GNU Fortran?.
-* Cpu_Time intrinsic: Cpu_Time Intrinsic.
-* Cray pointers: POINTER Statements.
-* creating patch files: Merging Distributions.
-* credits: Contributors.
-* cross-compiler, building: Floating-point Bit Patterns.
-* cross-compiler, problems: Cross-compiler Problems.
-* CShift intrinsic: CShift Intrinsic.
-* CSin intrinsic: CSin Intrinsic.
-* CSqRt intrinsic: CSqRt Intrinsic.
-* CTime intrinsic <1>: CTime Intrinsic (function).
-* CTime intrinsic: CTime Intrinsic (subroutine).
-* DAbs intrinsic: DAbs Intrinsic.
-* DACos intrinsic: DACos Intrinsic.
-* DACosD intrinsic: DACosD Intrinsic.
-* DASin intrinsic: DASin Intrinsic.
-* DASinD intrinsic: DASinD Intrinsic.
-* DATA statement <1>: Actual Bugs.
-* DATA statement: Code Gen Options.
-* data types: Compiler Types.
-* data, aligned: Aligned Data.
-* data, overwritten: Strange Behavior at Run Time.
-* DATan intrinsic: DATan Intrinsic.
-* DATan2 intrinsic: DATan2 Intrinsic.
-* DATan2D intrinsic: DATan2D Intrinsic.
-* DATanD intrinsic: DATanD Intrinsic.
-* Date intrinsic: Date Intrinsic.
-* Date_and_Time intrinsic: Date_and_Time Intrinsic.
-* DbesJ0 intrinsic: DbesJ0 Intrinsic.
-* DbesJ1 intrinsic: DbesJ1 Intrinsic.
-* DbesJN intrinsic: DbesJN Intrinsic.
-* DbesY0 intrinsic: DbesY0 Intrinsic.
-* DbesY1 intrinsic: DbesY1 Intrinsic.
-* DbesYN intrinsic: DbesYN Intrinsic.
-* Dble intrinsic: Dble Intrinsic.
-* DbleQ intrinsic: DbleQ Intrinsic.
-* DCmplx intrinsic: DCmplx Intrinsic.
-* DConjg intrinsic: DConjg Intrinsic.
-* DCos intrinsic: DCos Intrinsic.
-* DCosD intrinsic: DCosD Intrinsic.
-* DCosH intrinsic: DCosH Intrinsic.
-* DDiM intrinsic: DDiM Intrinsic.
-* debug line: Debug Line.
-* debug_rtx: Bug Reporting.
-* debugger <1>: Actual Bugs.
-* debugger: What is GNU Fortran?.
-* debugging <1>: Actual Bugs.
-* debugging <2>: Names.
-* debugging <3>: Main Program Unit.
-* debugging: Debugging and Interfacing.
-* debugging information options: Debugging Options.
-* debugging main source code: Actual Bugs.
-* DECODE statement: ENCODE and DECODE.
-* deleted intrinsics: Intrinsic Groups.
-* DErF intrinsic: DErF Intrinsic.
-* DErFC intrinsic: DErFC Intrinsic.
-* DExp intrinsic: DExp Intrinsic.
-* DFloat intrinsic: DFloat Intrinsic.
-* DFlotI intrinsic: DFlotI Intrinsic.
-* DFlotJ intrinsic: DFlotJ Intrinsic.
-* diagnostics: Diagnostics.
-* diagnostics, incorrect: What is GNU Fortran?.
-* dialect options: Fortran Dialect Options.
-* differences between object files: Object File Differences.
-* Digital Fortran features: Fortran Dialect Options.
-* Digits intrinsic: Digits Intrinsic.
-* DiM intrinsic: DiM Intrinsic.
-* DImag intrinsic: DImag Intrinsic.
-* DIMENSION statement <1>: Array Bounds Expressions.
-* DIMENSION statement <2>: Adjustable Arrays.
-* DIMENSION statement: Arrays.
-* DIMENSION X(1): Ugly Assumed-Size Arrays.
-* dimensioning arrays: Adjustable Arrays.
-* DInt intrinsic: DInt Intrinsic.
-* direction of language development: Direction of Language Development.
-* directive, #include: Bug Reporting.
-* directive, INCLUDE <1>: Bug Reporting.
-* directive, INCLUDE <2>: Directory Options.
-* directive, INCLUDE: Preprocessor Options.
-* directory options: Directory Options.
-* directory search paths for inclusion: Directory Options.
-* directory, updating info: Updating Documentation.
-* disabled intrinsics: Intrinsic Groups.
-* disk full <1>: Output Assumed To Flush.
-* disk full: Always Flush Output.
-* displaying main source code: Actual Bugs.
-* disposition of files: OPEN CLOSE and INQUIRE Keywords.
-* distensions: Distensions.
-* distributions, unpacking: Unpacking.
-* distributions, why separate: Merging Distributions.
-* DLog intrinsic: DLog Intrinsic.
-* DLog10 intrinsic: DLog10 Intrinsic.
-* DMax1 intrinsic: DMax1 Intrinsic.
-* DMin1 intrinsic: DMin1 Intrinsic.
-* DMod intrinsic: DMod Intrinsic.
-* DNInt intrinsic: DNInt Intrinsic.
-* DNRM2: Actual Bugs.
-* DO loops, one-trip: Fortran Dialect Options.
-* DO statement <1>: Loops.
-* DO statement: Warning Options.
-* DO WHILE: DO WHILE.
-* documentation: Updating Documentation.
-* dollar sign <1>: Dollar Signs.
-* dollar sign: Fortran Dialect Options.
-* Dot_Product intrinsic: Dot_Product Intrinsic.
-* DOUBLE COMPLEX: DOUBLE COMPLEX.
-* DOUBLE COMPLEX type: Compiler Types.
-* DOUBLE PRECISION type: Compiler Types.
-* double quotes: Double Quote Meaning.
-* DProd intrinsic: DProd Intrinsic.
-* DReal intrinsic: DReal Intrinsic.
-* driver, gcc command as: What is GNU Fortran?.
-* DSign intrinsic: DSign Intrinsic.
-* DSin intrinsic: DSin Intrinsic.
-* DSinD intrinsic: DSinD Intrinsic.
-* DSinH intrinsic: DSinH Intrinsic.
-* DSqRt intrinsic: DSqRt Intrinsic.
-* DTan intrinsic: DTan Intrinsic.
-* DTanD intrinsic: DTanD Intrinsic.
-* DTanH intrinsic: DTanH Intrinsic.
-* Dtime intrinsic <1>: Dtime Intrinsic (function).
-* Dtime intrinsic: Dtime Intrinsic (subroutine).
-* dummies, unused: Warning Options.
-* effecting IMPLICIT NONE: Warning Options.
-* efficiency: Efficiency.
-* ELF support: Actual Bugs.
-* empty CHARACTER strings: Character Type.
-* enabled intrinsics: Intrinsic Groups.
-* ENCODE statement: ENCODE and DECODE.
-* END DO: END DO.
-* entry points: Alternate Entry Points.
-* ENTRY statement: Alternate Entry Points.
-* environment variables: Environment Variables.
-* EOShift intrinsic: EOShift Intrinsic.
-* Epsilon intrinsic: Epsilon Intrinsic.
-* equivalence areas <1>: Actual Bugs.
-* equivalence areas <2>: Local Equivalence Areas.
-* equivalence areas: Debugging Options.
-* EQUIVALENCE statement: Local Equivalence Areas.
-* ErF intrinsic: ErF Intrinsic.
-* ErFC intrinsic: ErFC Intrinsic.
-* error messages <1>: Warnings and Errors.
-* error messages: Run-time Library Errors.
-* error messages, incorrect: What is GNU Fortran?.
-* error values: Run-time Library Errors.
-* errors, linker: Large Common Blocks.
-* ETime intrinsic <1>: ETime Intrinsic (function).
-* ETime intrinsic: ETime Intrinsic (subroutine).
-* exceptions, floating point: Floating-point Exception Handling.
-* exclamation points: Exclamation Point.
-* executable file: What is GNU Fortran?.
-* Exit intrinsic: Exit Intrinsic.
-* Exp intrinsic: Exp Intrinsic.
-* Exponent intrinsic: Exponent Intrinsic.
-* extended-source option: Fortran Dialect Options.
-* extensions, file name: Overall Options.
-* extensions, more: More Extensions.
-* extensions, VXT: VXT Fortran.
-* external names: Mangling of Names.
-* extra warnings: Warning Options.
-* f2c: Increasing Precision/Range.
-* f2c compatibility <1>: Avoid f2c Compatibility.
-* f2c compatibility <2>: Block Data and Libraries.
-* f2c compatibility <3>: Debugging and Interfacing.
-* f2c compatibility <4>: Code Gen Options.
-* f2c compatibility <5>: Shorthand Options.
-* f2c compatibility: Overall Options.
-* f2c intrinsics: Fortran Dialect Options.
-* F2C_INSTALL_FLAG: Installing f2c.
-* F2CLIBOK: Installing f2c.
-* f77 command: Installing f77.
-* f77 compatibility: Shorthand Options.
-* f77 support: Backslash in Constants.
-* f771 program: What is GNU Fortran?.
-* f771, linking error for: Missing strtoul.
-* F77_INSTALL_FLAG: Installing f77.
-* fatal signal: Bug Criteria.
-* Fdate intrinsic <1>: Fdate Intrinsic (function).
-* Fdate intrinsic: Fdate Intrinsic (subroutine).
-* features, language: Direction of Language Development.
-* features, ugly <1>: Distensions.
-* features, ugly: Shorthand Options.
-* FFE: What is GNU Fortran?.
-* FFECOM_sizeMAXSTACKITEM: Maximum Stackable Size.
-* fflush() <1>: Output Assumed To Flush.
-* fflush(): Always Flush Output.
-* FGet intrinsic <1>: FGet Intrinsic (function).
-* FGet intrinsic: FGet Intrinsic (subroutine).
-* FGetC intrinsic <1>: FGetC Intrinsic (function).
-* FGetC intrinsic: FGetC Intrinsic (subroutine).
-* file format not recognized: What is GNU Fortran?.
-* file name extension: Overall Options.
-* file name suffix: Overall Options.
-* file type: Overall Options.
-* file, source: What is GNU Fortran?.
-* files, executable: What is GNU Fortran?.
-* files, source <1>: Source Form.
-* files, source: Lines.
-* fixed form <1>: Source Form.
-* fixed form <2>: Lines.
-* fixed form: Fortran Dialect Options.
-* fixed-form line length: Fortran Dialect Options.
-* Float intrinsic: Float Intrinsic.
-* FloatI intrinsic: FloatI Intrinsic.
-* floating point exceptions: Floating-point Exception Handling.
-* floating-point bit patterns: Floating-point Bit Patterns.
-* floating-point errors: Floating-point Errors.
-* FloatJ intrinsic: FloatJ Intrinsic.
-* Floor intrinsic: Floor Intrinsic.
-* Flush intrinsic: Flush Intrinsic.
-* flushing output <1>: Output Assumed To Flush.
-* flushing output: Always Flush Output.
-* FNum intrinsic: FNum Intrinsic.
-* FORMAT statement <1>: Q Edit Descriptor.
-* FORMAT statement: Expressions in FORMAT Statements.
-* FORTRAN 66 <1>: Fortran Dialect Options.
-* FORTRAN 66: Shorthand Options.
-* FORTRAN 77 compatibility: Standard Support.
-* Fortran 90 compatibility: Fortran 90.
-* Fortran 90 features: Fortran Dialect Options.
-* Fortran 90 intrinsics: Fortran Dialect Options.
-* Fortran 90 support: Fortran 90 Support.
-* Fortran preprocessor: Overall Options.
-* FPE handling: Floating-point Exception Handling.
-* FPut intrinsic <1>: FPut Intrinsic (function).
-* FPut intrinsic: FPut Intrinsic (subroutine).
-* FPutC intrinsic <1>: FPutC Intrinsic (function).
-* FPutC intrinsic: FPutC Intrinsic (subroutine).
-* Fraction intrinsic: Fraction Intrinsic.
-* free form <1>: Source Form.
-* free form <2>: Lines.
-* free form: Fortran Dialect Options.
-* front end, g77: What is GNU Fortran?.
-* FSeek intrinsic: FSeek Intrinsic.
-* FSF, funding the: Funding GNU Fortran.
-* FStat intrinsic <1>: FStat Intrinsic (function).
-* FStat intrinsic: FStat Intrinsic (subroutine).
-* FTell intrinsic <1>: FTell Intrinsic (function).
-* FTell intrinsic: FTell Intrinsic (subroutine).
-* function references, in adjustable array bounds: Array Bounds Expressions.
-* FUNCTION statement <1>: Functions.
-* FUNCTION statement: Procedures.
-* functions: Functions.
-* functions, mistyped: Not My Type.
-* funding improvements: Funding GNU Fortran.
-* funding the FSF: Funding GNU Fortran.
-* g77 command <1>: G77 and GCC.
-* g77 command: What is GNU Fortran?.
-* g77 front end: What is GNU Fortran?.
-* g77 options, --driver <1>: Invoking G77.
-* g77 options, --driver: G77 and GCC.
-* g77 options, -v: G77 and GCC.
-* g77 version number: Merging Distributions.
-* g77, components of: What is GNU Fortran?.
-* g77, installation of: Installation of Binaries.
-* GBE <1>: Patching GNU CC Necessary.
-* GBE: What is GNU Fortran?.
-* gcc back end: What is GNU Fortran?.
-* gcc command <1>: G77 and GCC.
-* gcc command: What is GNU Fortran?.
-* gcc command as driver: What is GNU Fortran?.
-* gcc not recognizing Fortran source: What is GNU Fortran?.
-* gcc version numbering: Merging Distributions.
-* gcc versions supported by g77: Merging Distributions.
-* gcc will not compile Fortran programs: Where to Install.
-* gcc, building: Building GNU CC Necessary.
-* gcc, installation of: Installation of Binaries.
-* gdb command: What is GNU Fortran?.
-* gdb support: Debugger Problems.
-* generic intrinsics: Generics and Specifics.
-* GError intrinsic: GError Intrinsic.
-* GetArg intrinsic: GetArg Intrinsic.
-* GETARG() intrinsic: Main Program Unit.
-* GetCWD intrinsic <1>: GetCWD Intrinsic (function).
-* GetCWD intrinsic: GetCWD Intrinsic (subroutine).
-* GetEnv intrinsic: GetEnv Intrinsic.
-* GetGId intrinsic: GetGId Intrinsic.
-* GetLog intrinsic: GetLog Intrinsic.
-* GetPId intrinsic: GetPId Intrinsic.
-* getting started: Getting Started.
-* GetUId intrinsic: GetUId Intrinsic.
-* global names, warning <1>: Code Gen Options.
-* global names, warning: Warning Options.
-* GMTime intrinsic: GMTime Intrinsic.
-* GNU Back End (GBE): What is GNU Fortran?.
-* GNU C required: GNU C Required.
-* GNU Fortran command options: Invoking G77.
-* GNU Fortran Front End (FFE): What is GNU Fortran?.
-* GNU version numbering: Merging Distributions.
-* GOTO statement: Assigned Statement Labels.
-* gperf: Missing gperf?.
-* groups of intrinsics: Intrinsic Groups.
-* hardware errors: Signal 11 and Friends.
-* hidden intrinsics: Intrinsic Groups.
-* Hollerith constants <1>: Character and Hollerith Constants.
-* Hollerith constants <2>: Ugly Conversion of Initializers.
-* Hollerith constants <3>: Ugly Implicit Argument Conversion.
-* Hollerith constants: Fortran Dialect Options.
-* HostNm intrinsic <1>: HostNm Intrinsic (function).
-* HostNm intrinsic: HostNm Intrinsic (subroutine).
-* Huge intrinsic: Huge Intrinsic.
-* I/O, errors: Run-time Library Errors.
-* I/O, flushing <1>: Output Assumed To Flush.
-* I/O, flushing: Always Flush Output.
-* IAbs intrinsic: IAbs Intrinsic.
-* IAChar intrinsic: IAChar Intrinsic.
-* IAnd intrinsic: IAnd Intrinsic.
-* IArgC intrinsic: IArgC Intrinsic.
-* IARGC() intrinsic: Main Program Unit.
-* IBClr intrinsic: IBClr Intrinsic.
-* IBits intrinsic: IBits Intrinsic.
-* IBSet intrinsic: IBSet Intrinsic.
-* IChar intrinsic: IChar Intrinsic.
-* IDate intrinsic <1>: IDate Intrinsic (VXT).
-* IDate intrinsic: IDate Intrinsic (UNIX).
-* IDiM intrinsic: IDiM Intrinsic.
-* IDInt intrinsic: IDInt Intrinsic.
-* IDNInt intrinsic: IDNInt Intrinsic.
-* IEEE conformance: Optimize Options.
-* IEOr intrinsic: IEOr Intrinsic.
-* IErrNo intrinsic: IErrNo Intrinsic.
-* IFix intrinsic: IFix Intrinsic.
-* IIAbs intrinsic: IIAbs Intrinsic.
-* IIAnd intrinsic: IIAnd Intrinsic.
-* IIBClr intrinsic: IIBClr Intrinsic.
-* IIBits intrinsic: IIBits Intrinsic.
-* IIBSet intrinsic: IIBSet Intrinsic.
-* IIDiM intrinsic: IIDiM Intrinsic.
-* IIDInt intrinsic: IIDInt Intrinsic.
-* IIDNnt intrinsic: IIDNnt Intrinsic.
-* IIEOr intrinsic: IIEOr Intrinsic.
-* IIFix intrinsic: IIFix Intrinsic.
-* IInt intrinsic: IInt Intrinsic.
-* IIOr intrinsic: IIOr Intrinsic.
-* IIQint intrinsic: IIQint Intrinsic.
-* IIQNnt intrinsic: IIQNnt Intrinsic.
-* IIShftC intrinsic: IIShftC Intrinsic.
-* IISign intrinsic: IISign Intrinsic.
-* illegal unit number <1>: Large File Unit Numbers.
-* illegal unit number: Larger File Unit Numbers.
-* Imag intrinsic: Imag Intrinsic.
-* imaginary part: Ugly Complex Part Extraction.
-* imaginary part of complex: Complex Variables.
-* ImagPart intrinsic: ImagPart Intrinsic.
-* IMax0 intrinsic: IMax0 Intrinsic.
-* IMax1 intrinsic: IMax1 Intrinsic.
-* IMin0 intrinsic: IMin0 Intrinsic.
-* IMin1 intrinsic: IMin1 Intrinsic.
-* IMod intrinsic: IMod Intrinsic.
-* IMPLICIT CHARACTER*(*) statement: Limitation on Implicit Declarations.
-* implicit declaration, warning: Warning Options.
-* IMPLICIT NONE, similar effect: Warning Options.
-* implicit typing: Not My Type.
-* improvements, funding: Funding GNU Fortran.
-* in-line code: What is GNU Fortran?.
-* in-line compilation: Optimize Options.
-* INCLUDE: INCLUDE.
-* INCLUDE directive <1>: Bug Reporting.
-* INCLUDE directive <2>: Directory Options.
-* INCLUDE directive: Preprocessor Options.
-* included files: Bug Reporting.
-* inclusion, directory search paths for: Directory Options.
-* inconsistent floating-point results: Floating-point Errors.
-* incorrect diagnostics: What is GNU Fortran?.
-* incorrect error messages: What is GNU Fortran?.
-* incorrect use of language: What is GNU Fortran?.
-* increasing maximum unit number <1>: Large File Unit Numbers.
-* increasing maximum unit number: Larger File Unit Numbers.
-* increasing precision: Increasing Precision/Range.
-* increasing range: Increasing Precision/Range.
-* Index intrinsic: Index Intrinsic.
-* info, updating directory: Updating Documentation.
-* INInt intrinsic: INInt Intrinsic.
-* initialization: Actual Bugs.
-* initialization of local variables: Code Gen Options.
-* initialization, runtime: Startup Code.
-* initialization, statement placement: Initializing Before Specifying.
-* INot intrinsic: INot Intrinsic.
-* INQUIRE statement: OPEN CLOSE and INQUIRE Keywords.
-* installation of binaries: Installation of Binaries.
-* installation problems: Problems Installing.
-* installation trouble: Trouble.
-* installing GNU Fortran: Installation.
-* installing, checking before: Pre-installation Checks.
-* Int intrinsic: Int Intrinsic.
-* Int2 intrinsic: Int2 Intrinsic.
-* Int8 intrinsic: Int8 Intrinsic.
-* integer constants: Actual Bugs.
-* INTEGER(KIND=1) type: Compiler Types.
-* INTEGER(KIND=2) type: Compiler Types.
-* INTEGER(KIND=3) type: Compiler Types.
-* INTEGER(KIND=6) type: Compiler Types.
-* INTEGER*2 support: Popular Non-standard Types.
-* interfacing: Debugging and Interfacing.
-* intrinsics, Abort: Abort Intrinsic.
-* intrinsics, Abs: Abs Intrinsic.
-* intrinsics, Access: Access Intrinsic.
-* intrinsics, AChar: AChar Intrinsic.
-* intrinsics, ACos: ACos Intrinsic.
-* intrinsics, ACosD: ACosD Intrinsic.
-* intrinsics, AdjustL: AdjustL Intrinsic.
-* intrinsics, AdjustR: AdjustR Intrinsic.
-* intrinsics, AImag: AImag Intrinsic.
-* intrinsics, AIMAG: REAL() and AIMAG() of Complex.
-* intrinsics, AIMax0: AIMax0 Intrinsic.
-* intrinsics, AIMin0: AIMin0 Intrinsic.
-* intrinsics, AInt: AInt Intrinsic.
-* intrinsics, AJMax0: AJMax0 Intrinsic.
-* intrinsics, AJMin0: AJMin0 Intrinsic.
-* intrinsics, Alarm: Alarm Intrinsic.
-* intrinsics, All: All Intrinsic.
-* intrinsics, Allocated: Allocated Intrinsic.
-* intrinsics, ALog: ALog Intrinsic.
-* intrinsics, ALog10: ALog10 Intrinsic.
-* intrinsics, AMax0: AMax0 Intrinsic.
-* intrinsics, AMax1: AMax1 Intrinsic.
-* intrinsics, AMin0: AMin0 Intrinsic.
-* intrinsics, AMin1: AMin1 Intrinsic.
-* intrinsics, AMod: AMod Intrinsic.
-* intrinsics, AND: Bit Operations on Floating-point Data.
-* intrinsics, And: And Intrinsic.
-* intrinsics, ANInt: ANInt Intrinsic.
-* intrinsics, Any: Any Intrinsic.
-* intrinsics, ASin: ASin Intrinsic.
-* intrinsics, ASinD: ASinD Intrinsic.
-* intrinsics, Associated: Associated Intrinsic.
-* intrinsics, ATan: ATan Intrinsic.
-* intrinsics, ATan2: ATan2 Intrinsic.
-* intrinsics, ATan2D: ATan2D Intrinsic.
-* intrinsics, ATanD: ATanD Intrinsic.
-* intrinsics, BesJ0: BesJ0 Intrinsic.
-* intrinsics, BesJ1: BesJ1 Intrinsic.
-* intrinsics, BesJN: BesJN Intrinsic.
-* intrinsics, BesY0: BesY0 Intrinsic.
-* intrinsics, BesY1: BesY1 Intrinsic.
-* intrinsics, BesYN: BesYN Intrinsic.
-* intrinsics, Bit_Size: Bit_Size Intrinsic.
-* intrinsics, BITest: BITest Intrinsic.
-* intrinsics, BJTest: BJTest Intrinsic.
-* intrinsics, BTest: BTest Intrinsic.
-* intrinsics, CAbs: CAbs Intrinsic.
-* intrinsics, CCos: CCos Intrinsic.
-* intrinsics, CDAbs: CDAbs Intrinsic.
-* intrinsics, CDCos: CDCos Intrinsic.
-* intrinsics, CDExp: CDExp Intrinsic.
-* intrinsics, CDLog: CDLog Intrinsic.
-* intrinsics, CDSin: CDSin Intrinsic.
-* intrinsics, CDSqRt: CDSqRt Intrinsic.
-* intrinsics, Ceiling: Ceiling Intrinsic.
-* intrinsics, CExp: CExp Intrinsic.
-* intrinsics, Char: Char Intrinsic.
-* intrinsics, ChDir <1>: ChDir Intrinsic (function).
-* intrinsics, ChDir: ChDir Intrinsic (subroutine).
-* intrinsics, ChMod <1>: ChMod Intrinsic (function).
-* intrinsics, ChMod: ChMod Intrinsic (subroutine).
-* intrinsics, CLog: CLog Intrinsic.
-* intrinsics, Cmplx: Cmplx Intrinsic.
-* intrinsics, CMPLX: CMPLX() of DOUBLE PRECISION.
-* intrinsics, Complex: Complex Intrinsic.
-* intrinsics, COMPLEX: Fortran Dialect Options.
-* intrinsics, Conjg: Conjg Intrinsic.
-* intrinsics, context-sensitive: Context-Sensitive Intrinsicness.
-* intrinsics, Cos: Cos Intrinsic.
-* intrinsics, CosD: CosD Intrinsic.
-* intrinsics, CosH: CosH Intrinsic.
-* intrinsics, Count: Count Intrinsic.
-* intrinsics, Cpu_Time: Cpu_Time Intrinsic.
-* intrinsics, CShift: CShift Intrinsic.
-* intrinsics, CSin: CSin Intrinsic.
-* intrinsics, CSqRt: CSqRt Intrinsic.
-* intrinsics, CTime <1>: CTime Intrinsic (function).
-* intrinsics, CTime: CTime Intrinsic (subroutine).
-* intrinsics, DAbs: DAbs Intrinsic.
-* intrinsics, DACos: DACos Intrinsic.
-* intrinsics, DACosD: DACosD Intrinsic.
-* intrinsics, DASin: DASin Intrinsic.
-* intrinsics, DASinD: DASinD Intrinsic.
-* intrinsics, DATan: DATan Intrinsic.
-* intrinsics, DATan2: DATan2 Intrinsic.
-* intrinsics, DATan2D: DATan2D Intrinsic.
-* intrinsics, DATanD: DATanD Intrinsic.
-* intrinsics, Date: Date Intrinsic.
-* intrinsics, Date_and_Time: Date_and_Time Intrinsic.
-* intrinsics, DbesJ0: DbesJ0 Intrinsic.
-* intrinsics, DbesJ1: DbesJ1 Intrinsic.
-* intrinsics, DbesJN: DbesJN Intrinsic.
-* intrinsics, DbesY0: DbesY0 Intrinsic.
-* intrinsics, DbesY1: DbesY1 Intrinsic.
-* intrinsics, DbesYN: DbesYN Intrinsic.
-* intrinsics, Dble: Dble Intrinsic.
-* intrinsics, DbleQ: DbleQ Intrinsic.
-* intrinsics, DCmplx: DCmplx Intrinsic.
-* intrinsics, DConjg: DConjg Intrinsic.
-* intrinsics, DCos: DCos Intrinsic.
-* intrinsics, DCosD: DCosD Intrinsic.
-* intrinsics, DCosH: DCosH Intrinsic.
-* intrinsics, DDiM: DDiM Intrinsic.
-* intrinsics, deleted: Intrinsic Groups.
-* intrinsics, DErF: DErF Intrinsic.
-* intrinsics, DErFC: DErFC Intrinsic.
-* intrinsics, DExp: DExp Intrinsic.
-* intrinsics, DFloat: DFloat Intrinsic.
-* intrinsics, DFlotI: DFlotI Intrinsic.
-* intrinsics, DFlotJ: DFlotJ Intrinsic.
-* intrinsics, Digits: Digits Intrinsic.
-* intrinsics, DiM: DiM Intrinsic.
-* intrinsics, DImag: DImag Intrinsic.
-* intrinsics, DInt: DInt Intrinsic.
-* intrinsics, disabled: Intrinsic Groups.
-* intrinsics, DLog: DLog Intrinsic.
-* intrinsics, DLog10: DLog10 Intrinsic.
-* intrinsics, DMax1: DMax1 Intrinsic.
-* intrinsics, DMin1: DMin1 Intrinsic.
-* intrinsics, DMod: DMod Intrinsic.
-* intrinsics, DNInt: DNInt Intrinsic.
-* intrinsics, Dot_Product: Dot_Product Intrinsic.
-* intrinsics, DProd: DProd Intrinsic.
-* intrinsics, DReal: DReal Intrinsic.
-* intrinsics, DSign: DSign Intrinsic.
-* intrinsics, DSin: DSin Intrinsic.
-* intrinsics, DSinD: DSinD Intrinsic.
-* intrinsics, DSinH: DSinH Intrinsic.
-* intrinsics, DSqRt: DSqRt Intrinsic.
-* intrinsics, DTan: DTan Intrinsic.
-* intrinsics, DTanD: DTanD Intrinsic.
-* intrinsics, DTanH: DTanH Intrinsic.
-* intrinsics, Dtime <1>: Dtime Intrinsic (function).
-* intrinsics, Dtime: Dtime Intrinsic (subroutine).
-* intrinsics, enabled: Intrinsic Groups.
-* intrinsics, EOShift: EOShift Intrinsic.
-* intrinsics, Epsilon: Epsilon Intrinsic.
-* intrinsics, ErF: ErF Intrinsic.
-* intrinsics, ErFC: ErFC Intrinsic.
-* intrinsics, ETime <1>: ETime Intrinsic (function).
-* intrinsics, ETime: ETime Intrinsic (subroutine).
-* intrinsics, Exit: Exit Intrinsic.
-* intrinsics, Exp: Exp Intrinsic.
-* intrinsics, Exponent: Exponent Intrinsic.
-* intrinsics, f2c: Fortran Dialect Options.
-* intrinsics, Fdate <1>: Fdate Intrinsic (function).
-* intrinsics, Fdate: Fdate Intrinsic (subroutine).
-* intrinsics, FGet <1>: FGet Intrinsic (function).
-* intrinsics, FGet: FGet Intrinsic (subroutine).
-* intrinsics, FGetC <1>: FGetC Intrinsic (function).
-* intrinsics, FGetC: FGetC Intrinsic (subroutine).
-* intrinsics, Float: Float Intrinsic.
-* intrinsics, FloatI: FloatI Intrinsic.
-* intrinsics, FloatJ: FloatJ Intrinsic.
-* intrinsics, Floor: Floor Intrinsic.
-* intrinsics, Flush: Flush Intrinsic.
-* intrinsics, FNum: FNum Intrinsic.
-* intrinsics, Fortran 90: Fortran Dialect Options.
-* intrinsics, FPut <1>: FPut Intrinsic (function).
-* intrinsics, FPut: FPut Intrinsic (subroutine).
-* intrinsics, FPutC <1>: FPutC Intrinsic (function).
-* intrinsics, FPutC: FPutC Intrinsic (subroutine).
-* intrinsics, Fraction: Fraction Intrinsic.
-* intrinsics, FSeek: FSeek Intrinsic.
-* intrinsics, FStat <1>: FStat Intrinsic (function).
-* intrinsics, FStat: FStat Intrinsic (subroutine).
-* intrinsics, FTell <1>: FTell Intrinsic (function).
-* intrinsics, FTell: FTell Intrinsic (subroutine).
-* intrinsics, generic: Generics and Specifics.
-* intrinsics, GError: GError Intrinsic.
-* intrinsics, GetArg: GetArg Intrinsic.
-* intrinsics, GETARG(): Main Program Unit.
-* intrinsics, GetCWD <1>: GetCWD Intrinsic (function).
-* intrinsics, GetCWD: GetCWD Intrinsic (subroutine).
-* intrinsics, GetEnv: GetEnv Intrinsic.
-* intrinsics, GetGId: GetGId Intrinsic.
-* intrinsics, GetLog: GetLog Intrinsic.
-* intrinsics, GetPId: GetPId Intrinsic.
-* intrinsics, GetUId: GetUId Intrinsic.
-* intrinsics, GMTime: GMTime Intrinsic.
-* intrinsics, groups: Intrinsic Groups.
-* intrinsics, groups of: Intrinsic Groups.
-* intrinsics, hidden: Intrinsic Groups.
-* intrinsics, HostNm <1>: HostNm Intrinsic (function).
-* intrinsics, HostNm: HostNm Intrinsic (subroutine).
-* intrinsics, Huge: Huge Intrinsic.
-* intrinsics, IAbs: IAbs Intrinsic.
-* intrinsics, IAChar: IAChar Intrinsic.
-* intrinsics, IAnd: IAnd Intrinsic.
-* intrinsics, IArgC: IArgC Intrinsic.
-* intrinsics, IARGC(): Main Program Unit.
-* intrinsics, IBClr: IBClr Intrinsic.
-* intrinsics, IBits: IBits Intrinsic.
-* intrinsics, IBSet: IBSet Intrinsic.
-* intrinsics, IChar: IChar Intrinsic.
-* intrinsics, IDate <1>: IDate Intrinsic (VXT).
-* intrinsics, IDate: IDate Intrinsic (UNIX).
-* intrinsics, IDiM: IDiM Intrinsic.
-* intrinsics, IDInt: IDInt Intrinsic.
-* intrinsics, IDNInt: IDNInt Intrinsic.
-* intrinsics, IEOr: IEOr Intrinsic.
-* intrinsics, IErrNo: IErrNo Intrinsic.
-* intrinsics, IFix: IFix Intrinsic.
-* intrinsics, IIAbs: IIAbs Intrinsic.
-* intrinsics, IIAnd: IIAnd Intrinsic.
-* intrinsics, IIBClr: IIBClr Intrinsic.
-* intrinsics, IIBits: IIBits Intrinsic.
-* intrinsics, IIBSet: IIBSet Intrinsic.
-* intrinsics, IIDiM: IIDiM Intrinsic.
-* intrinsics, IIDInt: IIDInt Intrinsic.
-* intrinsics, IIDNnt: IIDNnt Intrinsic.
-* intrinsics, IIEOr: IIEOr Intrinsic.
-* intrinsics, IIFix: IIFix Intrinsic.
-* intrinsics, IInt: IInt Intrinsic.
-* intrinsics, IIOr: IIOr Intrinsic.
-* intrinsics, IIQint: IIQint Intrinsic.
-* intrinsics, IIQNnt: IIQNnt Intrinsic.
-* intrinsics, IIShftC: IIShftC Intrinsic.
-* intrinsics, IISign: IISign Intrinsic.
-* intrinsics, Imag: Imag Intrinsic.
-* intrinsics, ImagPart: ImagPart Intrinsic.
-* intrinsics, IMax0: IMax0 Intrinsic.
-* intrinsics, IMax1: IMax1 Intrinsic.
-* intrinsics, IMin0: IMin0 Intrinsic.
-* intrinsics, IMin1: IMin1 Intrinsic.
-* intrinsics, IMod: IMod Intrinsic.
-* intrinsics, Index: Index Intrinsic.
-* intrinsics, INInt: INInt Intrinsic.
-* intrinsics, INot: INot Intrinsic.
-* intrinsics, Int: Int Intrinsic.
-* intrinsics, Int2: Int2 Intrinsic.
-* intrinsics, Int8: Int8 Intrinsic.
-* intrinsics, IOr: IOr Intrinsic.
-* intrinsics, IRand: IRand Intrinsic.
-* intrinsics, IsaTty: IsaTty Intrinsic.
-* intrinsics, IShft: IShft Intrinsic.
-* intrinsics, IShftC: IShftC Intrinsic.
-* intrinsics, ISign: ISign Intrinsic.
-* intrinsics, ITime: ITime Intrinsic.
-* intrinsics, IZExt: IZExt Intrinsic.
-* intrinsics, JIAbs: JIAbs Intrinsic.
-* intrinsics, JIAnd: JIAnd Intrinsic.
-* intrinsics, JIBClr: JIBClr Intrinsic.
-* intrinsics, JIBits: JIBits Intrinsic.
-* intrinsics, JIBSet: JIBSet Intrinsic.
-* intrinsics, JIDiM: JIDiM Intrinsic.
-* intrinsics, JIDInt: JIDInt Intrinsic.
-* intrinsics, JIDNnt: JIDNnt Intrinsic.
-* intrinsics, JIEOr: JIEOr Intrinsic.
-* intrinsics, JIFix: JIFix Intrinsic.
-* intrinsics, JInt: JInt Intrinsic.
-* intrinsics, JIOr: JIOr Intrinsic.
-* intrinsics, JIQint: JIQint Intrinsic.
-* intrinsics, JIQNnt: JIQNnt Intrinsic.
-* intrinsics, JIShft: JIShft Intrinsic.
-* intrinsics, JIShftC: JIShftC Intrinsic.
-* intrinsics, JISign: JISign Intrinsic.
-* intrinsics, JMax0: JMax0 Intrinsic.
-* intrinsics, JMax1: JMax1 Intrinsic.
-* intrinsics, JMin0: JMin0 Intrinsic.
-* intrinsics, JMin1: JMin1 Intrinsic.
-* intrinsics, JMod: JMod Intrinsic.
-* intrinsics, JNInt: JNInt Intrinsic.
-* intrinsics, JNot: JNot Intrinsic.
-* intrinsics, JZExt: JZExt Intrinsic.
-* intrinsics, Kill <1>: Kill Intrinsic (function).
-* intrinsics, Kill: Kill Intrinsic (subroutine).
-* intrinsics, Kind: Kind Intrinsic.
-* intrinsics, LBound: LBound Intrinsic.
-* intrinsics, Len: Len Intrinsic.
-* intrinsics, Len_Trim: Len_Trim Intrinsic.
-* intrinsics, LGe: LGe Intrinsic.
-* intrinsics, LGt: LGt Intrinsic.
-* intrinsics, Link <1>: Link Intrinsic (function).
-* intrinsics, Link: Link Intrinsic (subroutine).
-* intrinsics, LLe: LLe Intrinsic.
-* intrinsics, LLt: LLt Intrinsic.
-* intrinsics, LnBlnk: LnBlnk Intrinsic.
-* intrinsics, Loc: Loc Intrinsic.
-* intrinsics, Log: Log Intrinsic.
-* intrinsics, Log10: Log10 Intrinsic.
-* intrinsics, Logical: Logical Intrinsic.
-* intrinsics, Long: Long Intrinsic.
-* intrinsics, LShift: LShift Intrinsic.
-* intrinsics, LStat <1>: LStat Intrinsic (function).
-* intrinsics, LStat: LStat Intrinsic (subroutine).
-* intrinsics, LTime: LTime Intrinsic.
-* intrinsics, MatMul: MatMul Intrinsic.
-* intrinsics, Max: Max Intrinsic.
-* intrinsics, Max0: Max0 Intrinsic.
-* intrinsics, Max1: Max1 Intrinsic.
-* intrinsics, MaxExponent: MaxExponent Intrinsic.
-* intrinsics, MaxLoc: MaxLoc Intrinsic.
-* intrinsics, MaxVal: MaxVal Intrinsic.
-* intrinsics, MClock: MClock Intrinsic.
-* intrinsics, MClock8: MClock8 Intrinsic.
-* intrinsics, Merge: Merge Intrinsic.
-* intrinsics, MIL-STD 1753: Fortran Dialect Options.
-* intrinsics, Min: Min Intrinsic.
-* intrinsics, Min0: Min0 Intrinsic.
-* intrinsics, Min1: Min1 Intrinsic.
-* intrinsics, MinExponent: MinExponent Intrinsic.
-* intrinsics, MinLoc: MinLoc Intrinsic.
-* intrinsics, MinVal: MinVal Intrinsic.
-* intrinsics, Mod: Mod Intrinsic.
-* intrinsics, Modulo: Modulo Intrinsic.
-* intrinsics, MvBits: MvBits Intrinsic.
-* intrinsics, Nearest: Nearest Intrinsic.
-* intrinsics, NInt: NInt Intrinsic.
-* intrinsics, Not: Not Intrinsic.
-* intrinsics, OR: Bit Operations on Floating-point Data.
-* intrinsics, Or: Or Intrinsic.
-* intrinsics, others: Other Intrinsics.
-* intrinsics, Pack: Pack Intrinsic.
-* intrinsics, PError: PError Intrinsic.
-* intrinsics, Precision: Precision Intrinsic.
-* intrinsics, Present: Present Intrinsic.
-* intrinsics, Product: Product Intrinsic.
-* intrinsics, QAbs: QAbs Intrinsic.
-* intrinsics, QACos: QACos Intrinsic.
-* intrinsics, QACosD: QACosD Intrinsic.
-* intrinsics, QASin: QASin Intrinsic.
-* intrinsics, QASinD: QASinD Intrinsic.
-* intrinsics, QATan: QATan Intrinsic.
-* intrinsics, QATan2: QATan2 Intrinsic.
-* intrinsics, QATan2D: QATan2D Intrinsic.
-* intrinsics, QATanD: QATanD Intrinsic.
-* intrinsics, QCos: QCos Intrinsic.
-* intrinsics, QCosD: QCosD Intrinsic.
-* intrinsics, QCosH: QCosH Intrinsic.
-* intrinsics, QDiM: QDiM Intrinsic.
-* intrinsics, QExp: QExp Intrinsic.
-* intrinsics, QExt: QExt Intrinsic.
-* intrinsics, QExtD: QExtD Intrinsic.
-* intrinsics, QFloat: QFloat Intrinsic.
-* intrinsics, QInt: QInt Intrinsic.
-* intrinsics, QLog: QLog Intrinsic.
-* intrinsics, QLog10: QLog10 Intrinsic.
-* intrinsics, QMax1: QMax1 Intrinsic.
-* intrinsics, QMin1: QMin1 Intrinsic.
-* intrinsics, QMod: QMod Intrinsic.
-* intrinsics, QNInt: QNInt Intrinsic.
-* intrinsics, QSin: QSin Intrinsic.
-* intrinsics, QSinD: QSinD Intrinsic.
-* intrinsics, QSinH: QSinH Intrinsic.
-* intrinsics, QSqRt: QSqRt Intrinsic.
-* intrinsics, QTan: QTan Intrinsic.
-* intrinsics, QTanD: QTanD Intrinsic.
-* intrinsics, QTanH: QTanH Intrinsic.
-* intrinsics, Radix: Radix Intrinsic.
-* intrinsics, Rand: Rand Intrinsic.
-* intrinsics, Random_Number: Random_Number Intrinsic.
-* intrinsics, Random_Seed: Random_Seed Intrinsic.
-* intrinsics, Range: Range Intrinsic.
-* intrinsics, Real: Real Intrinsic.
-* intrinsics, REAL: REAL() and AIMAG() of Complex.
-* intrinsics, RealPart: RealPart Intrinsic.
-* intrinsics, Rename <1>: Rename Intrinsic (function).
-* intrinsics, Rename: Rename Intrinsic (subroutine).
-* intrinsics, Repeat: Repeat Intrinsic.
-* intrinsics, Reshape: Reshape Intrinsic.
-* intrinsics, RRSpacing: RRSpacing Intrinsic.
-* intrinsics, RShift: RShift Intrinsic.
-* intrinsics, Scale: Scale Intrinsic.
-* intrinsics, Scan: Scan Intrinsic.
-* intrinsics, Secnds: Secnds Intrinsic.
-* intrinsics, Second <1>: Second Intrinsic (subroutine).
-* intrinsics, Second: Second Intrinsic (function).
-* intrinsics, Selected_Int_Kind: Selected_Int_Kind Intrinsic.
-* intrinsics, Selected_Real_Kind: Selected_Real_Kind Intrinsic.
-* intrinsics, Set_Exponent: Set_Exponent Intrinsic.
-* intrinsics, Shape: Shape Intrinsic.
-* intrinsics, SHIFT: Bit Operations on Floating-point Data.
-* intrinsics, Short: Short Intrinsic.
-* intrinsics, Sign: Sign Intrinsic.
-* intrinsics, Signal <1>: Signal Intrinsic (function).
-* intrinsics, Signal: Signal Intrinsic (subroutine).
-* intrinsics, SIGNAL(): Actual Bugs.
-* intrinsics, Sin: Sin Intrinsic.
-* intrinsics, SinD: SinD Intrinsic.
-* intrinsics, SinH: SinH Intrinsic.
-* intrinsics, Sleep: Sleep Intrinsic.
-* intrinsics, Sngl: Sngl Intrinsic.
-* intrinsics, SnglQ: SnglQ Intrinsic.
-* intrinsics, Spacing: Spacing Intrinsic.
-* intrinsics, Spread: Spread Intrinsic.
-* intrinsics, SqRt: SqRt Intrinsic.
-* intrinsics, SRand: SRand Intrinsic.
-* intrinsics, Stat <1>: Stat Intrinsic (function).
-* intrinsics, Stat: Stat Intrinsic (subroutine).
-* intrinsics, Sum: Sum Intrinsic.
-* intrinsics, SymLnk <1>: SymLnk Intrinsic (function).
-* intrinsics, SymLnk: SymLnk Intrinsic (subroutine).
-* intrinsics, System <1>: System Intrinsic (function).
-* intrinsics, System: System Intrinsic (subroutine).
-* intrinsics, System_Clock: System_Clock Intrinsic.
-* intrinsics, table of: Table of Intrinsic Functions.
-* intrinsics, Tan: Tan Intrinsic.
-* intrinsics, TanD: TanD Intrinsic.
-* intrinsics, TanH: TanH Intrinsic.
-* intrinsics, Time <1>: Time Intrinsic (VXT).
-* intrinsics, Time: Time Intrinsic (UNIX).
-* intrinsics, Time8: Time8 Intrinsic.
-* intrinsics, Tiny: Tiny Intrinsic.
-* intrinsics, Transfer: Transfer Intrinsic.
-* intrinsics, Transpose: Transpose Intrinsic.
-* intrinsics, Trim: Trim Intrinsic.
-* intrinsics, TtyNam <1>: TtyNam Intrinsic (function).
-* intrinsics, TtyNam: TtyNam Intrinsic (subroutine).
-* intrinsics, UBound: UBound Intrinsic.
-* intrinsics, UMask <1>: UMask Intrinsic (function).
-* intrinsics, UMask: UMask Intrinsic (subroutine).
-* intrinsics, UNIX: Fortran Dialect Options.
-* intrinsics, Unlink <1>: Unlink Intrinsic (function).
-* intrinsics, Unlink: Unlink Intrinsic (subroutine).
-* intrinsics, Unpack: Unpack Intrinsic.
-* intrinsics, Verify: Verify Intrinsic.
-* intrinsics, VXT: Fortran Dialect Options.
-* intrinsics, XOr: XOr Intrinsic.
-* intrinsics, ZAbs: ZAbs Intrinsic.
-* intrinsics, ZCos: ZCos Intrinsic.
-* intrinsics, ZExp: ZExp Intrinsic.
-* intrinsics, ZExt: ZExt Intrinsic.
-* intrinsics, ZLog: ZLog Intrinsic.
-* intrinsics, ZSin: ZSin Intrinsic.
-* intrinsics, ZSqRt: ZSqRt Intrinsic.
-* Introduction: Top.
-* invalid assembly code: Bug Criteria.
-* invalid input: Bug Criteria.
-* IOr intrinsic: IOr Intrinsic.
-* IOSTAT=: Run-time Library Errors.
-* IRand intrinsic: IRand Intrinsic.
-* IsaTty intrinsic: IsaTty Intrinsic.
-* IShft intrinsic: IShft Intrinsic.
-* IShftC intrinsic: IShftC Intrinsic.
-* ISign intrinsic: ISign Intrinsic.
-* ITime intrinsic: ITime Intrinsic.
-* ix86: Actual Bugs.
-* IZExt intrinsic: IZExt Intrinsic.
-* JCB002 program: Generics and Specifics.
-* JCB003 program: CMPAMBIG.
-* JIAbs intrinsic: JIAbs Intrinsic.
-* JIAnd intrinsic: JIAnd Intrinsic.
-* JIBClr intrinsic: JIBClr Intrinsic.
-* JIBits intrinsic: JIBits Intrinsic.
-* JIBSet intrinsic: JIBSet Intrinsic.
-* JIDiM intrinsic: JIDiM Intrinsic.
-* JIDInt intrinsic: JIDInt Intrinsic.
-* JIDNnt intrinsic: JIDNnt Intrinsic.
-* JIEOr intrinsic: JIEOr Intrinsic.
-* JIFix intrinsic: JIFix Intrinsic.
-* JInt intrinsic: JInt Intrinsic.
-* JIOr intrinsic: JIOr Intrinsic.
-* JIQint intrinsic: JIQint Intrinsic.
-* JIQNnt intrinsic: JIQNnt Intrinsic.
-* JIShft intrinsic: JIShft Intrinsic.
-* JIShftC intrinsic: JIShftC Intrinsic.
-* JISign intrinsic: JISign Intrinsic.
-* JMax0 intrinsic: JMax0 Intrinsic.
-* JMax1 intrinsic: JMax1 Intrinsic.
-* JMin0 intrinsic: JMin0 Intrinsic.
-* JMin1 intrinsic: JMin1 Intrinsic.
-* JMod intrinsic: JMod Intrinsic.
-* JNInt intrinsic: JNInt Intrinsic.
-* JNot intrinsic: JNot Intrinsic.
-* JZExt intrinsic: JZExt Intrinsic.
-* keywords, RECURSIVE: RECURSIVE Keyword.
-* Kill intrinsic <1>: Kill Intrinsic (function).
-* Kill intrinsic: Kill Intrinsic (subroutine).
-* Kind intrinsic: Kind Intrinsic.
-* KIND= notation: Kind Notation.
-* known causes of trouble: Trouble.
-* lack of recursion: RECURSIVE Keyword.
-* language dialect options: Fortran Dialect Options.
-* language f77 not recognized: Where to Install.
-* language features: Direction of Language Development.
-* language, incorrect use of: What is GNU Fortran?.
-* LANGUAGES: Building gcc.
-* large aggregate areas: Actual Bugs.
-* large common blocks: Large Common Blocks.
-* large initialization: Large Initialization.
-* layout of common blocks: Aligned Data.
-* LBound intrinsic: LBound Intrinsic.
-* ld can't find _main: Cannot Link Fortran Programs.
-* ld can't find _strtoul: Missing strtoul.
-* ld can't find strange names: Cannot Link Fortran Programs.
-* ld command: What is GNU Fortran?.
-* ld error for f771: Missing strtoul.
-* ld error for user code: Cannot Link Fortran Programs.
-* ld errors: Large Common Blocks.
-* legacy code: Collected Fortran Wisdom.
-* Len intrinsic: Len Intrinsic.
-* Len_Trim intrinsic: Len_Trim Intrinsic.
-* length of source lines: Fortran Dialect Options.
-* letters, lowercase: Case Sensitivity.
-* letters, uppercase: Case Sensitivity.
-* LGe intrinsic: LGe Intrinsic.
-* LGt intrinsic: LGt Intrinsic.
-* libc, non-ANSI or non-default: Strange Behavior at Run Time.
-* libf2c library: What is GNU Fortran?.
-* libraries: What is GNU Fortran?.
-* libraries, containing BLOCK DATA: Block Data and Libraries.
-* libraries, libf2c: What is GNU Fortran?.
-* limits on continuation lines: Continuation Line.
-* limits, compiler: Compiler Limits.
-* line length: Fortran Dialect Options.
-* lines: Lines.
-* lines, continuation: Continuation Line.
-* lines, long: Long Lines.
-* lines, short: Short Lines.
-* Link intrinsic <1>: Link Intrinsic (function).
-* Link intrinsic: Link Intrinsic (subroutine).
-* linker errors: Large Common Blocks.
-* linking: What is GNU Fortran?.
-* linking against non-standard library: Strange Behavior at Run Time.
-* linking error for f771: Missing strtoul.
-* linking error for user code: Cannot Link Fortran Programs.
-* linking with C: Interoperating with C and C++.
-* LLe intrinsic: LLe Intrinsic.
-* LLt intrinsic: LLt Intrinsic.
-* LnBlnk intrinsic: LnBlnk Intrinsic.
-* Loc intrinsic: Loc Intrinsic.
-* local equivalence areas <1>: Actual Bugs.
-* local equivalence areas: Local Equivalence Areas.
-* Log intrinsic: Log Intrinsic.
-* Log10 intrinsic: Log10 Intrinsic.
-* logical expressions, comparing: Equivalence Versus Equality.
-* Logical intrinsic: Logical Intrinsic.
-* LOGICAL(KIND=1) type: Compiler Types.
-* LOGICAL(KIND=2) type: Compiler Types.
-* LOGICAL(KIND=3) type: Compiler Types.
-* LOGICAL(KIND=6) type: Compiler Types.
-* LOGICAL*1 support: Popular Non-standard Types.
-* Long intrinsic: Long Intrinsic.
-* long source lines: Long Lines.
-* loops, speeding up: Optimize Options.
-* loops, unrolling: Optimize Options.
-* lowercase letters: Case Sensitivity.
-* LShift intrinsic: LShift Intrinsic.
-* LStat intrinsic <1>: LStat Intrinsic (function).
-* LStat intrinsic: LStat Intrinsic (subroutine).
-* LTime intrinsic: LTime Intrinsic.
-* machine code: What is GNU Fortran?.
-* macro options: Shorthand Options.
-* main program unit, debugging: Main Program Unit.
-* main(): Main Program Unit.
-* MAIN__(): Main Program Unit.
-* make clean: Cleanup Kills Stage Directories.
-* make compare: Object File Differences.
-* makeinfo: Missing makeinfo?.
-* MAP statement: STRUCTURE UNION RECORD MAP.
-* MatMul intrinsic: MatMul Intrinsic.
-* Max intrinsic: Max Intrinsic.
-* Max0 intrinsic: Max0 Intrinsic.
-* Max1 intrinsic: Max1 Intrinsic.
-* MaxExponent intrinsic: MaxExponent Intrinsic.
-* maximum number of dimensions: Compiler Limits.
-* maximum rank: Compiler Limits.
-* maximum stackable size: Maximum Stackable Size.
-* maximum unit number <1>: Large File Unit Numbers.
-* maximum unit number: Larger File Unit Numbers.
-* MaxLoc intrinsic: MaxLoc Intrinsic.
-* MaxVal intrinsic: MaxVal Intrinsic.
-* MClock intrinsic: MClock Intrinsic.
-* MClock8 intrinsic: MClock8 Intrinsic.
-* memory usage, of compiler: Actual Bugs.
-* memory utilization: Large Initialization.
-* Merge intrinsic: Merge Intrinsic.
-* merging distributions: Merging Distributions.
-* messages, run-time: Run-time Library Errors.
-* messages, warning: Warning Options.
-* messages, warning and error: Warnings and Errors.
-* MIL-STD 1753 <1>: MIL-STD 1753.
-* MIL-STD 1753 <2>: END DO.
-* MIL-STD 1753 <3>: DO WHILE.
-* MIL-STD 1753: Fortran Dialect Options.
-* Min intrinsic: Min Intrinsic.
-* Min0 intrinsic: Min0 Intrinsic.
-* Min1 intrinsic: Min1 Intrinsic.
-* MinExponent intrinsic: MinExponent Intrinsic.
-* MinLoc intrinsic: MinLoc Intrinsic.
-* MinVal intrinsic: MinVal Intrinsic.
-* missing bison: Missing bison?.
-* missing debug features: Debugging Options.
-* missing gperf: Missing gperf?.
-* missing makeinfo: Missing makeinfo?.
-* mistakes: What is GNU Fortran?.
-* mistyped functions: Not My Type.
-* mistyped variables: Not My Type.
-* Mod intrinsic: Mod Intrinsic.
-* modifying g77 <1>: Unpacking.
-* modifying g77: Overall Options.
-* Modulo intrinsic: Modulo Intrinsic.
-* MvBits intrinsic: MvBits Intrinsic.
-* MXUNIT <1>: Large File Unit Numbers.
-* MXUNIT: Larger File Unit Numbers.
-* name space: Mangling of Names.
-* NAMELIST statement: NAMELIST.
-* naming conflicts: Multiple Definitions of External Names.
-* naming issues: Mangling of Names.
-* naming programs test: Nothing Happens.
-* NaN values: Floating-point Exception Handling.
-* native compiler: Installing f77.
-* Nearest intrinsic: Nearest Intrinsic.
-* negative forms of options: Invoking G77.
-* Netlib <1>: Increasing Precision/Range.
-* Netlib: C Interfacing Tools.
-* network file system <1>: Output Assumed To Flush.
-* network file system: Always Flush Output.
-* new users: Getting Started.
-* newbies: Getting Started.
-* NeXTStep problems: NeXTStep Problems.
-* NFS <1>: Output Assumed To Flush.
-* NFS: Always Flush Output.
-* NInt intrinsic: NInt Intrinsic.
-* nonportable conversions: Nonportable Conversions.
-* Not intrinsic: Not Intrinsic.
-* nothing happens: Nothing Happens.
-* null arguments: Ugly Null Arguments.
-* null byte, trailing: Character and Hollerith Constants.
-* null CHARACTER strings: Character Type.
-* number of continuation lines: Continuation Line.
-* number of dimensions, maximum: Compiler Limits.
-* number of trips: Loops.
-* object file, differences: Object File Differences.
-* octal constants: Double Quote Meaning.
-* omitting arguments: Ugly Null Arguments.
-* one-trip DO loops: Fortran Dialect Options.
-* OPEN statement: OPEN CLOSE and INQUIRE Keywords.
-* optimization, better: Better Optimization.
-* optimizations, Pentium <1>: Use Submodel Options.
-* optimizations, Pentium <2>: Aligned Data.
-* optimizations, Pentium: Unpacking.
-* optimize options: Optimize Options.
-* options to control warnings: Warning Options.
-* options, --driver <1>: Invoking G77.
-* options, --driver: G77 and GCC.
-* options, -falias-check <1>: Aliasing Assumed To Work.
-* options, -falias-check: Code Gen Options.
-* options, -fargument-alias <1>: Aliasing Assumed To Work.
-* options, -fargument-alias: Code Gen Options.
-* options, -fargument-noalias <1>: Aliasing Assumed To Work.
-* options, -fargument-noalias: Code Gen Options.
-* options, -fcaller-saves: Optimize Options.
-* options, -fcase-initcap: Fortran Dialect Options.
-* options, -fcase-lower: Fortran Dialect Options.
-* options, -fcase-preserve: Fortran Dialect Options.
-* options, -fcase-strict-lower: Fortran Dialect Options.
-* options, -fcase-strict-upper: Fortran Dialect Options.
-* options, -fcase-upper: Fortran Dialect Options.
-* options, -fdebug-kludge: Code Gen Options.
-* options, -fdelayed-branch: Optimize Options.
-* options, -fdollar-ok: Fortran Dialect Options.
-* options, -fexpensive-optimizations: Optimize Options.
-* options, -ff2c-intrinsics-delete: Fortran Dialect Options.
-* options, -ff2c-intrinsics-disable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-enable: Fortran Dialect Options.
-* options, -ff2c-intrinsics-hide: Fortran Dialect Options.
-* options, -ff2c-library: Code Gen Options.
-* options, -ff66: Shorthand Options.
-* options, -ff77: Shorthand Options.
-* options, -ff90: Fortran Dialect Options.
-* options, -ff90-intrinsics-delete: Fortran Dialect Options.
-* options, -ff90-intrinsics-disable: Fortran Dialect Options.
-* options, -ff90-intrinsics-enable: Fortran Dialect Options.
-* options, -ff90-intrinsics-hide: Fortran Dialect Options.
-* options, -ffast-math: Optimize Options.
-* options, -ffixed-line-length-N: Fortran Dialect Options.
-* options, -ffloat-store: Optimize Options.
-* options, -fforce-addr: Optimize Options.
-* options, -fforce-mem: Optimize Options.
-* options, -ffree-form: Fortran Dialect Options.
-* options, -fgnu-intrinsics-delete: Fortran Dialect Options.
-* options, -fgnu-intrinsics-disable: Fortran Dialect Options.
-* options, -fgnu-intrinsics-enable: Fortran Dialect Options.
-* options, -fgnu-intrinsics-hide: Fortran Dialect Options.
-* options, -fGROUP-intrinsics-hide: Overly Convenient Options.
-* options, -finit-local-zero <1>: Overly Convenient Options.
-* options, -finit-local-zero: Code Gen Options.
-* options, -fintrin-case-any: Fortran Dialect Options.
-* options, -fintrin-case-initcap: Fortran Dialect Options.
-* options, -fintrin-case-lower: Fortran Dialect Options.
-* options, -fintrin-case-upper: Fortran Dialect Options.
-* options, -fmatch-case-any: Fortran Dialect Options.
-* options, -fmatch-case-initcap: Fortran Dialect Options.
-* options, -fmatch-case-lower: Fortran Dialect Options.
-* options, -fmatch-case-upper: Fortran Dialect Options.
-* options, -fmil-intrinsics-delete: Fortran Dialect Options.
-* options, -fmil-intrinsics-disable: Fortran Dialect Options.
-* options, -fmil-intrinsics-enable: Fortran Dialect Options.
-* options, -fmil-intrinsics-hide: Fortran Dialect Options.
-* options, -fno-argument-noalias-global <1>: Aliasing Assumed To Work.
-* options, -fno-argument-noalias-global: Code Gen Options.
-* options, -fno-automatic <1>: Overly Convenient Options.
-* options, -fno-automatic: Code Gen Options.
-* options, -fno-backslash: Fortran Dialect Options.
-* options, -fno-common: Code Gen Options.
-* options, -fno-emulate-complex: Code Gen Options.
-* options, -fno-f2c <1>: Avoid f2c Compatibility.
-* options, -fno-f2c: Code Gen Options.
-* options, -fno-f77: Shorthand Options.
-* options, -fno-fixed-form: Fortran Dialect Options.
-* options, -fno-globals: Code Gen Options.
-* options, -fno-ident: Code Gen Options.
-* options, -fno-inline: Optimize Options.
-* options, -fno-move-all-movables: Optimize Options.
-* options, -fno-reduce-all-givs: Optimize Options.
-* options, -fno-rerun-loop-opt: Optimize Options.
-* options, -fno-second-underscore: Code Gen Options.
-* options, -fno-silent: Overall Options.
-* options, -fno-ugly: Shorthand Options.
-* options, -fno-ugly-args: Fortran Dialect Options.
-* options, -fno-ugly-init: Fortran Dialect Options.
-* options, -fno-underscoring <1>: Names.
-* options, -fno-underscoring: Code Gen Options.
-* options, -fonetrip: Fortran Dialect Options.
-* options, -fpack-struct: Code Gen Options.
-* options, -fpcc-struct-return: Code Gen Options.
-* options, -fpedantic: Warning Options.
-* options, -fPIC: Actual Bugs.
-* options, -freg-struct-return: Code Gen Options.
-* options, -frerun-cse-after-loop: Optimize Options.
-* options, -fschedule-insns: Optimize Options.
-* options, -fschedule-insns2: Optimize Options.
-* options, -fset-g77-defaults: Overall Options.
-* options, -fshort-double: Code Gen Options.
-* options, -fsource-case-lower: Fortran Dialect Options.
-* options, -fsource-case-preserve: Fortran Dialect Options.
-* options, -fsource-case-upper: Fortran Dialect Options.
-* options, -fstrength-reduce: Optimize Options.
-* options, -fsymbol-case-any: Fortran Dialect Options.
-* options, -fsymbol-case-initcap: Fortran Dialect Options.
-* options, -fsymbol-case-lower: Fortran Dialect Options.
-* options, -fsymbol-case-upper: Fortran Dialect Options.
-* options, -fsyntax-only: Warning Options.
-* options, -ftypeless-boz: Fortran Dialect Options.
-* options, -fugly <1>: Overly Convenient Options.
-* options, -fugly: Shorthand Options.
-* options, -fugly-assign: Fortran Dialect Options.
-* options, -fugly-assumed: Fortran Dialect Options.
-* options, -fugly-comma <1>: Actual Bugs.
-* options, -fugly-comma: Fortran Dialect Options.
-* options, -fugly-complex: Fortran Dialect Options.
-* options, -fugly-logint: Fortran Dialect Options.
-* options, -funix-intrinsics-delete: Fortran Dialect Options.
-* options, -funix-intrinsics-disable: Fortran Dialect Options.
-* options, -funix-intrinsics-enable: Fortran Dialect Options.
-* options, -funix-intrinsics-hide: Fortran Dialect Options.
-* options, -funroll-all-loops: Optimize Options.
-* options, -funroll-loops: Optimize Options.
-* options, -fversion: Overall Options.
-* options, -fvxt: Fortran Dialect Options.
-* options, -fvxt-intrinsics-delete: Fortran Dialect Options.
-* options, -fvxt-intrinsics-disable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-enable: Fortran Dialect Options.
-* options, -fvxt-intrinsics-hide: Fortran Dialect Options.
-* options, -fzeros: Code Gen Options.
-* options, -g: Debugging Options.
-* options, -I-: Directory Options.
-* options, -Idir: Directory Options.
-* options, -malign-double <1>: Aligned Data.
-* options, -malign-double: Optimize Options.
-* options, -Nl: Compiler Limits.
-* options, -Nx: Compiler Limits.
-* options, -pedantic: Warning Options.
-* options, -pedantic-errors: Warning Options.
-* options, -v: G77 and GCC.
-* options, -W: Warning Options.
-* options, -w: Warning Options.
-* options, -Waggregate-return: Warning Options.
-* options, -Wall: Warning Options.
-* options, -Wcomment: Warning Options.
-* options, -Wconversion: Warning Options.
-* options, -Werror: Warning Options.
-* options, -Wformat: Warning Options.
-* options, -Wid-clash-LEN: Warning Options.
-* options, -Wimplicit: Warning Options.
-* options, -Wlarger-than-LEN: Warning Options.
-* options, -Wno-globals: Warning Options.
-* options, -Wparentheses: Warning Options.
-* options, -Wredundant-decls: Warning Options.
-* options, -Wshadow: Warning Options.
-* options, -Wsurprising: Warning Options.
-* options, -Wswitch: Warning Options.
-* options, -Wtraditional: Warning Options.
-* options, -Wuninitialized: Warning Options.
-* options, -Wunused: Warning Options.
-* options, adding: Adding Options.
-* options, code generation: Code Gen Options.
-* options, debugging: Debugging Options.
-* options, dialect: Fortran Dialect Options.
-* options, directory search: Directory Options.
-* options, GNU Fortran command: Invoking G77.
-* options, macro: Shorthand Options.
-* options, negative forms: Invoking G77.
-* options, optimization: Optimize Options.
-* options, overall: Overall Options.
-* options, overly convenient: Overly Convenient Options.
-* options, preprocessor: Preprocessor Options.
-* options, shorthand: Shorthand Options.
-* OR intrinsic: Bit Operations on Floating-point Data.
-* Or intrinsic: Or Intrinsic.
-* order of evaluation, side effects: Order of Side Effects.
-* ordering, array: Arrays.
-* other intrinsics: Other Intrinsics.
-* output, flushing <1>: Output Assumed To Flush.
-* output, flushing: Always Flush Output.
-* overall options: Overall Options.
-* overflow: Warning Options.
-* overlapping arguments: Aliasing Assumed To Work.
-* overlays: Aliasing Assumed To Work.
-* overly convenient options: Overly Convenient Options.
-* overwritten data: Strange Behavior at Run Time.
-* Pack intrinsic: Pack Intrinsic.
-* packages: Unpacking.
-* padding: Actual Bugs.
-* parallel processing: Support for Threads.
-* PARAMETER statement <1>: Old-style PARAMETER Statements.
-* PARAMETER statement: Intrinsics in PARAMETER Statements.
-* parameters, unused: Warning Options.
-* patch files: Patching GNU CC Necessary.
-* patch files, creating: Merging Distributions.
-* pedantic compilation: Pedantic Compilation.
-* Pentium optimizations <1>: Use Submodel Options.
-* Pentium optimizations <2>: Aligned Data.
-* Pentium optimizations: Unpacking.
-* PError intrinsic: PError Intrinsic.
-* placing initialization statements: Initializing Before Specifying.
-* POINTER statement: POINTER Statements.
-* pointers <1>: Ugly Assigned Labels.
-* pointers: Kind Notation.
-* porting, simplify: Simplify Porting.
-* pre-installation checks: Pre-installation Checks.
-* Precision intrinsic: Precision Intrinsic.
-* precision, increasing: Increasing Precision/Range.
-* prefix-radix constants: Fortran Dialect Options.
-* preprocessor <1>: Bug Reporting.
-* preprocessor <2>: Overall Options.
-* preprocessor: What is GNU Fortran?.
-* preprocessor options: Preprocessor Options.
-* prerequisites: Prerequisites.
-* Present intrinsic: Present Intrinsic.
-* printing compilation status: Overall Options.
-* printing main source: Actual Bugs.
-* printing version information <1>: Overall Options.
-* printing version information: What is GNU Fortran?.
-* problems installing: Problems Installing.
-* procedures: Procedures.
-* Product intrinsic: Product Intrinsic.
-* PROGRAM statement: Main Program Unit.
-* programs named test: Nothing Happens.
-* programs, cc1: What is GNU Fortran?.
-* programs, cc1plus: What is GNU Fortran?.
-* programs, compiling: G77 and GCC.
-* programs, cpp <1>: Bug Reporting.
-* programs, cpp <2>: Preprocessor Options.
-* programs, cpp <3>: Overall Options.
-* programs, cpp: What is GNU Fortran?.
-* programs, f771: What is GNU Fortran?.
-* programs, ratfor: Overall Options.
-* programs, speeding up: Faster Programs.
-* projects: Projects.
-* Q edit descriptor: Q Edit Descriptor.
-* QAbs intrinsic: QAbs Intrinsic.
-* QACos intrinsic: QACos Intrinsic.
-* QACosD intrinsic: QACosD Intrinsic.
-* QASin intrinsic: QASin Intrinsic.
-* QASinD intrinsic: QASinD Intrinsic.
-* QATan intrinsic: QATan Intrinsic.
-* QATan2 intrinsic: QATan2 Intrinsic.
-* QATan2D intrinsic: QATan2D Intrinsic.
-* QATanD intrinsic: QATanD Intrinsic.
-* QCos intrinsic: QCos Intrinsic.
-* QCosD intrinsic: QCosD Intrinsic.
-* QCosH intrinsic: QCosH Intrinsic.
-* QDiM intrinsic: QDiM Intrinsic.
-* QExp intrinsic: QExp Intrinsic.
-* QExt intrinsic: QExt Intrinsic.
-* QExtD intrinsic: QExtD Intrinsic.
-* QFloat intrinsic: QFloat Intrinsic.
-* QInt intrinsic: QInt Intrinsic.
-* QLog intrinsic: QLog Intrinsic.
-* QLog10 intrinsic: QLog10 Intrinsic.
-* QMax1 intrinsic: QMax1 Intrinsic.
-* QMin1 intrinsic: QMin1 Intrinsic.
-* QMod intrinsic: QMod Intrinsic.
-* QNInt intrinsic: QNInt Intrinsic.
-* QSin intrinsic: QSin Intrinsic.
-* QSinD intrinsic: QSinD Intrinsic.
-* QSinH intrinsic: QSinH Intrinsic.
-* QSqRt intrinsic: QSqRt Intrinsic.
-* QTan intrinsic: QTan Intrinsic.
-* QTanD intrinsic: QTanD Intrinsic.
-* QTanH intrinsic: QTanH Intrinsic.
-* questionable instructions: What is GNU Fortran?.
-* quick start: Quick Start.
-* Radix intrinsic: Radix Intrinsic.
-* Rand intrinsic: Rand Intrinsic.
-* Random_Number intrinsic: Random_Number Intrinsic.
-* Random_Seed intrinsic: Random_Seed Intrinsic.
-* Range intrinsic: Range Intrinsic.
-* range, increasing: Increasing Precision/Range.
-* rank, maximum: Compiler Limits.
-* Ratfor preprocessor: Overall Options.
-* reads and writes, scheduling: Aliasing Assumed To Work.
-* Real intrinsic: Real Intrinsic.
-* REAL intrinsic: REAL() and AIMAG() of Complex.
-* real part: Ugly Complex Part Extraction.
-* REAL(KIND=1) type: Compiler Types.
-* REAL(KIND=2) type: Compiler Types.
-* REAL*16 support: Full Support for Compiler Types.
-* RealPart intrinsic: RealPart Intrinsic.
-* recent versions <1>: Changes.
-* recent versions: News.
-* RECORD statement: STRUCTURE UNION RECORD MAP.
-* recursion, lack of: RECURSIVE Keyword.
-* RECURSIVE keyword: RECURSIVE Keyword.
-* reference works: Language.
-* Rename intrinsic <1>: Rename Intrinsic (function).
-* Rename intrinsic: Rename Intrinsic (subroutine).
-* Repeat intrinsic: Repeat Intrinsic.
-* reporting bugs: Bugs.
-* reporting compilation status: Overall Options.
-* requirements, GNU C: GNU C Required.
-* Reshape intrinsic: Reshape Intrinsic.
-* results, inconsistent: Floating-point Errors.
-* RETURN statement <1>: Alternate Returns.
-* RETURN statement: Functions.
-* return type of functions: Functions.
-* rounding errors: Floating-point Errors.
-* row-major ordering: Arrays.
-* RRSpacing intrinsic: RRSpacing Intrinsic.
-* RS/6000 support: Actual Bugs.
-* RShift intrinsic: RShift Intrinsic.
-* run-time library: What is GNU Fortran?.
-* run-time options: Code Gen Options.
-* runtime initialization: Startup Code.
-* SAVE statement: Code Gen Options.
-* saved variables: Variables Assumed To Be Saved.
-* Scale intrinsic: Scale Intrinsic.
-* Scan intrinsic: Scan Intrinsic.
-* scheduling of reads and writes: Aliasing Assumed To Work.
-* scope <1>: Scope and Classes of Names.
-* scope: Scope of Names and Labels.
-* search path: Directory Options.
-* searching for included files: Directory Options.
-* Secnds intrinsic: Secnds Intrinsic.
-* Second intrinsic <1>: Second Intrinsic (subroutine).
-* Second intrinsic: Second Intrinsic (function).
-* segmentation violation <1>: Strange Behavior at Run Time.
-* segmentation violation <2>: Stack Overflow.
-* segmentation violation <3>: NeXTStep Problems.
-* segmentation violation: Maximum Stackable Size.
-* Selected_Int_Kind intrinsic: Selected_Int_Kind Intrinsic.
-* Selected_Real_Kind intrinsic: Selected_Real_Kind Intrinsic.
-* semicolons: Statements Comments Lines.
-* separate distributions: Merging Distributions.
-* sequence numbers: Better Source Model.
-* Set_Exponent intrinsic: Set_Exponent Intrinsic.
-* SGI support: Actual Bugs.
-* Shape intrinsic: Shape Intrinsic.
-* SHIFT intrinsic: Bit Operations on Floating-point Data.
-* Short intrinsic: Short Intrinsic.
-* short source lines: Short Lines.
-* shorthand options: Shorthand Options.
-* side effects, order of evaluation: Order of Side Effects.
-* Sign intrinsic: Sign Intrinsic.
-* signal 11: Signal 11 and Friends.
-* Signal intrinsic <1>: Signal Intrinsic (function).
-* Signal intrinsic: Signal Intrinsic (subroutine).
-* SIGNAL() intrinsic: Actual Bugs.
-* signature of procedures: Procedures.
-* simplify porting: Simplify Porting.
-* Sin intrinsic: Sin Intrinsic.
-* SinD intrinsic: SinD Intrinsic.
-* SinH intrinsic: SinH Intrinsic.
-* Sleep intrinsic: Sleep Intrinsic.
-* slow compiler: Large Initialization.
-* Sngl intrinsic: Sngl Intrinsic.
-* SnglQ intrinsic: SnglQ Intrinsic.
-* Solaris: Strange Behavior at Run Time.
-* source code <1>: Unpacking.
-* source code <2>: Case Sensitivity.
-* source code <3>: Source Form.
-* source code <4>: Lines.
-* source code: What is GNU Fortran?.
-* source file: What is GNU Fortran?.
-* source file form: Fortran Dialect Options.
-* source file format <1>: Case Sensitivity.
-* source file format <2>: Source Form.
-* source file format <3>: Lines.
-* source file format: Fortran Dialect Options.
-* source form <1>: Source Form.
-* source form: Lines.
-* source lines, long: Long Lines.
-* source lines, short: Short Lines.
-* source tree: Unpacking.
-* space-padding: Short Lines.
-* spaces: Short Lines.
-* spaces, endless printing of: Strange Behavior at Run Time.
-* Spacing intrinsic: Spacing Intrinsic.
-* speed, compiler: Large Initialization.
-* speed, of compiler: Actual Bugs.
-* speeding up loops: Optimize Options.
-* speeding up programs: Faster Programs.
-* Spread intrinsic: Spread Intrinsic.
-* SqRt intrinsic: SqRt Intrinsic.
-* SRand intrinsic: SRand Intrinsic.
-* stack allocation: Maximum Stackable Size.
-* stack overflow: Stack Overflow.
-* stack, 387 coprocessor: Actual Bugs.
-* stack, aligned: Aligned Data.
-* stage directories: Cleanup Kills Stage Directories.
-* standard support: Standard Support.
-* standard, ANSI FORTRAN 77: Language.
-* startup code: Startup Code.
-* Stat intrinsic <1>: Stat Intrinsic (function).
-* Stat intrinsic: Stat Intrinsic (subroutine).
-* statement labels, assigned: Assigned Statement Labels.
-* statements, ACCEPT: TYPE and ACCEPT I/O Statements.
-* statements, ASSIGN <1>: Assigned Statement Labels.
-* statements, ASSIGN: Ugly Assigned Labels.
-* statements, BLOCK DATA <1>: Multiple Definitions of External Names.
-* statements, BLOCK DATA: Block Data and Libraries.
-* statements, CLOSE: OPEN CLOSE and INQUIRE Keywords.
-* statements, COMMON <1>: Multiple Definitions of External Names.
-* statements, COMMON: Common Blocks.
-* statements, COMPLEX: Complex Variables.
-* statements, DATA <1>: Actual Bugs.
-* statements, DATA: Code Gen Options.
-* statements, DECODE: ENCODE and DECODE.
-* statements, DIMENSION <1>: Array Bounds Expressions.
-* statements, DIMENSION <2>: Adjustable Arrays.
-* statements, DIMENSION: Arrays.
-* statements, DO <1>: Loops.
-* statements, DO: Warning Options.
-* statements, ENCODE: ENCODE and DECODE.
-* statements, ENTRY: Alternate Entry Points.
-* statements, EQUIVALENCE: Local Equivalence Areas.
-* statements, FORMAT: Expressions in FORMAT Statements.
-* statements, FUNCTION <1>: Functions.
-* statements, FUNCTION: Procedures.
-* statements, GOTO: Assigned Statement Labels.
-* statements, IMPLICIT CHARACTER*(*): Limitation on Implicit Declarations.
-* statements, INQUIRE: OPEN CLOSE and INQUIRE Keywords.
-* statements, MAP: STRUCTURE UNION RECORD MAP.
-* statements, NAMELIST: NAMELIST.
-* statements, OPEN: OPEN CLOSE and INQUIRE Keywords.
-* statements, PARAMETER <1>: Old-style PARAMETER Statements.
-* statements, PARAMETER: Intrinsics in PARAMETER Statements.
-* statements, POINTER: POINTER Statements.
-* statements, PROGRAM: Main Program Unit.
-* statements, RECORD: STRUCTURE UNION RECORD MAP.
-* statements, RETURN <1>: Alternate Returns.
-* statements, RETURN: Functions.
-* statements, SAVE: Code Gen Options.
-* statements, separated by semicolon: Statements Comments Lines.
-* statements, STRUCTURE: STRUCTURE UNION RECORD MAP.
-* statements, SUBROUTINE <1>: Alternate Returns.
-* statements, SUBROUTINE: Procedures.
-* statements, TYPE: TYPE and ACCEPT I/O Statements.
-* statements, UNION: STRUCTURE UNION RECORD MAP.
-* static variables: Variables Assumed To Be Saved.
-* status, compilation: Overall Options.
-* storage association: Aliasing Assumed To Work.
-* straight build: Straight Build.
-* strings, empty: Character Type.
-* strtoul: Missing strtoul.
-* STRUCTURE statement: STRUCTURE UNION RECORD MAP.
-* structures: Actual Bugs.
-* submodels: Use Submodel Options.
-* SUBROUTINE statement <1>: Alternate Returns.
-* SUBROUTINE statement: Procedures.
-* subroutines: Alternate Returns.
-* suffixes, file name: Overall Options.
-* Sum intrinsic: Sum Intrinsic.
-* SunOS4 <1>: Quick Start.
-* SunOS4: Missing strtoul.
-* support for ANSI FORTRAN 77: Standard Support.
-* support for gcc versions: Merging Distributions.
-* support, Alpha: Actual Bugs.
-* support, COMPLEX: Actual Bugs.
-* support, ELF: Actual Bugs.
-* support, f77: Backslash in Constants.
-* support, Fortran 90: Fortran 90 Support.
-* support, gdb: Debugger Problems.
-* support, RS/6000: Actual Bugs.
-* support, SGI: Actual Bugs.
-* suppressing warnings: Warning Options.
-* symbol names <1>: Names.
-* symbol names: Fortran Dialect Options.
-* symbol names, transforming: Code Gen Options.
-* symbol names, underscores: Code Gen Options.
-* symbolic names: Scope and Classes of Names.
-* SymLnk intrinsic <1>: SymLnk Intrinsic (function).
-* SymLnk intrinsic: SymLnk Intrinsic (subroutine).
-* synchronous write errors <1>: Output Assumed To Flush.
-* synchronous write errors: Always Flush Output.
-* syntax checking: Warning Options.
-* System intrinsic <1>: System Intrinsic (function).
-* System intrinsic: System Intrinsic (subroutine).
-* System_Clock intrinsic: System_Clock Intrinsic.
-* tab characters: Tabs.
-* table of intrinsics: Table of Intrinsic Functions.
-* Tan intrinsic: Tan Intrinsic.
-* TanD intrinsic: TanD Intrinsic.
-* TanH intrinsic: TanH Intrinsic.
-* test programs: Nothing Happens.
-* texinfo: Updating Documentation.
-* textbooks: Language.
-* threads: Support for Threads.
-* Time intrinsic <1>: Time Intrinsic (VXT).
-* Time intrinsic: Time Intrinsic (UNIX).
-* Time8 intrinsic: Time8 Intrinsic.
-* Tiny intrinsic: Tiny Intrinsic.
-* Toolpack: Increasing Precision/Range.
-* trailing commas: Ugly Null Arguments.
-* trailing comments: Statements Comments Lines.
-* trailing null byte: Character and Hollerith Constants.
-* Transfer intrinsic: Transfer Intrinsic.
-* transformation of symbol names: Names.
-* transforming symbol names: Code Gen Options.
-* translation of user programs: What is GNU Fortran?.
-* Transpose intrinsic: Transpose Intrinsic.
-* Trim intrinsic: Trim Intrinsic.
-* trips, number of: Loops.
-* truncation: Long Lines.
-* TtyNam intrinsic <1>: TtyNam Intrinsic (function).
-* TtyNam intrinsic: TtyNam Intrinsic (subroutine).
-* TYPE statement: TYPE and ACCEPT I/O Statements.
-* types, COMPLEX(KIND=1): Compiler Types.
-* types, COMPLEX(KIND=2): Compiler Types.
-* types, constants <1>: Compiler Constants.
-* types, constants <2>: Constants.
-* types, constants: Fortran Dialect Options.
-* types, DOUBLE COMPLEX: Compiler Types.
-* types, DOUBLE PRECISION: Compiler Types.
-* types, file: Overall Options.
-* types, Fortran/C: C Access to Type Information.
-* types, INTEGER(KIND=1): Compiler Types.
-* types, INTEGER(KIND=2): Compiler Types.
-* types, INTEGER(KIND=3): Compiler Types.
-* types, INTEGER(KIND=6): Compiler Types.
-* types, LOGICAL(KIND=1): Compiler Types.
-* types, LOGICAL(KIND=2): Compiler Types.
-* types, LOGICAL(KIND=3): Compiler Types.
-* types, LOGICAL(KIND=6): Compiler Types.
-* types, of data: Compiler Types.
-* types, REAL(KIND=1): Compiler Types.
-* types, REAL(KIND=2): Compiler Types.
-* UBound intrinsic: UBound Intrinsic.
-* ugly features <1>: Distensions.
-* ugly features: Shorthand Options.
-* UMask intrinsic <1>: UMask Intrinsic (function).
-* UMask intrinsic: UMask Intrinsic (subroutine).
-* undefined behavior: Bug Criteria.
-* undefined function value: Bug Criteria.
-* undefined reference (_main): Cannot Link Fortran Programs.
-* undefined reference (_strtoul): Missing strtoul.
-* underscores <1>: Mangling of Names.
-* underscores <2>: Underscores in Symbol Names.
-* underscores: Code Gen Options.
-* uninitialized variables <1>: Variables Assumed To Be Zero.
-* uninitialized variables <2>: Code Gen Options.
-* uninitialized variables: Warning Options.
-* UNION statement: STRUCTURE UNION RECORD MAP.
-* unit numbers <1>: Large File Unit Numbers.
-* unit numbers: Larger File Unit Numbers.
-* UNIX f77: Shorthand Options.
-* UNIX intrinsics: Fortran Dialect Options.
-* Unlink intrinsic <1>: Unlink Intrinsic (function).
-* Unlink intrinsic: Unlink Intrinsic (subroutine).
-* Unpack intrinsic: Unpack Intrinsic.
-* unpacking distributions: Unpacking.
-* unrecognized file format: What is GNU Fortran?.
-* unresolved reference (various): Cannot Link Fortran Programs.
-* unrolling loops: Optimize Options.
-* unsupported warnings: Warning Options.
-* unused arguments <1>: Unused Arguments.
-* unused arguments: Warning Options.
-* unused dummies: Warning Options.
-* unused parameters: Warning Options.
-* unused variables: Warning Options.
-* updating info directory: Updating Documentation.
-* uppercase letters: Case Sensitivity.
-* user-visible changes: Changes.
-* variables assumed to be zero: Variables Assumed To Be Zero.
-* variables retaining values across calls: Variables Assumed To Be Saved.
-* variables, initialization of: Code Gen Options.
-* variables, mistyped: Not My Type.
-* variables, uninitialized <1>: Code Gen Options.
-* variables, uninitialized: Warning Options.
-* variables, unused: Warning Options.
-* Verify intrinsic: Verify Intrinsic.
-* version information, printing <1>: Overall Options.
-* version information, printing: What is GNU Fortran?.
-* version numbering: Merging Distributions.
-* versions of gcc: Merging Distributions.
-* versions, recent <1>: Changes.
-* versions, recent: News.
-* VXT extensions: VXT Fortran.
-* VXT features: Fortran Dialect Options.
-* VXT intrinsics: Fortran Dialect Options.
-* warning messages: Warning Options.
-* warnings: What is GNU Fortran?.
-* warnings vs errors: Warnings and Errors.
-* warnings, all: Warning Options.
-* warnings, extra: Warning Options.
-* warnings, global names <1>: Code Gen Options.
-* warnings, global names: Warning Options.
-* warnings, implicit declaration: Warning Options.
-* warnings, unsupported: Warning Options.
-* why separate distributions: Merging Distributions.
-* wisdom: Collected Fortran Wisdom.
-* writes, flushing <1>: Output Assumed To Flush.
-* writes, flushing: Always Flush Output.
-* writing code: Collected Fortran Wisdom.
-* XOr intrinsic: XOr Intrinsic.
-* ZAbs intrinsic: ZAbs Intrinsic.
-* ZCos intrinsic: ZCos Intrinsic.
-* zero byte, trailing: Character and Hollerith Constants.
-* zero-initialized variables: Variables Assumed To Be Zero.
-* zero-length CHARACTER: Character Type.
-* ZExp intrinsic: ZExp Intrinsic.
-* ZExt intrinsic: ZExt Intrinsic.
-* ZLog intrinsic: ZLog Intrinsic.
-* ZSin intrinsic: ZSin Intrinsic.
-* ZSqRt intrinsic: ZSqRt Intrinsic.
-* zzz.c: Object File Differences.
-* zzz.o: Object File Differences.
-
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Code Gen Options, Next: Environment Variables, Prev: Directory Options, Up: Invoking G77
-
-Options for Code Generation Conventions
-=======================================
-
- These machine-independent options control the interface conventions
-used in code generation.
-
- Most of them have both positive and negative forms; the negative form
-of `-ffoo' would be `-fno-foo'. In the table below, only one of the
-forms is listed--the one which is not the default. You can figure out
-the other form by either removing `no-' or adding it.
-
-`-fno-automatic'
- Treat each program unit as if the `SAVE' statement was specified
- for every local variable and array referenced in it. Does not
- affect common blocks. (Some Fortran compilers provide this option
- under the name `-static'.)
-
-`-finit-local-zero'
- Specify that variables and arrays that are local to a program unit
- (not in a common block and not passed as an argument) are to be
- initialized to binary zeros.
-
- Since there is a run-time penalty for initialization of variables
- that are not given the `SAVE' attribute, it might be a good idea
- to also use `-fno-automatic' with `-finit-local-zero'.
-
-`-fno-f2c'
- Do not generate code designed to be compatible with code generated
- by `f2c'; use the GNU calling conventions instead.
-
- The `f2c' calling conventions require functions that return type
- `REAL(KIND=1)' to actually return the C type `double', and
- functions that return type `COMPLEX' to return the values via an
- extra argument in the calling sequence that points to where to
- store the return value. Under the GNU calling conventions, such
- functions simply return their results as they would in GNU
- C--`REAL(KIND=1)' functions return the C type `float', and
- `COMPLEX' functions return the GNU C type `complex' (or its
- `struct' equivalent).
-
- This does not affect the generation of code that interfaces with
- the `libf2c' library.
-
- However, because the `libf2c' library uses `f2c' calling
- conventions, `g77' rejects attempts to pass intrinsics implemented
- by routines in this library as actual arguments when `-fno-f2c' is
- used, to avoid bugs when they are actually called by code
- expecting the GNU calling conventions to work.
-
- For example, `INTRINSIC ABS;CALL FOO(ABS)' is rejected when
- `-fno-f2c' is in force. (Future versions of the `g77' run-time
- library might offer routines that provide GNU-callable versions of
- the routines that implement the `f2c'-callable intrinsics that may
- be passed as actual arguments, so that valid programs need not be
- rejected when `-fno-f2c' is used.)
-
- *Caution:* If `-fno-f2c' is used when compiling any source file
- used in a program, it must be used when compiling *all* Fortran
- source files used in that program.
-
-`-ff2c-library'
- Specify that use of `libf2c' is required. This is the default for
- the current version of `g77'.
-
- Currently it is not valid to specify `-fno-f2c-library'. This
- option is provided so users can specify it in shell scripts that
- build programs and libraries that require the `libf2c' library,
- even when being compiled by future versions of `g77' that might
- otherwise default to generating code for an incompatible library.
-
-`-fno-underscoring'
- Do not transform names of entities specified in the Fortran source
- file by appending underscores to them.
-
- With `-funderscoring' in effect, `g77' appends two underscores to
- names with underscores and one underscore to external names with
- no underscores. (`g77' also appends two underscores to internal
- names with underscores to avoid naming collisions with external
- names. The `-fno-second-underscore' option disables appending of
- the second underscore in all cases.)
-
- This is done to ensure compatibility with code produced by many
- UNIX Fortran compilers, including `f2c', which perform the same
- transformations.
-
- Use of `-fno-underscoring' is not recommended unless you are
- experimenting with issues such as integration of (GNU) Fortran into
- existing system environments (vis-a-vis existing libraries, tools,
- and so on).
-
- For example, with `-funderscoring', and assuming other defaults
- like `-fcase-lower' and that `j()' and `max_count()' are external
- functions while `my_var' and `lvar' are local variables, a
- statement like
-
- I = J() + MAX_COUNT (MY_VAR, LVAR)
-
- is implemented as something akin to:
-
- i = j_() + max_count__(&my_var__, &lvar);
-
- With `-fno-underscoring', the same statement is implemented as:
-
- i = j() + max_count(&my_var, &lvar);
-
- Use of `-fno-underscoring' allows direct specification of
- user-defined names while debugging and when interfacing
- `g77'-compiled code with other languages.
-
- Note that just because the names match does *not* mean that the
- interface implemented by `g77' for an external name matches the
- interface implemented by some other language for that same name.
- That is, getting code produced by `g77' to link to code produced
- by some other compiler using this or any other method can be only a
- small part of the overall solution--getting the code generated by
- both compilers to agree on issues other than naming can require
- significant effort, and, unlike naming disagreements, linkers
- normally cannot detect disagreements in these other areas.
-
- Also, note that with `-fno-underscoring', the lack of appended
- underscores introduces the very real possibility that a
- user-defined external name will conflict with a name in a system
- library, which could make finding unresolved-reference bugs quite
- difficult in some cases--they might occur at program run time, and
- show up only as buggy behavior at run time.
-
- In future versions of `g77', we hope to improve naming and linking
- issues so that debugging always involves using the names as they
- appear in the source, even if the names as seen by the linker are
- mangled to prevent accidental linking between procedures with
- incompatible interfaces.
-
-`-fno-second-underscore'
- Do not append a second underscore to names of entities specified
- in the Fortran source file.
-
- This option has no effect if `-fno-underscoring' is in effect.
-
- Otherwise, with this option, an external name such as `MAX_COUNT'
- is implemented as a reference to the link-time external symbol
- `max_count_', instead of `max_count__'.
-
-`-fno-ident'
- Ignore the `#ident' directive.
-
-`-fzeros'
- Treat initial values of zero as if they were any other value.
-
- As of version 0.5.18, `g77' normally treats `DATA' and other
- statements that are used to specify initial values of zero for
- variables and arrays as if no values were actually specified, in
- the sense that no diagnostics regarding multiple initializations
- are produced.
-
- This is done to speed up compiling of programs that initialize
- large arrays to zeros.
-
- Use `-fzeros' to revert to the simpler, slower behavior that can
- catch multiple initializations by keeping track of all
- initializations, zero or otherwise.
-
- *Caution:* Future versions of `g77' might disregard this option
- (and its negative form, the default) or interpret it somewhat
- differently. The interpretation changes will affect only
- non-standard programs; standard-conforming programs should not be
- affected.
-
-`-fdebug-kludge'
- Emit information on `COMMON' and `EQUIVALENCE' members that might
- help users of debuggers work around lack of proper debugging
- information on such members.
-
- As of version 0.5.19, `g77' offers this option to emit information
- on members of aggregate areas to help users while debugging. This
- information consists of establishing the type and contents of each
- such member so that, when a debugger is asked to print the
- contents, the printed information provides rudimentary debugging
- information. This information identifies the name of the
- aggregate area (either the `COMMON' block name, or the
- `g77'-assigned name for the `EQUIVALENCE' name) and the offset, in
- bytes, of the member from the beginning of the area.
-
- Using `gdb', this information is not coherently displayed in the
- Fortran language mode, so temporarily switching to the C language
- mode to display the information is suggested. Use `set language
- c' and `set language fortran' to accomplish this.
-
- For example:
-
- COMMON /X/A,B
- EQUIVALENCE (C,D)
- CHARACTER XX*50
- EQUIVALENCE (I,XX(20:20))
- END
-
- GDB is free software and you are welcome to distribute copies of it
- under certain conditions; type "show copying" to see the conditions.
- There is absolutely no warranty for GDB; type "show warranty" for details.
- GDB 4.16 (lm-gnits-dwim), Copyright 1996 Free Software Foundation, Inc...
- (gdb) b MAIN__
- Breakpoint 1 at 0t1200000201120112: file cd.f, line 5.
- (gdb) r
- Starting program: /home/user/a.out
-
- Breakpoint 1, MAIN__ () at cd.f:5
- Current language: auto; currently fortran
- (gdb) set language c
- Warning: the current language does not match this frame.
- (gdb) p a
- $2 = "At (COMMON) `x_' plus 0 bytes"
- (gdb) p b
- $3 = "At (COMMON) `x_' plus 4 bytes"
- (gdb) p c
- $4 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
- (gdb) p d
- $5 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
- (gdb) p i
- $6 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 20 bytes"
- (gdb) p xx
- $7 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 1 bytes"
- (gdb) set language fortran
- (gdb)
-
- Use `-fdebug-kludge' to generate this information, which might
- make some programs noticeably larger.
-
- *Caution:* Future versions of `g77' might disregard this option
- (and its negative form). Current plans call for this to happen
- when published versions of `g77' and `gdb' exist that provide
- proper access to debugging information on `COMMON' and
- `EQUIVALENCE' members.
-
-`-fno-emulate-complex'
- Implement `COMPLEX' arithmetic using the facilities in the `gcc'
- back end that provide direct support of `complex' arithmetic,
- instead of emulating the arithmetic.
-
- `gcc' has some known problems in its back-end support for
- `complex' arithmetic, due primarily to the support not being
- completed as of version 2.7.2.2. Other front ends for the `gcc'
- back end avoid this problem by emulating `complex' arithmetic at a
- higher level, so the back end sees arithmetic on the real and
- imaginary components. To make `g77' more portable to systems
- where `complex' support in the `gcc' back end is particularly
- troublesome, `g77' now defaults to performing the same kinds of
- emulations done by these other front ends.
-
- Use `-fno-emulate-complex' to try the `complex' support in the
- `gcc' back end, in case it works and produces faster programs. So
- far, all the known bugs seem to involve compile-time crashes,
- rather than the generation of incorrect code.
-
- Use of this option should not affect how Fortran code compiled by
- `g77' works in terms of its interfaces to other code, e.g. that
- compiled by `f2c'.
-
- *Caution:* Future versions of `g77' are likely to change the
- default for this option to `-fno-emulate-complex', and perhaps
- someday ignore both forms of this option.
-
- Also, it is possible that use of the `-fno-emulate-complex' option
- could result in incorrect code being silently produced by `g77'.
- But, this is generally true of compilers anyway, so, as usual, test
- the programs you compile before assuming they are working.
-
-`-falias-check'
-
-`-fargument-alias'
-
-`-fargument-noalias'
-
-`-fno-argument-noalias-global'
- These options specify to what degree aliasing (overlap) is
- permitted between arguments (passed as pointers) and `COMMON'
- (external, or public) storage.
-
- The default for Fortran code, as mandated by the FORTRAN 77 and
- Fortran 90 standards, is `-fargument-noalias-global'. The default
- for code written in the C language family is `-fargument-alias'.
-
- Note that, on some systems, compiling with `-fforce-addr' in
- effect can produce more optimal code when the default aliasing
- options are in effect (and when optimization is enabled).
-
- *Note Aliasing Assumed To Work::, for detailed information on the
- implications of compiling Fortran code that depends on the ability
- to alias dummy arguments.
-
-`-fno-globals'
- Disable diagnostics about inter-procedural analysis problems, such
- as disagreements about the type of a function or a procedure's
- argument, that might cause a compiler crash when attempting to
- inline a reference to a procedure within a program unit. (The
- diagnostics themselves are still produced, but as warnings, unless
- `-Wno-globals' is specified, in which case no relevant diagnostics
- are produced.)
-
- Further, this option disables such inlining, to avoid compiler
- crashes resulting from incorrect code that would otherwise be
- diagnosed.
-
- As such, this option might be quite useful when compiling
- existing, "working" code that happens to have a few bugs that do
- not generally show themselves, but `g77' exposes via a diagnostic.
-
- Use of this option therefore has the effect of instructing `g77'
- to behave more like it did up through version 0.5.19.1, when it
- paid little or no attention to disagreements between program units
- about a procedure's type and argument information, and when it
- performed no inlining of procedures (except statement functions).
-
- Without this option, `g77' defaults to performing the potentially
- inlining procedures as it started doing in version 0.5.20, but as
- of version 0.5.21, it also diagnoses disagreements that might
- cause such inlining to crash the compiler.
-
- *Note Options for Code Generation Conventions: (gcc)Code Gen
-Options, for information on more options offered by the GBE shared by
-`g77', `gcc', and other GNU compilers.
-
- Some of these do *not* work when compiling programs written in
-Fortran:
-
-`-fpcc-struct-return'
-
-`-freg-struct-return'
- You should not use these except strictly the same way as you used
- them to build the version of `libf2c' with which you will be
- linking all code compiled by `g77' with the same option.
-
-`-fshort-double'
- This probably either has no effect on Fortran programs, or makes
- them act loopy.
-
-`-fno-common'
- Do not use this when compiling Fortran programs, or there will be
- Trouble.
-
-`-fpack-struct'
- This probably will break any calls to the `libf2c' library, at the
- very least, even if it is built with the same option.
-
-\1f
-File: g77.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking G77
-
-Environment Variables Affecting GNU Fortran
-===========================================
-
- GNU Fortran currently does not make use of any environment variables
-to control its operation above and beyond those that affect the
-operation of `gcc'.
-
- *Note Environment Variables Affecting GNU CC: (gcc)Environment
-Variables, for information on environment variables.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: News, Next: Changes, Prev: Invoking G77, Up: Top
-
-News About GNU Fortran
-**********************
-
- Changes made to recent versions of GNU Fortran are listed below,
-with the most recent version first.
-
- The changes are generally listed with code-generation bugs first,
-followed by compiler crashes involving valid code, new features, fixes
-to existing features, new diagnostics, internal improvements, and
-miscellany. This order is not strict--for example, some items involve
-a combination of these elements.
-
-In 0.5.21:
-==========
-
- * Fix a code-generation bug introduced by 0.5.20 caused by loop
- unrolling (by specifying `-funroll-loops' or similar). This bug
- afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
- C++, Fortran, and so on).
-
- * Fix a code-generation bug manifested when combining local
- `EQUIVALENCE' with a `DATA' statement that follows the first
- executable statement (or is treated as an executable-context
- statement as a result of using the `-fpedantic' option).
-
- * Fix a compiler crash that occured when an integer division by a
- constant zero is detected. Instead, when the `-W' option is
- specified, the `gcc' back end issues a warning about such a case.
- This bug afflicted all code compiled by version 2.7.2.2.f.2 of
- `gcc' (C, C++, Fortran, and so on).
-
- * Fix a compiler crash that occurred in some cases of procedure
- inlining. (Such cases became more frequent in 0.5.20.)
-
- * Fix a compiler crash resulting from using `DATA' or similar to
- initialize a `COMPLEX' variable or array to zero.
-
- * Fix compiler crashes involving use of `AND', `OR', or `XOR'
- intrinsics.
-
- * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
- variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
-
- * Fix compiler crashes due to using the name of a some non-standard
- intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
- a procedure or common block. Such dual use of a name in a program
- is allowed by the standard.
-
- * Place automatic arrays on the stack, even if `SAVE' or the
- `-fno-automatic' option is in effect. This avoids a compiler
- crash in some cases.
-
- * The `-malign-double' option now reliably aligns `DOUBLE PRECISION'
- optimally on Pentium and Pentium Pro architectures (586 and 686 in
- `gcc').
-
- * New option `-Wno-globals' disables warnings about "suspicious" use
- of a name both as a global name and as the implicit name of an
- intrinsic, and warnings about disagreements over the number or
- natures of arguments passed to global procedures, or the natures
- of the procedures themselves.
-
- The default is to issue such warnings, which are new as of this
- version of `g77'.
-
- * New option `-fno-globals' disables diagnostics about potentially
- fatal disagreements analysis problems, such as disagreements over
- the number or natures of arguments passed to global procedures, or
- the natures of those procedures themselves.
-
- The default is to issue such diagnostics and flag the compilation
- as unsuccessful. With this option, the diagnostics are issued as
- warnings, or, if `-Wno-globals' is specified, are not issued at
- all.
-
- This option also disables inlining of global procedures, to avoid
- compiler crashes resulting from coding errors that these
- diagnostics normally would identify.
-
- * Diagnose cases where a reference to a procedure disagrees with the
- type of that procedure, or where disagreements about the number or
- nature of arguments exist. This avoids a compiler crash.
-
- * Fix parsing bug whereby `g77' rejected a second initialization
- specification immediately following the first's closing `/' without
- an intervening comma in a `DATA' statement, and the second
- specification was an implied-DO list.
-
- * Improve performance of the `gcc' back end so certain complicated
- expressions involving `COMPLEX' arithmetic (especially
- multiplication) don't appear to take forever to compile.
-
- * Fix a couple of profiling-related bugs in `gcc' back end.
-
- * Integrate GNU Ada's (GNAT's) changes to the back end, which
- consist almost entirely of bug fixes. These fixes are circa
- version 3.10p of GNAT.
-
- * Include some other `gcc' fixes that seem useful in `g77''s version
- of `gcc'. (See `gcc/ChangeLog' for details--compare it to that
- file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.)
-
- * Fix `libU77' routines that accept file and other names to strip
- trailing blanks from them, for consistency with other
- implementations. Blanks may be forcibly appended to such names by
- appending a single null character (`CHAR(0)') to the significant
- trailing blanks.
-
- * Fix `CHMOD' intrinsic to work with file names that have embedded
- blanks, commas, and so on.
-
- * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
- argument.
-
- * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
- arguments in the correct order. Documentation fixed accordingly,
- and for `GMTIME()' and `LTIME()' as well.
-
- * Make many changes to `libU77' intrinsics to support existing code
- more directly.
-
- Such changes include allowing both subroutine and function forms
- of many routines, changing `MCLOCK()' and `TIME()' to return
- `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
- return `INTEGER(KIND=2)' values, and placing functions that are
- intended to perform side effects in a new intrinsic group,
- `badu77'.
-
- * Improve `libU77' so it is more portable.
-
- * Add options `-fbadu77-intrinsics-delete',
- `-fbadu77-intrinsics-hide', and so on.
-
- * Fix crashes involving diagnosed or invalid code.
-
- * `g77' and `gcc' now do a somewhat better job detecting and
- diagnosing arrays that are too large to handle before these cause
- diagnostics during the assembler or linker phase, a compiler
- crash, or generation of incorrect code.
-
- * Make some fixes to alias analysis code.
-
- * Add support for `restrict' keyword in `gcc' front end.
-
- * Support `gcc' version 2.7.2.3 (modified by `g77' into version
- 2.7.2.3.f.1), and remove support for prior versions of `gcc'.
-
- * Incorporate GNAT's patches to the `gcc' back end into `g77''s, so
- GNAT users do not need to apply GNAT's patches to build both GNAT
- and `g77' from the same source tree.
-
- * Modify `make' rules and related code so that generation of Info
- documentation doesn't require compilation using `gcc'. Now, any
- ANSI C compiler should be adequate to produce the `g77'
- documentation (in particular, the tables of intrinsics) from
- scratch.
-
- * Add `INT2' and `INT8' intrinsics.
-
- * Add `CPU_TIME' intrinsic.
-
- * Add `ALARM' intrinsic.
-
- * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
- `INTEGER(KIND=2)'.
-
- * Warn when explicit type declaration disagrees with the type of an
- intrinsic invocation.
-
- * Support `*f771' entry in `gcc' `specs' file.
-
- * Fix typo in `make' rule `g77-cross', used only for cross-compiling.
-
- * Fix `libf2c' build procedure to re-archive library if previous
- attempt to archive was interrupted.
-
- * Change `gcc' to unroll loops only during the last invocation (of
- as many as two invocations) of loop optimization.
-
- * Improve handling of `-fno-f2c' so that code that attempts to pass
- an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
- rejected due to the fact that the run-time-library routine is,
- effectively, compiled with `-ff2c' in effect.
-
- * Fix `g77' driver to recognize `-fsyntax-only' as an option that
- inhibits linking, just like `-c' or `-S', and to recognize and
- properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
- and `-Xlinker' options.
-
- * Upgrade to `libf2c' as of 1997-08-16.
-
- * Modify `libf2c' to consistently and clearly diagnose recursive I/O
- (at run time).
-
- * `g77' driver now prints version information (such as produced by
- `g77 -v') to `stderr' instead of `stdout'.
-
- * The `.r' suffix now designates a Ratfor source file, to be
- preprocessed via the `ratfor' command, available separately.
-
- * Fix some aspects of how `gcc' determines what kind of system is
- being configured and what kinds are supported. For example, GNU
- Linux/Alpha ELF systems now are directly supported.
-
- * Improve diagnostics.
-
- * Improve documentation and indexing.
-
- * Include all pertinent files for `libf2c' that come from
- `netlib.bell-labs.com'; give any such files that aren't quite
- accurate in `g77''s version of `libf2c' the suffix `.netlib'.
-
- * Reserve `INTEGER(KIND=0)' for future use.
-
-In 0.5.20:
-==========
-
- * The `-fno-typeless-boz' option is now the default.
-
- This option specifies that non-decimal-radix constants using the
- prefixed-radix form (such as `Z'1234'') are to be interpreted as
- `INTEGER' constants. Specify `-ftypeless-boz' to cause such
- constants to be interpreted as typeless.
-
- (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
-
- * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
- now are the defaults.
-
- Some programs might use names that clash with intrinsic names
- defined (and now enabled) by these options or by the new `libU77'
- intrinsics. Users of such programs might need to compile them
- differently (using, for example, `-ff90-intrinsics-disable') or,
- better yet, insert appropriate `EXTERNAL' statements specifying
- that these names are not intended to be names of intrinsics.
-
- * The `ALWAYS_FLUSH' macro is no longer defined when building
- `libf2c', which should result in improved I/O performance,
- especially over NFS.
-
- *Note:* If you have code that depends on the behavior of `libf2c'
- when built with `ALWAYS_FLUSH' defined, you will have to modify
- `libf2c' accordingly before building it from this and future
- versions of `g77'.
-
- * Dave Love's implementation of `libU77' has been added to the
- version of `libf2c' distributed with and built as part of `g77'.
- `g77' now knows about the routines in this library as intrinsics.
-
- * New option `-fvxt' specifies that the source file is written in
- VXT Fortran, instead of GNU Fortran.
-
- * The `-fvxt-not-f90' option has been deleted, along with its
- inverse, `-ff90-not-vxt'.
-
- If you used one of these deleted options, you should re-read the
- pertinent documentation to determine which options, if any, are
- appropriate for compiling your code with this version of `g77'.
-
- * The `-fugly' option now issues a warning, as it likely will be
- removed in a future version.
-
- (Enabling all the `-fugly-*' options is unlikely to be feasible,
- or sensible, in the future, so users should learn to specify only
- those `-fugly-*' options they really need for a particular source
- file.)
-
- * The `-fugly-assumed' option, introduced in version 0.5.19, has
- been changed to better accommodate old and new code.
-
- * Make a number of fixes to the `g77' front end and the `gcc' back
- end to better support Alpha (AXP) machines. This includes
- providing at least one bug-fix to the `gcc' back end for Alphas.
-
- * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
- and `%LOC()' construct now return values of integer type that is
- the same width (holds the same number of bits) as the pointer type
- on the machine.
-
- On most machines, this won't make a difference, whereas on Alphas,
- the type these constructs return is `INTEGER*8' instead of the
- more common `INTEGER*4'.
-
- * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
- in `complex' support in the `gcc' back end. New option
- `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
-
- * Fix bug whereby `REAL A(1)', for example, caused a compiler crash
- if `-fugly-assumed' was in effect and A was a local (automatic)
- array. That case is no longer affected by the new handling of
- `-fugly-assumed'.
-
- * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
- `foo.f' before issuing other diagnostics, and so the `-x' option
- is properly handled.
-
- * Enable inlining of subroutines and functions by the `gcc' back end.
- This works as it does for `gcc' itself--program units may be
- inlined for invocations that follow them in the same program unit,
- as long as the appropriate compile-time options are specified.
-
- * Dummy arguments are no longer assumed to potentially alias
- (overlap) other dummy arguments or `COMMON' areas when any of
- these are defined (assigned to) by Fortran code.
-
- This can result in faster and/or smaller programs when compiling
- with optimization enabled, though on some systems this effect is
- observed only when `-fforce-addr' also is specified.
-
- New options `-falias-check', `-fargument-alias',
- `-fargument-noalias', and `-fno-argument-noalias-global' control
- the way `g77' handles potential aliasing.
-
- * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
-
- * The bug-fix for 0.5.19.1 has been re-done. The `g77' compiler has
- been changed back to assume `libf2c' has no aliasing problems in
- its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
- intrinsics. The `libf2c' has been changed to have no such
- problems.
-
- As a result, 0.5.20 is expected to offer improved performance over
- 0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
- this change alone.
-
- *Note:* This change requires version 0.5.20 of `libf2c', at least,
- when linking code produced by any versions of `g77' other than
- 0.5.19.1. Use `g77 -v' to determine the version numbers of the
- `libF77', `libI77', and `libU77' components of the `libf2c'
- library. (If these version numbers are not printed--in
- particular, if the linker complains about unresolved references to
- names like `g77__fvers__'--that strongly suggests your
- installation has an obsolete version of `libf2c'.)
-
- * New option `-fugly-assign' specifies that the same memory
- locations are to be used to hold the values assigned by both
- statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally,
- `g77' uses a separate memory location to hold assigned statement
- labels.)
-
- * `FORMAT' and `ENTRY' statements now are allowed to precede
- `IMPLICIT NONE' statements.
-
- * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
- type, instead of crashing, at compile time.
-
- * Fix crashes involving diagnosed or invalid code.
-
- * Change approach to building `libf2c' archive (`libf2c.a') so that
- members are added to it only when truly necessary, so the user
- that installs an already-built `g77' doesn't need to have write
- access to the build tree (whereas the user doing the build might
- not have access to install new software on the system).
-
- * Support `gcc' version 2.7.2.2 (modified by `g77' into version
- 2.7.2.2.f.2), and remove support for prior versions of `gcc'.
-
- * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
- procedures.
-
- * Improve general build procedures for `g77', fixing minor bugs
- (such as deletion of any file named `f771' in the parent directory
- of `gcc/').
-
- * Enable full support of `INTEGER*8' available in `libf2c' and
- `f2c.h' so that `f2c' users may make full use of its features via
- the `g77' version of `f2c.h' and the `INTEGER*8' support routines
- in the `g77' version of `libf2c'.
-
- * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
- information on the library.
-
- * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
- instead of synonyms for the generic intrinsic `REAL'.
-
- * New intrinsics have been added. These are `REALPART', `IMAGPART',
- `COMPLEX', `LONG', and `SHORT'.
-
- * A new group of intrinsics, `gnu', has been added to contain the
- new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old
- group, `dcp', has been removed.
-
- * Complain about industry-wide ambiguous references `REAL(EXPR)' and
- `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
- other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
- interpretation or new `-fugly-complex' option, in conjunction with
- `-fnot-f90', specifies `f2c' interpretation.
-
- * Make improvements to diagnostics.
-
- * Speed up compiler a bit.
-
- * Improvements to documentation and indexing, including a new
- chapter containing information on one, later more, diagnostics
- that users are directed to pull up automatically via a message in
- the diagnostic itself.
-
- (Hence the menu item `M' for the node `Diagnostics' in the
- top-level menu of the Info documentation.)
-
-In 0.5.19.1:
-============
-
- * Code-generation bugs afflicting operations on complex data have
- been fixed.
-
- These bugs occurred when assigning the result of an operation to a
- complex variable (or array element) that also served as an input
- to that operation.
-
- The operations affected by this bug were: `CONJG()', `DCONJG()',
- `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
- `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
- COMPLEX' operand to an `INTEGER' power. (The related generic and
- `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
-
- For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
- is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
-
-In 0.5.19:
-==========
-
- * Fix `FORMAT' statement parsing so negative values for specifiers
- such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
- negative.
-
- * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
- second argument.
-
- * A temporary kludge option provides bare-bones information on
- `COMMON' and `EQUIVALENCE' members at debug time.
-
- * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
- loops.
-
- * New `-fno-silent' option causes names of program units to be
- printed as they are compiled, in a fashion similar to UNIX `f77'
- and `f2c'.
-
- * New `-fugly-assumed' option specifies that arrays dimensioned via
- `DIMENSION X(1)', for example, are to be treated as assumed-size.
-
- * New `-fno-typeless-boz' option specifies that non-decimal-radix
- constants using the prefixed-radix form (such as `Z'1234'') are to
- be interpreted as `INTEGER' constants.
-
- * New `-ff66' option is a "shorthand" option that specifies
- behaviors considered appropriate for FORTRAN 66 programs.
-
- * New `-ff77' option is a "shorthand" option that specifies
- behaviors considered appropriate for UNIX `f77' programs.
-
- * New `-fugly-comma' and `-fugly-logint' options provided to perform
- some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are
- now "shorthand" options, in that they do nothing more than enable
- (or disable) other `-fugly-*' options.
-
- * Fix parsing of assignment statements involving targets that are
- substrings of elements of `CHARACTER' arrays having names such as
- `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
-
- * Fix crashes involving diagnosed code.
-
- * Fix handling of local `EQUIVALENCE' areas so certain cases of
- valid Fortran programs are not misdiagnosed as improperly
- extending the area backwards.
-
- * Support `gcc' version 2.7.2.1.
-
- * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
- procedures.
-
- * Change code generation for list-directed I/O so it allows for new
- versions of `libf2c' that might return non-zero status codes for
- some operations previously assumed to always return zero.
-
- This change not only affects how `IOSTAT=' variables are set by
- list-directed I/O, it also affects whether `END=' and `ERR='
- labels are reached by these operations.
-
- * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
- `libf2c'.
-
- * Modify `fseek_()' in `libf2c' to be more portable (though, in
- practice, there might be no systems where this matters) and to
- catch invalid `whence' arguments.
-
- * Some useless warnings from the `-Wunused' option have been
- eliminated.
-
- * Fix a problem building the `f771' executable on AIX systems by
- linking with the `-bbigtoc' option.
-
- * Abort configuration if `gcc' has not been patched using the patch
- file provided in the `gcc/f/gbe/' subdirectory.
-
- * Add options `--help' and `--version' to the `g77' command, to
- conform to GNU coding guidelines. Also add printing of `g77'
- version number when the `--verbose' (`-v') option is used.
-
- * Change internally generated name for local `EQUIVALENCE' areas to
- one based on the alphabetically sorted first name in the list of
- names for entities placed at the beginning of the areas.
-
- * Improvements to documentation and indexing.
-
-In 0.5.18:
-==========
-
- * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
- `INTEGER*8', and their `LOGICAL' equivalents. (This support works
- on most, maybe all, `gcc' targets.)
-
- Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
- the patch for this!
-
- Among the missing elements from the support for these features are
- full intrinsic support and constants.
-
- * Add some rudimentary support for the `BYTE' and `WORD'
- type-declaration statements. `BYTE' corresponds to `INTEGER*1',
- while `WORD' corresponds to `INTEGER*2'.
-
- Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
- the patch for this!
-
- * The compiler code handling intrinsics has been largely rewritten
- to accommodate the new types. No new intrinsics or arguments for
- existing intrinsics have been added, so there is, at this point,
- no intrinsic to convert to `INTEGER*8', for example.
-
- * Support automatic arrays in procedures.
-
- * Reduce space/time requirements for handling large *sparsely*
- initialized aggregate arrays. This improvement applies to only a
- subset of the general problem to be addressed in 0.6.
-
- * Treat initial values of zero as if they weren't specified (in DATA
- and type-declaration statements). The initial values will be set
- to zero anyway, but the amount of compile time processing them
- will be reduced, in some cases significantly (though, again, this
- is only a subset of the general problem to be addressed in 0.6).
-
- A new option, `-fzeros', is introduced to enable the traditional
- treatment of zeros as any other value.
-
- * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
- returning a `REAL' result, instead of as a `DOUBLE PRECISION'
- result. (Here, `Z' is `DOUBLE COMPLEX'.)
-
- With `-fno-f90' in force, the interpretation remains unchanged,
- since this appears to be how at least some F77 code using the
- `DOUBLE COMPLEX' extension expected it to work.
-
- Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
- extended F77, it appears to be the same as `REAL(REAL(Z))'.
-
- * An expression involving exponentiation, where both operands were
- type `INTEGER' and the right-hand operand was negative, was
- erroneously evaluated.
-
- * Fix bugs involving `DATA' implied-`DO' constructs (these involved
- an errant diagnostic and a crash, both on good code, one involving
- subsequent statement-function definition).
-
- * Close `INCLUDE' files after processing them, so compiling source
- files with lots of `INCLUDE' statements does not result in being
- unable to open `INCLUDE' files after all the available file
- descriptors are used up.
-
- * Speed up compiling, especially of larger programs, and perhaps
- slightly reduce memory utilization while compiling (this is *not*
- the improvement planned for 0.6 involving large aggregate
- areas)--these improvements result from simply turning off some
- low-level code to do self-checking that hasn't been triggered in a
- long time.
-
- * Introduce three new options that implement optimizations in the
- `gcc' back end (GBE). These options are `-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
- default, for Fortran compilations. These optimizations are
- intended to help toon Fortran programs.
-
- * Patch the GBE to do a better job optimizing certain kinds of
- references to array elements.
-
- * Due to patches to the GBE, the version number of `gcc' also is
- patched to make it easier to manage installations, especially
- useful if it turns out a `g77' change to the GBE has a bug.
-
- The `g77'-modified version number is the `gcc' version number with
- the string `.f.N' appended, where `f' identifies the version as
- enhanced for Fortran, and N is `1' for the first Fortran patch for
- that version of `gcc', `2' for the second, and so on.
-
- So, this introduces version 2.7.2.f.1 of `gcc'.
-
- * Make several improvements and fixes to diagnostics, including the
- removal of two that were inappropriate or inadequate.
-
- * Warning about two successive arithmetic operators, produced by
- `-Wsurprising', now produced *only* when both operators are,
- indeed, arithmetic (not relational/boolean).
-
- * `-Wsurprising' now warns about the remaining cases of using
- non-integral variables for implied-`DO' loops, instead of these
- being rejected unless `-fpedantic' or `-fugly' specified.
-
- * Allow `SAVE' of a local variable or array, even after it has been
- given an initial value via `DATA', for example.
-
- * Introduce an Info version of `g77' documentation, which supercedes
- `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'. These files
- will be removed in a future release. The files `gcc/f/BUGS',
- `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
- the texinfo source when distributions are made.
-
- This effort was inspired by a first pass at translating
- `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
- (<ronis@onsager.chem.mcgill.ca>).
-
- * New `-fno-second-underscore' option to specify that, when
- `-funderscoring' is in effect, a second underscore is not to be
- appended to Fortran names already containing an underscore.
-
- * Change the way iterative `DO' loops work to follow the F90
- standard. In particular, calculation of the iteration count is
- still done by converting the start, end, and increment parameters
- to the type of the `DO' variable, but the result of the
- calculation is always converted to the default `INTEGER' type.
-
- (This should have no effect on existing code compiled by `g77',
- but code written to assume that use of a *wider* type for the `DO'
- variable will result in an iteration count being fully calculated
- using that wider type (wider than default `INTEGER') must be
- rewritten.)
-
- * Support `gcc' version 2.7.2.
-
- * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
- procedures.
-
- Note that the email addresses related to `f2c' have changed--the
- distribution site now is named `netlib.bell-labs.com', and the
- maintainer's new address is <dmg@bell-labs.com>.
-
-In 0.5.17:
-==========
-
- * *Fix serious bug* in `g77 -v' command that can cause removal of a
- system's `/dev/null' special file if run by user `root'.
-
- *All users* of version 0.5.16 should ensure that they have not
- removed `/dev/null' or replaced it with an ordinary file (e.g. by
- comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
- If the output isn't basically the same, contact your system
- administrator about restoring `/dev/null' to its proper status).
-
- This bug is particularly insidious because removing `/dev/null' as
- a special file can go undetected for quite a while, aside from
- various applications and programs exhibiting sudden, strange
- behaviors.
-
- I sincerely apologize for not realizing the implications of the
- fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
- that `ld' tries to *remove* the executable it is supposed to build
- (especially if it reports unresolved references, which it should
- in this case)!
-
- * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
- unit.
-
- * Fix crash that can occur when diagnostics given outside of any
- program unit (such as when input file contains `@foo').
-
- * Fix crashes, infinite loops (hangs), and such involving diagnosed
- code.
-
- * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
- arguments, and issue clearer error message in cases where target
- of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
- should never happen).
-
- * Make `libf2c' build procedures work on more systems again by
- eliminating unnecessary invocations of `ld -r -x' and `mv'.
-
- * Fix omission of `-funix-intrinsics-...' options in list of
- permitted options to compiler.
-
- * Fix failure to always diagnose missing type declaration for
- `IMPLICIT NONE'.
-
- * Fix compile-time performance problem (which could sometimes crash
- the compiler, cause a hang, or whatever, due to a bug in the back
- end) involving exponentiation with a large `INTEGER' constant for
- the right-hand operator (e.g. `I**32767').
-
- * Fix build procedures so cross-compiling `g77' (the `fini' utility
- in particular) is properly built using the host compiler.
-
- * Add new `-Wsurprising' option to warn about constructs that are
- interpreted by the Fortran standard (and `g77') in ways that are
- surprising to many programmers.
-
- * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
- `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
-
- *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
- you might use these as generic intrinsics, to improve likelihood
- of diagnostics (instead of subtle run-time bugs) when using a
- compiler that doesn't support these as intrinsics (e.g. `f2c').
-
- * Remove from `-fno-pedantic' the diagnostic about `DO' with
- non-`INTEGER' index variable; issue that under `-Wsurprising'
- instead.
-
- * Clarify some diagnostics that say things like "ignored" when that's
- misleading.
-
- * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
-
- * Minor improvements to code generation for various operations on
- `LOGICAL' operands.
-
- * Minor improvement to code generation for some `DO' loops on some
- machines.
-
- * Support `gcc' version 2.7.1.
-
- * Upgrade to `libf2c' as of 1995-11-15.
-
-In 0.5.16:
-==========
-
- * Fix a code-generation bug involving complicated `EQUIVALENCE'
- statements not involving `COMMON'.
-
- * Fix code-generation bugs involving invoking "gratis" library
- procedures in `libf2c' from code compiled with `-fno-f2c' by
- making these procedures known to `g77' as intrinsics (not affected
- by -fno-f2c). This is known to fix code invoking `ERF()',
- `ERFC()', `DERF()', and `DERFC()'.
-
- * Update `libf2c' to include netlib patches through 1995-08-16, and
- `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
- consistent with other Fortran implementations by outputting
- leading zeros in formatted and list-directed output.
-
- * Fix a code-generation bug involving adjustable dummy arrays with
- high bounds whose primaries are changed during procedure
- execution, and which might well improve code-generation
- performance for such arrays compared to `f2c' plus `gcc' (but
- apparently only when using `gcc-2.7.0' or later).
-
- * Fix a code-generation bug involving invocation of `COMPLEX' and
- `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
- COMPLEX' divides, when the result of the invocation or divide is
- assigned directly to a variable that overlaps one or more of the
- arguments to the invocation or divide.
-
- * Fix crash by not generating new optimal code for `X**I' if `I' is
- nonconstant and the expression is used to dimension a dummy array,
- since the `gcc' back end does not support the necessary mechanics
- (and the `gcc' front end rejects the equivalent construct, as it
- turns out).
-
- * Fix crash on expressions like `COMPLEX**INTEGER'.
-
- * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
- `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
-
- * Fix crashes and such involving diagnosed code.
-
- * Diagnose, instead of crashing on, statement function definitions
- having duplicate dummy argument names.
-
- * Fix bug causing rejection of good code involving statement function
- definitions.
-
- * Fix bug resulting in debugger not knowing size of local equivalence
- area when any member of area has initial value (via `DATA', for
- example).
-
- * Fix installation bug that prevented installation of `g77' driver.
- Provide for easy selection of whether to install copy of `g77' as
- `f77' to replace the broken code.
-
- * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
- invoke the `f771' program (e.g. when `-E' is specified).
-
- * Fix diagnostic to point to correct source line when it immediately
- follows an `INCLUDE' statement.
-
- * Support more compiler options in `gcc'/`g77' when compiling
- Fortran files. These options include `-p', `-pg', `-aux-info',
- `-P', correct setting of version-number macros for preprocessing,
- full recognition of `-O0', and automatic insertion of
- configuration-specific linker specs.
-
- * Add new intrinsics that interface to existing routines in `libf2c':
- `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
- `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'. Note that
- `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
- subroutines, not functions (since they have side effects), so to
- get the return values from `SIGNAL' and `SYSTEM', append a final
- argument specifying an `INTEGER' variable or array element (e.g.
- `CALL SYSTEM('rm foo',ISTAT)').
-
- * Add new intrinsic group named `unix' to contain the new intrinsics,
- and by default enable this new group.
-
- * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
- group.
-
- * Improve `g77' so that `g77 -v' by itself (or with certain other
- options, including `-B', `-b', `-i', `-nostdlib', and `-V')
- reports lots more useful version info, and so that long-form
- options `gcc' accepts are understood by `g77' as well (even in
- truncated, unambiguous forms).
-
- * Add new `g77' option `--driver=name' to specify driver when
- default, `gcc', isn't appropriate.
-
- * Add support for `#' directives (as output by the preprocessor) in
- the compiler, and enable generation of those directives by the
- preprocessor (when compiling `.F' files) so diagnostics and
- debugging info are more useful to users of the preprocessor.
-
- * Produce better diagnostics, more like `gcc', with info such as `In
- function `foo':' and `In file included from...:'.
-
- * Support `gcc''s `-fident' and `-fno-ident' options.
-
- * When `-Wunused' in effect, don't warn about local variables used as
- statement-function dummy arguments or `DATA' implied-`DO' iteration
- variables, even though, strictly speaking, these are not uses of
- the variables themselves.
-
- * When `-W -Wunused' in effect, don't warn about unused dummy
- arguments at all, since there's no way to turn this off for
- individual cases (`g77' might someday start warning about
- these)--applies to `gcc' versions 2.7.0 and later, since earlier
- versions didn't warn about unused dummy arguments.
-
- * New option `-fno-underscoring' that inhibits transformation of
- names (by appending one or two underscores) so users may experiment
- with implications of such an environment.
-
- * Minor improvement to `gcc/f/info' module to make it easier to build
- `g77' using the native (non-`gcc') compiler on certain machines
- (but definitely not all machines nor all non-`gcc' compilers).
- Please do not report bugs showing problems compilers have with
- macros defined in `gcc/f/target.h' and used in places like
- `gcc/f/expr.c'.
-
- * Add warning to be printed for each invocation of the compiler if
- the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
- bits, since `g77' is known to not work well for such cases (to be
- fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
- Actual Bugs.).
-
- * Lots of new documentation (though work is still needed to put it
- into canonical GNU format).
-
- * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
- produce smaller library without lots of debugging clutter.
-
-In 0.5.15:
-==========
-
- * Fix bad code generation involving `X**I' and temporary, internal
- variables generated by `g77' and the back end (such as for `DO'
- loops).
-
- * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
-
- * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
-
- * Fix crash or other erratic behavior when null character constant
- (`''') is encountered.
-
- * Fix crash or other erratic behavior involving diagnosed code.
-
- * Fix code generation for external functions returning type `REAL'
- when the `-ff2c' option is in force (which it is by default) so
- that `f2c' compatibility is indeed provided.
-
- * Disallow `COMMON I(10)' if `I' has previously been specified with
- an array declarator.
-
- * New `-ffixed-line-length-N' option, where N is the maximum length
- of a typical fixed-form line, defaulting to 72 columns, such that
- characters beyond column N are ignored, or N is `none', meaning no
- characters are ignored. does not affect lines with `&' in column
- 1, which are always processed as if `-ffixed-line-length-none' was
- in effect.
-
- * No longer generate better code for some kinds of array references,
- as `gcc' back end is to be fixed to do this even better, and it
- turned out to slow down some code in some cases after all.
-
- * In `COMMON' and `EQUIVALENCE' areas with any members given initial
- values (e.g. via `DATA'), uninitialized members now always
- initialized to binary zeros (though this is not required by the
- standard, and might not be done in future versions of `g77').
- Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
- those with members of more than one type), the uninitialized
- members were initialized to spaces, to cater to `CHARACTER' types,
- but it seems no existing code expects that, while much existing
- code expects binary zeros.
-
-In 0.5.14:
-==========
-
- * Don't emit bad code when low bound of adjustable array is
- nonconstant and thus might vary as an expression at run time.
-
- * Emit correct code for calculation of number of trips in `DO' loops
- for cases where the loop should not execute at all. (This bug
- affected cases where the difference between the begin and end
- values was less than the step count, though probably not for
- floating-point cases.)
-
- * Fix crash when extra parentheses surround item in `DATA'
- implied-`DO' list.
-
- * Fix crash over minor internal inconsistencies in handling
- diagnostics, just substitute dummy strings where necessary.
-
- * Fix crash on some systems when compiling call to `MVBITS()'
- intrinsic.
-
- * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
- string of one or more digits.
-
- * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
-
- * Fix various crashes involving code with diagnosed errors.
-
- * Support `-I' option for `INCLUDE' statement, plus `gcc''s
- `header.gcc' facility for handling systems like MS-DOS.
-
- * Allow `INCLUDE' statement to be continued across multiple lines,
- even allow it to coexist with other statements on the same line.
-
- * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
- fixes a bug involving infinite loops reading EOF with empty
- list-directed I/O list.
-
- * Remove all the `g77'-specific auto-configuration scripts, code,
- and so on, except for temporary substitutes for bsearch() and
- strtoul(), as too many configure/build problems were reported in
- these areas. People will have to fix their systems' problems
- themselves, or at least somewhere other than `g77', which expects
- a working ANSI C environment (and, for now, a GNU C compiler to
- compile `g77' itself).
-
- * Complain if initialized common redeclared as larger in subsequent
- program unit.
-
- * Warn if blank common initialized, since its size can vary and hence
- related warnings that might be helpful won't be seen.
-
- * New `-fbackslash' option, on by default, that causes `\' within
- `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
- Note that this behavior is somewhat different from `f2c''s, which
- supports only a limited subset of backslash (escape) sequences.
-
- * Make `-fugly-args' the default.
-
- * New `-fugly-init' option, on by default, that allows
- typeless/Hollerith to be specified as initial values for variables
- or named constants (`PARAMETER'), and also allows
- character<->numeric conversion in those contexts--turn off via
- `-fno-ugly-init'.
-
- * New `-finit-local-zero' option to initialize local variables to
- binary zeros. This does not affect whether they are `SAVE'd, i.e.
- made automatic or static.
-
- * New `-Wimplicit' option to warn about implicitly typed variables,
- arrays, and functions. (Basically causes all program units to
- default to `IMPLICIT NONE'.)
-
- * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
- `-O' not specified, since `-Wuninitialized' requires `-O'), and
- implies `-Wunused' as well.
-
- * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
- names (since they are assumed to refer to block data program
- units, to make use of libraries more reliable).
-
- * Support `%LOC()' and `LOC()' of character arguments.
-
- * Support null (zero-length) character constants and expressions.
-
- * Support `f2c''s `IMAG()' generic intrinsic.
-
- * Support `ICHAR()', `IACHAR()', and `LEN()' of character
- expressions that are valid in assignments but not normally as
- actual arguments.
-
- * Support `f2c'-style `&' in column 1 to mean continuation line.
-
- * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
- `BLOCK DATA', even though these are not allowed by the standard.
-
- * Allow `RETURN' in main program unit.
-
- * Changes to Hollerith-constant support to obey Appendix C of the
- standard:
-
- - Now padded on the right with zeros, not spaces.
-
- - Hollerith "format specifications" in the form of arrays of
- non-character allowed.
-
- - Warnings issued when non-space truncation occurs when
- converting to another type.
-
- - When specified as actual argument, now passed by reference to
- `INTEGER' (padded on right with spaces if constant too small,
- otherwise fully intact if constant wider the `INTEGER' type)
- instead of by value.
-
- *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
- which it treats exactly the same as `CALL FOO('X')', but which the
- standard and `g77' treat as `CALL FOO(%REF('X '))' (padded with
- as many spaces as necessary to widen to `INTEGER'), essentially.
-
- * Changes and fixes to typeless-constant support:
-
- - Now treated as a typeless double-length `INTEGER' value.
-
- - Warnings issued when overflow occurs.
-
- - Padded on the left with zeros when converting to a larger
- type.
-
- - Should be properly aligned and ordered on the target machine
- for whatever type it is turned into.
-
- - When specified as actual argument, now passed as reference to
- a default `INTEGER' constant.
-
- * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
- the expression plus a length for the expression just as if it were
- a `CHARACTER' expression. For example, `CALL FOO(%DESCR(D))',
- where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
-
- * Name of multi-entrypoint master function changed to incorporate
- the name of the primary entry point instead of a decimal value, so
- the name of the master function for `SUBROUTINE X' with alternate
- entry points is now `__g77_masterfun_x'.
-
- * Remove redundant message about zero-step-count `DO' loops.
-
- * Clean up diagnostic messages, shortening many of them.
-
- * Fix typo in `g77' man page.
-
- * Clarify implications of constant-handling bugs in `f/BUGS'.
-
- * Generate better code for `**' operator with a right-hand operand of
- type `INTEGER'.
-
- * Generate better code for `SQRT()' and `DSQRT()', also when
- `-ffast-math' specified, enable better code generation for `SIN()'
- and `COS()'.
-
- * Generate better code for some kinds of array references.
-
- * Speed up lexing somewhat (this makes the compilation phase
- noticeably faster).
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Changes, Next: Language, Prev: News, Up: Top
-
-User-visible Changes
-********************
-
- This section describes changes to `g77' that are visible to the
-programmers who actually write and maintain Fortran code they compile
-with `g77'. Information on changes to installation procedures, changes
-to the documentation, and bug fixes is not provided here, unless it is
-likely to affect how users use `g77'. *Note News About GNU Fortran:
-News, for information on such changes to `g77'.
-
- To find out about existing bugs and ongoing plans for GNU Fortran,
-retrieve `ftp://alpha.gnu.ai.mit.edu/g77.plan' or, if you cannot do
-that, email <fortran@gnu.ai.mit.edu> asking for a recent copy of the
-GNU Fortran `.plan' file.
-
-In 0.5.21:
-==========
-
- * When the `-W' option is specified, `gcc', `g77', and other GNU
- compilers that incorporate the `gcc' back end as modified by
- `g77', issue a warning about integer division by constant zero.
-
- * New option `-Wno-globals' disables warnings about "suspicious" use
- of a name both as a global name and as the implicit name of an
- intrinsic, and warnings about disagreements over the number or
- natures of arguments passed to global procedures, or the natures
- of the procedures themselves.
-
- The default is to issue such warnings, which are new as of this
- version of `g77'.
-
- * New option `-fno-globals' disables diagnostics about potentially
- fatal disagreements analysis problems, such as disagreements over
- the number or natures of arguments passed to global procedures, or
- the natures of those procedures themselves.
-
- The default is to issue such diagnostics and flag the compilation
- as unsuccessful. With this option, the diagnostics are issued as
- warnings, or, if `-Wno-globals' is specified, are not issued at
- all.
-
- This option also disables inlining of global procedures, to avoid
- compiler crashes resulting from coding errors that these
- diagnostics normally would identify.
-
- * Fix `libU77' routines that accept file names to strip trailing
- spaces from them, for consistency with other implementations.
-
- * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
- argument.
-
- * Make many changes to `libU77' intrinsics to support existing code
- more directly.
-
- Such changes include allowing both subroutine and function forms
- of many routines, changing `MCLOCK()' and `TIME()' to return
- `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
- return `INTEGER(KIND=2)' values, and placing functions that are
- intended to perform side effects in a new intrinsic group,
- `badu77'.
-
- * Add options `-fbadu77-intrinsics-delete',
- `-fbadu77-intrinsics-hide', and so on.
-
- * Add `INT2' and `INT8' intrinsics.
-
- * Add `CPU_TIME' intrinsic.
-
- * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
- `INTEGER(KIND=2)'.
-
-In 0.5.20:
-==========
-
- * The `-fno-typeless-boz' option is now the default.
-
- This option specifies that non-decimal-radix constants using the
- prefixed-radix form (such as `Z'1234'') are to be interpreted as
- `INTEGER(KIND=1)' constants. Specify `-ftypeless-boz' to cause
- such constants to be interpreted as typeless.
-
- (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
-
- *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
- for information on the `-ftypeless-boz' option.
-
- * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
- now are the defaults.
-
- Some programs might use names that clash with intrinsic names
- defined (and now enabled) by these options or by the new `libU77'
- intrinsics. Users of such programs might need to compile them
- differently (using, for example, `-ff90-intrinsics-disable') or,
- better yet, insert appropriate `EXTERNAL' statements specifying
- that these names are not intended to be names of intrinsics.
-
- * The `ALWAYS_FLUSH' macro is no longer defined when building
- `libf2c', which should result in improved I/O performance,
- especially over NFS.
-
- *Note:* If you have code that depends on the behavior of `libf2c'
- when built with `ALWAYS_FLUSH' defined, you will have to modify
- `libf2c' accordingly before building it from this and future
- versions of `g77'.
-
- *Note Output Assumed To Flush::, for more information.
-
- * Dave Love's implementation of `libU77' has been added to the
- version of `libf2c' distributed with and built by `g77'. `g77'
- now knows about the routines in this library as intrinsics.
-
- * New option `-fvxt' specifies that the source file is written in
- VXT Fortran, instead of GNU Fortran.
-
- *Note VXT Fortran::, for more information on the constructs
- recognized when the `-fvxt' option is specified.
-
- * The `-fvxt-not-f90' option has been deleted, along with its
- inverse, `-ff90-not-vxt'.
-
- If you used one of these deleted options, you should re-read the
- pertinent documentation to determine which options, if any, are
- appropriate for compiling your code with this version of `g77'.
-
- *Note Other Dialects::, for more information.
-
- * The `-fugly' option now issues a warning, as it likely will be
- removed in a future version.
-
- (Enabling all the `-fugly-*' options is unlikely to be feasible,
- or sensible, in the future, so users should learn to specify only
- those `-fugly-*' options they really need for a particular source
- file.)
-
- * The `-fugly-assumed' option, introduced in version 0.5.19, has
- been changed to better accommodate old and new code. *Note Ugly
- Assumed-Size Arrays::, for more information.
-
- * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
- and `%LOC()' construct now return values of `INTEGER(KIND=0)' type,
- as defined by the GNU Fortran language.
-
- This type is wide enough (holds the same number of bits) as the
- character-pointer type on the machine.
-
- On most systems, this won't make a noticable difference, whereas
- on Alphas and other systems with 64-bit pointers, the
- `INTEGER(KIND=0)' type is equivalent to `INTEGER(KIND=2)' (often
- referred to as `INTEGER*8') instead of the more common
- `INTEGER(KIND=1)' (often referred to as `INTEGER*4').
-
- * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
- in `complex' support in the `gcc' back end. New option
- `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
-
- * Dummy arguments are no longer assumed to potentially alias
- (overlap) other dummy arguments or `COMMON' areas when any of
- these are defined (assigned to) by Fortran code.
-
- This can result in faster and/or smaller programs when compiling
- with optimization enabled, though on some systems this effect is
- observed only when `-fforce-addr' also is specified.
-
- New options `-falias-check', `-fargument-alias',
- `-fargument-noalias', and `-fno-argument-noalias-global' control
- the way `g77' handles potential aliasing.
-
- *Note Aliasing Assumed To Work::, for detailed information on why
- the new defaults might result in some programs no longer working
- the way they did when compiled by previous versions of `g77'.
-
- * New option `-fugly-assign' specifies that the same memory
- locations are to be used to hold the values assigned by both
- statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally,
- `g77' uses a separate memory location to hold assigned statement
- labels.)
-
- *Note Ugly Assigned Labels::, for more information.
-
- * `FORMAT' and `ENTRY' statements now are allowed to precede
- `IMPLICIT NONE' statements.
-
- * Enable full support of `INTEGER(KIND=2)' (often referred to as
- `INTEGER*8') available in `libf2c' and `f2c.h' so that `f2c' users
- may make full use of its features via the `g77' version of `f2c.h'
- and the `INTEGER(KIND=2)' support routines in the `g77' version of
- `libf2c'.
-
- * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
- information on the library.
-
- * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
- instead of synonyms for the generic intrinsic `REAL'.
-
- * New intrinsics have been added. These are `REALPART', `IMAGPART',
- `COMPLEX', `LONG', and `SHORT'.
-
- * A new group of intrinsics, `gnu', has been added to contain the
- new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old
- group, `dcp', has been removed.
-
-In 0.5.19:
-==========
-
- * A temporary kludge option provides bare-bones information on
- `COMMON' and `EQUIVALENCE' members at debug time. *Note Options
- for Code Generation Conventions: Code Gen Options, for information
- on the `-fdebug-kludge' option.
-
- * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
- loops.
-
- * New `-fno-silent' option causes names of program units to be
- printed as they are compiled, in a fashion similar to UNIX `f77'
- and `f2c'.
-
- * New `-fugly-assumed' option specifies that arrays dimensioned via
- `DIMENSION X(1)', for example, are to be treated as assumed-size.
-
- * New `-fno-typeless-boz' option specifies that non-decimal-radix
- constants using the prefixed-radix form (such as `Z'1234'') are to
- be interpreted as `INTEGER(KIND=1)' constants.
-
- * New `-ff66' option is a "shorthand" option that specifies
- behaviors considered appropriate for FORTRAN 66 programs.
-
- * New `-ff77' option is a "shorthand" option that specifies
- behaviors considered appropriate for UNIX `f77' programs.
-
- * New `-fugly-comma' and `-fugly-logint' options provided to perform
- some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are
- now "shorthand" options, in that they do nothing more than enable
- (or disable) other `-fugly-*' options.
-
- * Change code generation for list-directed I/O so it allows for new
- versions of `libf2c' that might return non-zero status codes for
- some operations previously assumed to always return zero.
-
- This change not only affects how `IOSTAT=' variables are set by
- list-directed I/O, it also affects whether `END=' and `ERR='
- labels are reached by these operations.
-
- * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
- `libf2c'.
-
- * Add options `--help' and `--version' to the `g77' command, to
- conform to GNU coding guidelines. Also add printing of `g77'
- version number when the `--verbose' (`-v') option is used.
-
-In 0.5.18:
-==========
-
- * The `BYTE' and `WORD' statements now are supported, to a limited
- extent.
-
- * `INTEGER*1', `INTEGER*2', `INTEGER*8', and their `LOGICAL'
- equivalents, now are supported to a limited extent. Among the
- missing elements are complete intrinsic and constant support.
-
- * Support automatic arrays in procedures. For example, `REAL A(N)',
- where `A' is not a dummy argument, specifies that `A' is an
- automatic array. The size of `A' is calculated from the value of
- `N' each time the procedure is called, that amount of space is
- allocated, and that space is freed when the procedure returns to
- its caller.
-
- * Add `-fno-zeros' option, enabled by default, to reduce
- compile-time CPU and memory usage for code that provides initial
- zero values for variables and arrays.
-
- * Introduce three new options that apply to all compilations by
- `g77'-aware GNU compilers--`-fmove-all-movables',
- `-freduce-all-givs', and `-frerun-loop-opt'--which can improve the
- run-time performance of some programs.
-
- * Replace much of the existing documentation with a single Info
- document.
-
- * New option `-fno-second-underscore'.
-
-In 0.5.17:
-==========
-
- * The `ERF()' and `ERFC()' intrinsics now are generic intrinsics,
- mapping to `ERF'/`DERF' and `ERFC'/`DERFC', respectively. *Note:*
- Use `INTRINSIC ERF,ERFC' in any code that might reference these as
- generic intrinsics, to improve the likelihood of diagnostics
- (instead of subtle run-time bugs) when using compilers that don't
- support these as intrinsics.
-
- * New option `-Wsurprising'.
-
- * DO loops with non-`INTEGER' variables now diagnosed only when
- `-Wsurprising' specified. Previously, this was diagnosed *unless*
- `-fpedantic' or `-fugly' was specified.
-
-In 0.5.16:
-==========
-
- * `libf2c' changed to output a leading zero (0) digit for
- floating-point values output via list-directed and formatted
- output (to bring `g77' more into line with many existing Fortran
- implementations--the ANSI FORTRAN 77 standard leaves this choice
- to the implementation).
-
- * `libf2c' no longer built with debugging information intact, making
- it much smaller.
-
- * Automatic installation of the `g77' command now works.
-
- * Diagnostic messages now more informative, a la `gcc', including
- messages like `In function `foo':' and `In file included from...:'.
-
- * New group of intrinsics called `unix', including `ABORT', `DERF',
- `DERFC', `ERF', `ERFC', `EXIT', `FLUSH', `GETARG', `GETENV',
- `SIGNAL', and `SYSTEM'.
-
- * `-funix-intrinsics-{delete,hide,disable,enable}' options added.
-
- * `-fno-underscoring' option added.
-
- * `--driver' option added to the `g77' command.
-
- * Support for the `gcc' options `-fident' and `-fno-ident' added.
-
- * `g77 -v' returns much more version info, making the submission of
- better bug reports easily.
-
- * Many improvements to the `g77' command to better fulfill its role
- as a front-end to the `gcc' driver. For example, `g77' now
- recognizes `--verbose' as a verbose way of specifying `-v'.
-
- * Compiling preprocessed (`*.F' and `*.fpp') files now results in
- better diagnostics and debugging information, as the
- source-location info now is passed all the way through the
- compilation process instead of being lost.
-
-\1f
-File: g77.info, Node: Language, Next: Compiler, Prev: Changes, Up: Top
-
-The GNU Fortran Language
-************************
-
- GNU Fortran supports a variety of extensions to, and dialects of,
-the Fortran language. Its primary base is the ANSI FORTRAN 77
-standard, currently available on the network at
-`http://kumo.swcp.com/fortran/F77_std/f77_std.html' or in
-`ftp://ftp.ast.cam.ac.uk/pub/michael/'. It offers some extensions that
-are popular among users of UNIX `f77' and `f2c' compilers, some that
-are popular among users of other compilers (such as Digital products),
-some that are popular among users of the newer Fortran 90 standard, and
-some that are introduced by GNU Fortran.
-
- (If you need a text on Fortran, a few freely available electronic
-references have pointers from `http://www.fortran.com/fortran/Books/'.)
-
- Part of what defines a particular implementation of a Fortran
-system, such as `g77', is the particular characteristics of how it
-supports types, constants, and so on. Much of this is left up to the
-implementation by the various Fortran standards and accepted practice
-in the industry.
-
- The GNU Fortran *language* is described below. Much of the material
-is organized along the same lines as the ANSI FORTRAN 77 standard
-itself.
-
- *Note Other Dialects::, for information on features `g77' supports
-that are not part of the GNU Fortran language.
-
- *Note*: This portion of the documentation definitely needs a lot of
-work!
-
-* Menu:
-
-Relationship to the ANSI FORTRAN 77 standard:
-* Direction of Language Development:: Where GNU Fortran is headed.
-* Standard Support:: Degree of support for the standard.
-
-Extensions to the ANSI FORTRAN 77 standard:
-* Conformance::
-* Notation Used::
-* Terms and Concepts::
-* Characters Lines Sequence::
-* Data Types and Constants::
-* Expressions::
-* Specification Statements::
-* Control Statements::
-* Functions and Subroutines::
-* Scope and Classes of Names::
-
-\1f
-File: g77.info, Node: Direction of Language Development, Next: Standard Support, Up: Language
-
-Direction of Language Development
-=================================
-
- The purpose of the following description of the GNU Fortran language
-is to promote wide portability of GNU Fortran programs.
-
- GNU Fortran is an evolving language, due to the fact that `g77'
-itself is in beta test. Some current features of the language might
-later be redefined as dialects of Fortran supported by `g77' when
-better ways to express these features are added to `g77', for example.
-Such features would still be supported by `g77', but would be available
-only when one or more command-line options were used.
-
- The GNU Fortran *language* is distinct from the GNU Fortran
-*compilation system* (`g77').
-
- For example, `g77' supports various dialects of Fortran--in a sense,
-these are languages other than GNU Fortran--though its primary purpose
-is to support the GNU Fortran language, which also is described in its
-documentation and by its implementation.
-
- On the other hand, non-GNU compilers might offer support for the GNU
-Fortran language, and are encouraged to do so.
-
- Currently, the GNU Fortran language is a fairly fuzzy object. It
-represents something of a cross between what `g77' accepts when
-compiling using the prevailing defaults and what this document
-describes as being part of the language.
-
- Future versions of `g77' are expected to clarify the definition of
-the language in the documentation. Often, this will mean adding new
-features to the language, in the form of both new documentation and new
-support in `g77'. However, it might occasionally mean removing a
-feature from the language itself to "dialect" status. In such a case,
-the documentation would be adjusted to reflect the change, and `g77'
-itself would likely be changed to require one or more command-line
-options to continue supporting the feature.
-
- The development of the GNU Fortran language is intended to strike a
-balance between:
-
- * Serving as a mostly-upwards-compatible language from the de facto
- UNIX Fortran dialect as supported by `f77'.
-
- * Offering new, well-designed language features. Attributes of such
- features include not making existing code any harder to read (for
- those who might be unaware that the new features are not in use)
- and not making state-of-the-art compilers take longer to issue
- diagnostics, among others.
-
- * Supporting existing, well-written code without gratuitously
- rejecting non-standard constructs, regardless of the origin of the
- code (its dialect).
-
- * Offering default behavior and command-line options to reduce and,
- where reasonable, eliminate the need for programmers to make any
- modifications to code that already works in existing production
- environments.
-
- * Diagnosing constructs that have different meanings in different
- systems, languages, and dialects, while offering clear, less
- ambiguous ways to express each of the different meanings so
- programmers can change their code appropriately.
-
- One of the biggest practical challenges for the developers of the
-GNU Fortran language is meeting the sometimes contradictory demands of
-the above items.
-
- For example, a feature might be widely used in one popular
-environment, but the exact same code that utilizes that feature might
-not work as expected--perhaps it might mean something entirely
-different--in another popular environment.
-
- Traditionally, Fortran compilers--even portable ones--have solved
-this problem by simply offering the appropriate feature to users of the
-respective systems. This approach treats users of various Fortran
-systems and dialects as remote "islands", or camps, of programmers, and
-assume that these camps rarely come into contact with each other (or,
-especially, with each other's code).
-
- Project GNU takes a radically different approach to software and
-language design, in that it assumes that users of GNU software do not
-necessarily care what kind of underlying system they are using,
-regardless of whether they are using software (at the user-interface
-level) or writing it (for example, writing Fortran or C code).
-
- As such, GNU users rarely need consider just what kind of underlying
-hardware (or, in many cases, operating system) they are using at any
-particular time. They can use and write software designed for a
-general-purpose, widely portable, heteregenous environment--the GNU
-environment.
-
- In line with this philosophy, GNU Fortran must evolve into a product
-that is widely ported and portable not only in the sense that it can be
-successfully built, installed, and run by users, but in the larger
-sense that its users can use it in the same way, and expect largely the
-same behaviors from it, regardless of the kind of system they are using
-at any particular time.
-
- This approach constrains the solutions `g77' can use to resolve
-conflicts between various camps of Fortran users. If these two camps
-disagree about what a particular construct should mean, `g77' cannot
-simply be changed to treat that particular construct as having one
-meaning without comment (such as a warning), lest the users expecting
-it to have the other meaning are unpleasantly surprised that their code
-misbehaves when executed.
-
- The use of the ASCII backslash character in character constants is
-an excellent (and still somewhat unresolved) example of this kind of
-controversy. *Note Backslash in Constants::. Other examples are
-likely to arise in the future, as `g77' developers strive to improve
-its ability to accept an ever-wider variety of existing Fortran code
-without requiring significant modifications to said code.
-
- Development of GNU Fortran is further constrained by the desire to
-avoid requiring programmers to change their code. This is important
-because it allows programmers, administrators, and others to more
-faithfully evaluate and validate `g77' (as an overall product and as
-new versions are distributed) without having to support multiple
-versions of their programs so that they continue to work the same way
-on their existing systems (non-GNU perhaps, but possibly also earlier
-versions of `g77').
-
-\1f
-File: g77.info, Node: Standard Support, Next: Conformance, Prev: Direction of Language Development, Up: Language
-
-ANSI FORTRAN 77 Standard Support
-================================
-
- GNU Fortran supports ANSI FORTRAN 77 with the following caveats. In
-summary, the only ANSI FORTRAN 77 features `g77' doesn't support are
-those that are probably rarely used in actual code, some of which are
-explicitly disallowed by the Fortran 90 standard.
-
-* Menu:
-
-* No Passing External Assumed-length:: CHAR*(*) CFUNC restriction.
-* No Passing Dummy Assumed-length:: CHAR*(*) CFUNC restriction.
-* No Pathological Implied-DO:: No `((..., I=...), I=...)'.
-* No Useless Implied-DO:: No `(A, I=1, 1)'.
-
-\1f
-File: g77.info, Node: No Passing External Assumed-length, Next: No Passing Dummy Assumed-length, Up: Standard Support
-
-No Passing External Assumed-length
-----------------------------------
-
- `g77' disallows passing of an external procedure as an actual
-argument if the procedure's type is declared `CHARACTER*(*)'. For
-example:
-
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
-It isn't clear whether the standard considers this conforming.
-
-\1f
-File: g77.info, Node: No Passing Dummy Assumed-length, Next: No Pathological Implied-DO, Prev: No Passing External Assumed-length, Up: Standard Support
-
-No Passing Dummy Assumed-length
--------------------------------
-
- `g77' disallows passing of a dummy procedure as an actual argument
-if the procedure's type is declared `CHARACTER*(*)'.
-
- SUBROUTINE BAR(CFUNC)
- CHARACTER*(*) CFUNC
- EXTERNAL CFUNC
- CALL FOO(CFUNC)
- END
-
-It isn't clear whether the standard considers this conforming.
-
-\1f
-File: g77.info, Node: No Pathological Implied-DO, Next: No Useless Implied-DO, Prev: No Passing Dummy Assumed-length, Up: Standard Support
-
-No Pathological Implied-DO
---------------------------
-
- The `DO' variable for an implied-`DO' construct in a `DATA'
-statement may not be used as the `DO' variable for an outer
-implied-`DO' construct. For example, this fragment is disallowed by
-`g77':
-
- DATA ((A(I, I), I= 1, 10), I= 1, 10) /.../
-
-This also is disallowed by Fortran 90, as it offers no additional
-capabilities and would have a variety of possible meanings.
-
- Note that it is *very* unlikely that any production Fortran code
-tries to use this unsupported construct.
-
-\1f
-File: g77.info, Node: No Useless Implied-DO, Prev: No Pathological Implied-DO, Up: Standard Support
-
-No Useless Implied-DO
----------------------
-
- An array element initializer in an implied-`DO' construct in a
-`DATA' statement must contain at least one reference to the `DO'
-variables of each outer implied-`DO' construct. For example, this
-fragment is disallowed by `g77':
-
- DATA (A, I= 1, 1) /1./
-
-This also is disallowed by Fortran 90, as FORTRAN 77's more permissive
-requirements offer no additional capabilities. However, `g77' doesn't
-necessarily diagnose all cases where this requirement is not met.
-
- Note that it is *very* unlikely that any production Fortran code
-tries to use this unsupported construct.
-
-\1f
-File: g77.info, Node: Conformance, Next: Notation Used, Prev: Standard Support, Up: Language
-
-Conformance
-===========
-
- (The following information augments or overrides the information in
-Section 1.4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 1 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- The definition of the GNU Fortran language is akin to that of the
-ANSI FORTRAN 77 language in that it does not generally require
-conforming implementations to diagnose cases where programs do not
-conform to the language.
-
- However, `g77' as a compiler is being developed in a way that is
-intended to enable it to diagnose such cases in an easy-to-understand
-manner.
-
- A program that conforms to the GNU Fortran language should, when
-compiled, linked, and executed using a properly installed `g77' system,
-perform as described by the GNU Fortran language definition. Reasons
-for different behavior include, among others:
-
- * Use of resources (memory--heap, stack, and so on; disk space; CPU
- time; etc.) exceeds those of the system.
-
- * Range and/or precision of calculations required by the program
- exceeds that of the system.
-
- * Excessive reliance on behaviors that are system-dependent
- (non-portable Fortran code).
-
- * Bugs in the program.
-
- * Bug in `g77'.
-
- * Bugs in the system.
-
- Despite these "loopholes", the availability of a clear specification
-of the language of programs submitted to `g77', as this document is
-intended to provide, is considered an important aspect of providing a
-robust, clean, predictable Fortran implementation.
-
- The definition of the GNU Fortran language, while having no special
-legal status, can therefore be viewed as a sort of contract, or
-agreement. This agreement says, in essence, "if you write a program in
-this language, and run it in an environment (such as a `g77' system)
-that supports this language, the program should behave in a largely
-predictable way".
-
-\1f
-File: g77.info, Node: Notation Used, Next: Terms and Concepts, Prev: Conformance, Up: Language
-
-Notation Used in This Chapter
-=============================
-
- (The following information augments or overrides the information in
-Section 1.5 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 1 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- In this chapter, "must" denotes a requirement, "may" denotes
-permission, and "must not" and "may not" denote prohibition. Terms
-such as "might", "should", and "can" generally add little or nothing in
-the way of weight to the GNU Fortran language itself, but are used to
-explain or illustrate the language.
-
- For example:
-
- ``The `FROBNITZ' statement must precede all executable
- statements in a program unit, and may not specify any dummy
- arguments. It may specify local or common variables and arrays.
- Its use should be limited to portions of the program designed to
- be non-portable and system-specific, because it might cause the
- containing program unit to behave quite differently on different
- systems.''
-
- Insofar as the GNU Fortran language is specified, the requirements
-and permissions denoted by the above sample statement are limited to
-the placement of the statement and the kinds of things it may specify.
-The rest of the statement--the content regarding non-portable portions
-of the program and the differing behavior of program units containing
-the `FROBNITZ' statement--does not pertain the GNU Fortran language
-itself. That content offers advice and warnings about the `FROBNITZ'
-statement.
-
- *Remember:* The GNU Fortran language definition specifies both what
-constitutes a valid GNU Fortran program and how, given such a program,
-a valid GNU Fortran implementation is to interpret that program.
-
- It is *not* incumbent upon a valid GNU Fortran implementation to
-behave in any particular way, any consistent way, or any predictable
-way when it is asked to interpret input that is *not* a valid GNU
-Fortran program.
-
- Such input is said to have "undefined" behavior when interpreted by
-a valid GNU Fortran implementation, though an implementation may choose
-to specify behaviors for some cases of inputs that are not valid GNU
-Fortran programs.
-
- Other notation used herein is that of the GNU texinfo format, which
-is used to generate printed hardcopy, on-line hypertext (Info), and
-on-line HTML versions, all from a single source document. This
-notation is used as follows:
-
- * Keywords defined by the GNU Fortran language are shown in
- uppercase, as in: `COMMON', `INTEGER', and `BLOCK DATA'.
-
- Note that, in practice, many Fortran programs are written in
- lowercase--uppercase is used in this manual as a means to readily
- distinguish keywords and sample Fortran-related text from the
- prose in this document.
-
- * Portions of actual sample program, input, or output text look like
- this: `Actual program text'.
-
- Generally, uppercase is used for all Fortran-specific and
- Fortran-related text, though this does not always include literal
- text within Fortran code.
-
- For example: `PRINT *, 'My name is Bob''.
-
- * A metasyntactic variable--that is, a name used in this document to
- serve as a placeholder for whatever text is used by the user or
- programmer-appears as shown in the following example:
-
- "The `INTEGER IVAR' statement specifies that IVAR is a variable or
- array of type `INTEGER'."
-
- In the above example, any valid text may be substituted for the
- metasyntactic variable IVAR to make the statement apply to a
- specific instance, as long as the same text is substituted for
- *both* occurrences of IVAR.
-
- * Ellipses ("...") are used to indicate further text that is either
- unimportant or expanded upon further, elsewhere.
-
- * Names of data types are in the style of Fortran 90, in most cases.
-
- *Note Kind Notation::, for information on the relationship between
- Fortran 90 nomenclature (such as `INTEGER(KIND=1)') and the more
- traditional, less portably concise nomenclature (such as
- `INTEGER*4').
-
-\1f
-File: g77.info, Node: Terms and Concepts, Next: Characters Lines Sequence, Prev: Notation Used, Up: Language
-
-Fortran Terms and Concepts
-==========================
-
- (The following information augments or overrides the information in
-Chapter 2 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 2 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Syntactic Items::
-* Statements Comments Lines::
-* Scope of Names and Labels::
-
-\1f
-File: g77.info, Node: Syntactic Items, Next: Statements Comments Lines, Up: Terms and Concepts
-
-Syntactic Items
----------------
-
- (Corresponds to Section 2.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- In GNU Fortran, a symbolic name is at least one character long, and
-has no arbitrary upper limit on length. However, names of entities
-requiring external linkage (such as external functions, external
-subroutines, and `COMMON' areas) might be restricted to some arbitrary
-length by the system. Such a restriction is no more constrained than
-that of one through six characters.
-
- Underscores (`_') are accepted in symbol names after the first
-character (which must be a letter).
-
-\1f
-File: g77.info, Node: Statements Comments Lines, Next: Scope of Names and Labels, Prev: Syntactic Items, Up: Terms and Concepts
-
-Statements, Comments, and Lines
--------------------------------
-
- (Corresponds to Section 2.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- Use of an exclamation point (`!') to begin a trailing comment (a
-comment that extends to the end of the same source line) is permitted
-under the following conditions:
-
- * The exclamation point does not appear in column 6. Otherwise, it
- is treated as an indicator of a continuation line.
-
- * The exclamation point appears outside a character or hollerith
- constant. Otherwise, the exclamation point is considered part of
- the constant.
-
- * The exclamation point appears to the left of any other possible
- trailing comment. That is, a trailing comment may contain
- exclamation points in their commentary text.
-
- Use of a semicolon (`;') as a statement separator is permitted under
-the following conditions:
-
- * The semicolon appears outside a character or hollerith constant.
- Otherwise, the semicolon is considered part of the constant.
-
- * The semicolon appears to the left of a trailing comment.
- Otherwise, the semicolon is considered part of that comment.
-
- * Neither a logical `IF' statement nor a non-construct `WHERE'
- statement (a Fortran 90 feature) may be followed (in the same,
- possibly continued, line) by a semicolon used as a statement
- separator.
-
- This restriction avoids the confusion that can result when reading
- a line such as:
-
- IF (VALIDP) CALL FOO; CALL BAR
-
- Some readers might think the `CALL BAR' is executed only if
- `VALIDP' is `.TRUE.', while others might assume its execution is
- unconditional.
-
- (At present, `g77' does not diagnose code that violates this
- restriction.)
-
-\1f
-File: g77.info, Node: Scope of Names and Labels, Prev: Statements Comments Lines, Up: Terms and Concepts
-
-Scope of Symbolic Names and Statement Labels
---------------------------------------------
-
- (Corresponds to Section 2.9 of ANSI X3.9-1978 FORTRAN 77.)
-
- Included in the list of entities that have a scope of a program unit
-are construct names (a Fortran 90 feature). *Note Construct Names::,
-for more information.
-
-\1f
-File: g77.info, Node: Characters Lines Sequence, Next: Data Types and Constants, Prev: Terms and Concepts, Up: Language
-
-Characters, Lines, and Execution Sequence
-=========================================
-
- (The following information augments or overrides the information in
-Chapter 3 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 3 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* Character Set::
-* Lines::
-* Continuation Line::
-* Statements::
-* Statement Labels::
-* Order::
-* INCLUDE::
-
-\1f
-File: g77.info, Node: Character Set, Next: Lines, Up: Characters Lines Sequence
-
-GNU Fortran Character Set
--------------------------
-
- (Corresponds to Section 3.1 of ANSI X3.9-1978 FORTRAN 77.)
-
- Letters include uppercase letters (the twenty-six characters of the
-English alphabet) and lowercase letters (their lowercase equivalent).
-Generally, lowercase letters may be used in place of uppercase letters,
-though in character and hollerith constants, they are distinct.
-
- Special characters include:
-
- * Semicolon (`;')
-
- * Exclamation point (`!')
-
- * Double quote (`"')
-
- * Backslash (`\')
-
- * Question mark (`?')
-
- * Hash mark (`#')
-
- * Ampersand (`&')
-
- * Percent sign (`%')
-
- * Underscore (`_')
-
- * Open angle (`<')
-
- * Close angle (`>')
-
- * The FORTRAN 77 special characters (<SPC>, `=', `+', `-', `*', `/',
- `(', `)', `,', `.', `$', `'', and `:')
-
- Note that this document refers to <SPC> as "space", while X3.9-1978
-FORTRAN 77 refers to it as "blank".
-
-\1f
-File: g77.info, Node: Lines, Next: Continuation Line, Prev: Character Set, Up: Characters Lines Sequence
-
-Lines
------
-
- (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- The way a Fortran compiler views source files depends entirely on the
-implementation choices made for the compiler, since those choices are
-explicitly left to the implementation by the published Fortran
-standards.
-
- The GNU Fortran language mandates a view applicable to UNIX-like
-text files--files that are made up of an arbitrary number of lines,
-each with an arbitrary number of characters (sometimes called
-stream-based files).
-
- This view does not apply to types of files that are specified as
-having a particular number of characters on every single line (sometimes
-referred to as record-based files).
-
- Because a "line in a program unit is a sequence of 72 characters",
-to quote X3.9-1978, the GNU Fortran language specifies that a
-stream-based text file is translated to GNU Fortran lines as follows:
-
- * A newline in the file is the character that represents the end of
- a line of text to the underlying system. For example, on
- ASCII-based systems, a newline is the <NL> character, which has
- ASCII value 12 (decimal).
-
- * Each newline in the file serves to end the line of text that
- precedes it (and that does not contain a newline).
-
- * The end-of-file marker (`EOF') also serves to end the line of text
- that precedes it (and that does not contain a newline).
-
- * Any line of text that is shorter than 72 characters is padded to
- that length with spaces (called "blanks" in the standard).
-
- * Any line of text that is longer than 72 characters is truncated to
- that length, but the truncated remainder must consist entirely of
- spaces.
-
- * Characters other than newline and the GNU Fortran character set
- are invalid.
-
- For the purposes of the remainder of this description of the GNU
-Fortran language, the translation described above has already taken
-place, unless otherwise specified.
-
- The result of the above translation is that the source file appears,
-in terms of the remainder of this description of the GNU Fortran
-language, as if it had an arbitrary number of 72-character lines, each
-character being among the GNU Fortran character set.
-
- For example, if the source file itself has two newlines in a row,
-the second newline becomes, after the above translation, a single line
-containing 72 spaces.
-
-\1f
-File: g77.info, Node: Continuation Line, Next: Statements, Prev: Lines, Up: Characters Lines Sequence
-
-Continuation Line
------------------
-
- (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- A continuation line is any line that both
-
- * Contains a continuation character, and
-
- * Contains only spaces in columns 1 through 5
-
- A continuation character is any character of the GNU Fortran
-character set other than space (<SPC>) or zero (`0') in column 6, or a
-digit (`0' through `9') in column 7 through 72 of a line that has only
-spaces to the left of that digit.
-
- The continuation character is ignored as far as the content of the
-statement is concerned.
-
- The GNU Fortran language places no limit on the number of
-continuation lines in a statement. In practice, the limit depends on a
-variety of factors, such as available memory, statement content, and so
-on, but no GNU Fortran system may impose an arbitrary limit.
-
-\1f
-File: g77.info, Node: Statements, Next: Statement Labels, Prev: Continuation Line, Up: Characters Lines Sequence
-
-Statements
-----------
-
- (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- Statements may be written using an arbitrary number of continuation
-lines.
-
- Statements may be separated using the semicolon (`;'), except that
-the logical `IF' and non-construct `WHERE' statements may not be
-separated from subsequent statements using only a semicolon as
-statement separator.
-
- The `END PROGRAM', `END SUBROUTINE', `END FUNCTION', and `END BLOCK
-DATA' statements are alternatives to the `END' statement. These
-alternatives may be written as normal statements--they are not subject
-to the restrictions of the `END' statement.
-
- However, no statement other than `END' may have an initial line that
-appears to be an `END' statement--even `END PROGRAM', for example, must
-not be written as:
-
- END
- &PROGRAM
-
-\1f
-File: g77.info, Node: Statement Labels, Next: Order, Prev: Statements, Up: Characters Lines Sequence
-
-Statement Labels
-----------------
-
- (Corresponds to Section 3.4 of ANSI X3.9-1978 FORTRAN 77.)
-
- A statement separated from its predecessor via a semicolon may be
-labeled as follows:
-
- * The semicolon is followed by the label for the statement, which in
- turn follows the label.
-
- * The label must be no more than five digits in length.
-
- * The first digit of the label for the statement is not the first
- non-space character on a line. Otherwise, that character is
- treated as a continuation character.
-
- A statement may have only one label defined for it.
-
-\1f
-File: g77.info, Node: Order, Next: INCLUDE, Prev: Statement Labels, Up: Characters Lines Sequence
-
-Order of Statements and Lines
------------------------------
-
- (Corresponds to Section 3.5 of ANSI X3.9-1978 FORTRAN 77.)
-
- Generally, `DATA' statements may precede executable statements.
-However, specification statements pertaining to any entities
-initialized by a `DATA' statement must precede that `DATA' statement.
-For example, after `DATA I/1/', `INTEGER I' is not permitted, but
-`INTEGER J' is permitted.
-
- The last line of a program unit may be an `END' statement, or may be:
-
- * An `END PROGRAM' statement, if the program unit is a main program.
-
- * An `END SUBROUTINE' statement, if the program unit is a subroutine.
-
- * An `END FUNCTION' statement, if the program unit is a function.
-
- * An `END BLOCK DATA' statement, if the program unit is a block data.
-
-\1f
-File: g77.info, Node: INCLUDE, Prev: Order, Up: Characters Lines Sequence
-
-Including Source Text
----------------------
-
- Additional source text may be included in the processing of the
-source file via the `INCLUDE' directive:
-
- INCLUDE FILENAME
-
-The source text to be included is identified by FILENAME, which is a
-literal GNU Fortran character constant. The meaning and interpretation
-of FILENAME depends on the implementation, but typically is a filename.
-
- (`g77' treats it as a filename that it searches for in the current
-directory and/or directories specified via the `-I' command-line
-option.)
-
- The effect of the `INCLUDE' directive is as if the included text
-directly replaced the directive in the source file prior to
-interpretation of the program. Included text may itself use `INCLUDE'.
-The depth of nested `INCLUDE' references depends on the implementation,
-but typically is a positive integer.
-
- This virtual replacement treats the statements and `INCLUDE'
-directives in the included text as syntactically distinct from those in
-the including text.
-
- Therefore, the first non-comment line of the included text must not
-be a continuation line. The included text must therefore have, after
-the non-comment lines, either an initial line (statement), an `INCLUDE'
-directive, or nothing (the end of the included text).
-
- Similarly, the including text may end the `INCLUDE' directive with a
-semicolon or the end of the line, but it cannot follow an `INCLUDE'
-directive at the end of its line with a continuation line. Thus, the
-last statement in an included text may not be continued.
-
- Any statements between two `INCLUDE' directives on the same line are
-treated as if they appeared in between the respective included texts.
-For example:
-
- INCLUDE 'A'; PRINT *, 'B'; INCLUDE 'C'; END PROGRAM
-
-If the text included by `INCLUDE 'A'' constitutes a `PRINT *, 'A''
-statement and the text included by `INCLUDE 'C'' constitutes a `PRINT
-*, 'C'' statement, then the output of the above sample program would be
-
- A
- B
- C
-
-(with suitable allowances for how an implementation defines its
-handling of output).
-
- Included text must not include itself directly or indirectly,
-regardless of whether the FILENAME used to reference the text is the
-same.
-
- Note that `INCLUDE' is *not* a statement. As such, it is neither a
-non-executable or executable statement. However, if the text it
-includes constitutes one or more executable statements, then the
-placement of `INCLUDE' is subject to effectively the same restrictions
-as those on executable statements.
-
- An `INCLUDE' directive may be continued across multiple lines as if
-it were a statement. This permits long names to be used for FILENAME.
-
-\1f
-File: g77.info, Node: Data Types and Constants, Next: Expressions, Prev: Characters Lines Sequence, Up: Language
-
-Data Types and Constants
-========================
-
- (The following information augments or overrides the information in
-Chapter 4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 4 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
- To more concisely express the appropriate types for entities, this
-document uses the more concise Fortran 90 nomenclature such as
-`INTEGER(KIND=1)' instead of the more traditional, but less portably
-concise, byte-size-based nomenclature such as `INTEGER*4', wherever
-reasonable.
-
- When referring to generic types--in contexts where the specific
-precision and range of a type are not important--this document uses the
-generic type names `INTEGER', `LOGICAL', `REAL', `COMPLEX', and
-`CHARACTER'.
-
- In some cases, the context requires specification of a particular
-type. This document uses the `KIND=' notation to accomplish this
-throughout, sometimes supplying the more traditional notation for
-clarification, though the traditional notation might not work the same
-way on all GNU Fortran implementations.
-
- Use of `KIND=' makes this document more concise because `g77' is
-able to define values for `KIND=' that have the same meanings on all
-systems, due to the way the Fortran 90 standard specifies these values
-are to be used.
-
- (In particular, that standard permits an implementation to
-arbitrarily assign nonnegative values. There are four distinct sets of
-assignments: one to the `CHARACTER' type; one to the `INTEGER' type;
-one to the `LOGICAL' type; and the fourth to both the `REAL' and
-`COMPLEX' types. Implementations are free to assign these values in
-any order, leave gaps in the ordering of assignments, and assign more
-than one value to a representation.)
-
- This makes `KIND=' values superior to the values used in
-non-standard statements such as `INTEGER*4', because the meanings of
-the values in those statements vary from machine to machine, compiler
-to compiler, even operating system to operating system.
-
- However, use of `KIND=' is *not* generally recommended when writing
-portable code (unless, for example, the code is going to be compiled
-only via `g77', which is a widely ported compiler). GNU Fortran does
-not yet have adequate language constructs to permit use of `KIND=' in a
-fashion that would make the code portable to Fortran 90
-implementations; and, this construct is known to *not* be accepted by
-many popular FORTRAN 77 implementations, so it cannot be used in code
-that is to be ported to those.
-
- The distinction here is that this document is able to use specific
-values for `KIND=' to concisely document the types of various
-operations and operands.
-
- A Fortran program should use the FORTRAN 77 designations for the
-appropriate GNU Fortran types--such as `INTEGER' for `INTEGER(KIND=1)',
-`REAL' for `REAL(KIND=1)', and `DOUBLE COMPLEX' for
-`COMPLEX(KIND=2)'--and, where no such designations exist, make use of
-appropriate techniques (preprocessor macros, parameters, and so on) to
-specify the types in a fashion that may be easily adjusted to suit each
-particular implementation to which the program is ported. (These types
-generally won't need to be adjusted for ports of `g77'.)
-
- Further details regarding GNU Fortran data types and constants are
-provided below.
-
-* Menu:
-
-* Types::
-* Constants::
-* Integer Type::
-* Character Type::
-
-\1f
-File: g77.info, Node: Types, Next: Constants, Up: Data Types and Constants
-
-Data Types
-----------
-
- (Corresponds to Section 4.1 of ANSI X3.9-1978 FORTRAN 77.)
-
- GNU Fortran supports these types:
-
- 1. Integer (generic type `INTEGER')
-
- 2. Real (generic type `REAL')
-
- 3. Double precision
-
- 4. Complex (generic type `COMPLEX')
-
- 5. Logical (generic type `LOGICAL')
-
- 6. Character (generic type `CHARACTER')
-
- 7. Double Complex
-
- (The types numbered 1 through 6 above are standard FORTRAN 77 types.)
-
- The generic types shown above are referred to in this document using
-only their generic type names. Such references usually indicate that
-any specific type (kind) of that generic type is valid.
-
- For example, a context described in this document as accepting the
-`COMPLEX' type also is likely to accept the `DOUBLE COMPLEX' type.
-
- The GNU Fortran language supports three ways to specify a specific
-kind of a generic type.
-
-* Menu:
-
-* Double Notation:: As in `DOUBLE COMPLEX'.
-* Star Notation:: As in `INTEGER*4'.
-* Kind Notation:: As in `INTEGER(KIND=1)'.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Double Notation, Next: Star Notation, Up: Types
-
-Double Notation
-...............
-
- The GNU Fortran language supports two uses of the keyword `DOUBLE'
-to specify a specific kind of type:
-
- * `DOUBLE PRECISION', equivalent to `REAL(KIND=2)'
-
- * `DOUBLE COMPLEX', equivalent to `COMPLEX(KIND=2)'
-
- Use one of the above forms where a type name is valid.
-
- While use of this notation is popular, it doesn't scale well in a
-language or dialect rich in intrinsic types, as is the case for the GNU
-Fortran language (especially planned future versions of it).
-
- After all, one rarely sees type names such as `DOUBLE INTEGER',
-`QUADRUPLE REAL', or `QUARTER INTEGER'. Instead, `INTEGER*8',
-`REAL*16', and `INTEGER*1' often are substituted for these,
-respectively, even though they do not always have the same meanings on
-all systems. (And, the fact that `DOUBLE REAL' does not exist as such
-is an inconsistency.)
-
- Therefore, this document uses "double notation" only on occasion for
-the benefit of those readers who are accustomed to it.
-
-\1f
-File: g77.info, Node: Star Notation, Next: Kind Notation, Prev: Double Notation, Up: Types
-
-Star Notation
-.............
-
- The following notation specifies the storage size for a type:
-
- GENERIC-TYPE*N
-
-GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
-`COMPLEX', `LOGICAL', or `CHARACTER'. N must be one or more digits
-comprising a decimal integer number greater than zero.
-
- Use the above form where a type name is valid.
-
- The `*N' notation specifies that the amount of storage occupied by
-variables and array elements of that type is N times the storage
-occupied by a `CHARACTER*1' variable.
-
- This notation might indicate a different degree of precision and/or
-range for such variables and array elements, and the functions that
-return values of types using this notation. It does not limit the
-precision or range of values of that type in any particular way--use
-explicit code to do that.
-
- Further, the GNU Fortran language requires no particular values for
-N to be supported by an implementation via the `*N' notation. `g77'
-supports `INTEGER*1' (as `INTEGER(KIND=3)') on all systems, for example,
-but not all implementations are required to do so, and `g77' is known
-to not support `REAL*1' on most (or all) systems.
-
- As a result, except for GENERIC-TYPE of `CHARACTER', uses of this
-notation should be limited to isolated portions of a program that are
-intended to handle system-specific tasks and are expected to be
-non-portable.
-
- (Standard FORTRAN 77 supports the `*N' notation for only
-`CHARACTER', where it signifies not only the amount of storage
-occupied, but the number of characters in entities of that type.
-However, almost all Fortran compilers have supported this notation for
-generic types, though with a variety of meanings for N.)
-
- Specifications of types using the `*N' notation always are
-interpreted as specifications of the appropriate types described in
-this document using the `KIND=N' notation, described below.
-
- While use of this notation is popular, it doesn't serve well in the
-context of a widely portable dialect of Fortran, such as the GNU
-Fortran language.
-
- For example, even on one particular machine, two or more popular
-Fortran compilers might well disagree on the size of a type declared
-`INTEGER*2' or `REAL*16'. Certainly there is known to be disagreement
-over such things among Fortran compilers on *different* systems.
-
- Further, this notation offers no elegant way to specify sizes that
-are not even multiples of the "byte size" typically designated by
-`INTEGER*1'. Use of "absurd" values (such as `INTEGER*1000') would
-certainly be possible, but would perhaps be stretching the original
-intent of this notation beyond the breaking point in terms of
-widespread readability of documentation and code making use of it.
-
- Therefore, this document uses "star notation" only on occasion for
-the benefit of those readers who are accustomed to it.
-
-\1f
-File: g77.info, Node: Kind Notation, Prev: Star Notation, Up: Types
-
-Kind Notation
-.............
-
- The following notation specifies the kind-type selector of a type:
-
- GENERIC-TYPE(KIND=N)
-
-Use the above form where a type name is valid.
-
- GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
-`COMPLEX', `LOGICAL', or `CHARACTER'. N must be an integer
-initialization expression that is a positive, nonzero value.
-
- Programmers are discouraged from writing these values directly into
-their code. Future versions of the GNU Fortran language will offer
-facilities that will make the writing of code portable to `g77' *and*
-Fortran 90 implementations simpler.
-
- However, writing code that ports to existing FORTRAN 77
-implementations depends on avoiding the `KIND=' construct.
-
- The `KIND=' construct is thus useful in the context of GNU Fortran
-for two reasons:
-
- * It provides a means to specify a type in a fashion that is
- portable across all GNU Fortran implementations (though not other
- FORTRAN 77 and Fortran 90 implementations).
-
- * It provides a sort of Rosetta stone for this document to use to
- concisely describe the types of various operations and operands.
-
- The values of N in the GNU Fortran language are assigned using a
-scheme that:
-
- * Attempts to maximize the ability of readers of this document to
- quickly familiarize themselves with assignments for popular types
-
- * Provides a unique value for each specific desired meaning
-
- * Provides a means to automatically assign new values so they have a
- "natural" relationship to existing values, if appropriate, or, if
- no such relationship exists, will not interfere with future values
- assigned on the basis of such relationships
-
- * Avoids using values that are similar to values used in the
- existing, popular `*N' notation, to prevent readers from expecting
- that these implied correspondences work on all GNU Fortran
- implementations
-
- The assignment system accomplishes this by assigning to each
-"fundamental meaning" of a specific type a unique prime number.
-Combinations of fundamental meanings--for example, a type that is two
-times the size of some other type--are assigned values of N that are
-the products of the values for those fundamental meanings.
-
- A prime value of N is never given more than one fundamental meaning,
-to avoid situations where some code or system cannot reasonably provide
-those meanings in the form of a single type.
-
- The values of N assigned so far are:
-
-`KIND=0'
- This value is reserved for future use.
-
- The planned future use is for this value to designate, explicitly,
- context-sensitive kind-type selection. For example, the
- expression `1D0 * 0.1_0' would be equivalent to `1D0 * 0.1D0'.
-
-`KIND=1'
- This corresponds to the default types for `REAL', `INTEGER',
- `LOGICAL', `COMPLEX', and `CHARACTER', as appropriate.
-
- These are the "default" types described in the Fortran 90 standard,
- though that standard does not assign any particular `KIND=' value
- to these types.
-
- (Typically, these are `REAL*4', `INTEGER*4', `LOGICAL*4', and
- `COMPLEX*8'.)
-
-`KIND=2'
- This corresponds to types that occupy twice as much storage as the
- default types. `REAL(KIND=2)' is `DOUBLE PRECISION' (typically
- `REAL*8'), `COMPLEX(KIND=2)' is `DOUBLE COMPLEX' (typically
- `COMPLEX*16'),
-
- These are the "double precision" types described in the Fortran 90
- standard, though that standard does not assign any particular
- `KIND=' value to these types.
-
- N of 4 thus corresponds to types that occupy four times as much
- storage as the default types, N of 8 to types that occupy eight
- times as much storage, and so on.
-
- The `INTEGER(KIND=2)' and `LOGICAL(KIND=2)' types are not
- necessarily supported by every GNU Fortran implementation.
-
-`KIND=3'
- This corresponds to types that occupy as much storage as the
- default `CHARACTER' type, which is the same effective type as
- `CHARACTER(KIND=1)' (making that type effectively the same as
- `CHARACTER(KIND=3)').
-
- (Typically, these are `INTEGER*1' and `LOGICAL*1'.)
-
- N of 6 thus corresponds to types that occupy twice as much storage
- as the N=3 types, N of 12 to types that occupy four times as much
- storage, and so on.
-
- These are not necessarily supported by every GNU Fortran
- implementation.
-
-`KIND=5'
- This corresponds to types that occupy half the storage as the
- default (N=1) types.
-
- (Typically, these are `INTEGER*2' and `LOGICAL*2'.)
-
- N of 25 thus corresponds to types that occupy one-quarter as much
- storage as the default types.
-
- These are not necessarily supported by every GNU Fortran
- implementation.
-
-`KIND=7'
- This is valid only as `INTEGER(KIND=7)' and denotes the `INTEGER'
- type that has the smallest storage size that holds a pointer on
- the system.
-
- A pointer representable by this type is capable of uniquely
- addressing a `CHARACTER*1' variable, array, array element, or
- substring.
-
- (Typically this is equivalent to `INTEGER*4' or, on 64-bit
- systems, `INTEGER*8'. In a compatible C implementation, it
- typically would be the same size and semantics of the C type `void
- *'.)
-
- Note that these are *proposed* correspondences and might change in
-future versions of `g77'--avoid writing code depending on them while
-`g77', and therefore the GNU Fortran language it defines, is in beta
-testing.
-
- Values not specified in the above list are reserved to future
-versions of the GNU Fortran language.
-
- Implementation-dependent meanings will be assigned new, unique prime
-numbers so as to not interfere with other implementation-dependent
-meanings, and offer the possibility of increasing the portability of
-code depending on such types by offering support for them in other GNU
-Fortran implementations.
-
- Other meanings that might be given unique values are:
-
- * Types that make use of only half their storage size for
- representing precision and range.
-
- For example, some compilers offer options that cause `INTEGER'
- types to occupy the amount of storage that would be needed for
- `INTEGER(KIND=2)' types, but the range remains that of
- `INTEGER(KIND=1)'.
-
- * The IEEE single floating-point type.
-
- * Types with a specific bit pattern (endianness), such as the
- little-endian form of `INTEGER(KIND=1)'. These could permit,
- conceptually, use of portable code and implementations on data
- files written by existing systems.
-
- Future *prime* numbers should be given meanings in as incremental a
-fashion as possible, to allow for flexibility and expressiveness in
-combining types.
-
- For example, instead of defining a prime number for little-endian
-IEEE doubles, one prime number might be assigned the meaning
-"little-endian", another the meaning "IEEE double", and the value of N
-for a little-endian IEEE double would thus naturally be the product of
-those two respective assigned values. (It could even be reasonable to
-have IEEE values result from the products of prime values denoting
-exponent and fraction sizes and meanings, hidden bit usage,
-availability and representations of special values such as subnormals,
-infinities, and Not-A-Numbers (NaNs), and so on.)
-
- This assignment mechanism, while not inherently required for future
-versions of the GNU Fortran language, is worth using because it could
-ease management of the "space" of supported types much easier in the
-long run.
-
- The above approach suggests a mechanism for specifying inheritance
-of intrinsic (built-in) types for an entire, widely portable product
-line. It is certainly reasonable that, unlike programmers of other
-languages offering inheritance mechanisms that employ verbose names for
-classes and subclasses, along with graphical browsers to elucidate the
-relationships, Fortran programmers would employ a mechanism that works
-by multiplying prime numbers together and finding the prime factors of
-such products.
-
- Most of the advantages for the above scheme have been explained
-above. One disadvantage is that it could lead to the defining, by the
-GNU Fortran language, of some fairly large prime numbers. This could
-lead to the GNU Fortran language being declared "munitions" by the
-United States Department of Defense.
-
-\1f
-File: g77.info, Node: Constants, Next: Integer Type, Prev: Types, Up: Data Types and Constants
-
-Constants
----------
-
- (Corresponds to Section 4.2 of ANSI X3.9-1978 FORTRAN 77.)
-
- A "typeless constant" has one of the following forms:
-
- 'BINARY-DIGITS'B
- 'OCTAL-DIGITS'O
- 'HEXADECIMAL-DIGITS'Z
- 'HEXADECIMAL-DIGITS'X
-
-BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
-strings of characters in the set `01', `01234567', and
-`0123456789ABCDEFabcdef', respectively. (The value for `A' (and `a')
-is 10, for `B' and `b' is 11, and so on.)
-
- Typeless constants have values that depend on the context in which
-they are used.
-
- All other constants, called "typed constants", are
-interpreted--converted to internal form--according to their inherent
-type. Thus, context is *never* a determining factor for the type, and
-hence the interpretation, of a typed constant. (All constants in the
-ANSI FORTRAN 77 language are typed constants.)
-
- For example, `1' is always type `INTEGER(KIND=1)' in GNU Fortran
-(called default INTEGER in Fortran 90), `9.435784839284958' is always
-type `REAL(KIND=1)' (even if the additional precision specified is
-lost, and even when used in a `REAL(KIND=2)' context), `1E0' is always
-type `REAL(KIND=2)', and `1D0' is always type `REAL(KIND=2)'.
-
-\1f
-File: g77.info, Node: Integer Type, Next: Character Type, Prev: Constants, Up: Data Types and Constants
-
-Integer Type
-------------
-
- (Corresponds to Section 4.3 of ANSI X3.9-1978 FORTRAN 77.)
-
- An integer constant also may have one of the following forms:
-
- B'BINARY-DIGITS'
- O'OCTAL-DIGITS'
- Z'HEXADECIMAL-DIGITS'
- X'HEXADECIMAL-DIGITS'
-
-BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
-strings of characters in the set `01', `01234567', and
-`0123456789ABCDEFabcdef', respectively. (The value for `A' (and `a')
-is 10, for `B' and `b' is 11, and so on.)
-
-\1f
-File: g77.info, Node: Character Type, Prev: Integer Type, Up: Data Types and Constants
-
-Character Type
---------------
-
- (Corresponds to Section 4.8 of ANSI X3.9-1978 FORTRAN 77.)
-
- A character constant may be delimited by a pair of double quotes
-(`"') instead of apostrophes. In this case, an apostrophe within the
-constant represents a single apostrophe, while a double quote is
-represented in the source text of the constant by two consecutive double
-quotes with no intervening spaces.
-
- A character constant may be empty (have a length of zero).
-
- A character constant may include a substring specification, The
-value of such a constant is the value of the substring--for example,
-the value of `'hello'(3:5)' is the same as the value of `'llo''.
-
-\1f
-File: g77.info, Node: Expressions, Next: Specification Statements, Prev: Data Types and Constants, Up: Language
-
-Expressions
-===========
-
- (The following information augments or overrides the information in
-Chapter 6 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 6 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* %LOC()::
-
-\1f
-File: g77.info, Node: %LOC(), Up: Expressions
-
-The `%LOC()' Construct
-----------------------
-
- %LOC(ARG)
-
- The `%LOC()' construct is an expression that yields the value of the
-location of its argument, ARG, in memory. The size of the type of the
-expression depends on the system--typically, it is equivalent to either
-`INTEGER(KIND=1)' or `INTEGER(KIND=2)', though it is actually type
-`INTEGER(KIND=7)'.
-
- The argument to `%LOC()' must be suitable as the left-hand side of
-an assignment statement. That is, it may not be a general expression
-involving operators such as addition, subtraction, and so on, nor may
-it be a constant.
-
- Use of `%LOC()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions that deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%LOC()' returning a pointer that can be safely
-used to *define* (change) the argument. While this might work in some
-circumstances, it is hard to predict whether it will continue to work
-when a program (that works using this unsafe behavior) is recompiled
-using different command-line options or a different version of `g77'.
-
- Generally, `%LOC()' is safe when used as an argument to a procedure
-that makes use of the value of the corresponding dummy argument only
-during its activation, and only when such use is restricted to
-referencing (reading) the value of the argument to `%LOC()'.
-
- *Implementation Note:* Currently, `g77' passes arguments (those not
-passed using a construct such as `%VAL()') by reference or descriptor,
-depending on the type of the actual argument. Thus, given `INTEGER I',
-`CALL FOO(I)' would seem to mean the same thing as `CALL FOO(%LOC(I))',
-and in fact might compile to identical code.
-
- However, `CALL FOO(%LOC(I))' emphatically means "pass the address of
-`I' in memory". While `CALL FOO(I)' might use that same approach in a
-particular version of `g77', another version or compiler might choose a
-different implementation, such as copy-in/copy-out, to effect the
-desired behavior--and which will therefore not necessarily compile to
-the same code as would `CALL FOO(%LOC(I))' using the same version or
-compiler.
-
- *Note Debugging and Interfacing::, for detailed information on how
-this particular version of `g77' implements various constructs.
-
-\1f
-File: g77.info, Node: Specification Statements, Next: Control Statements, Prev: Expressions, Up: Language
-
-Specification Statements
-========================
-
- (The following information augments or overrides the information in
-Chapter 8 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 8 of that document otherwise serves as the basis for
-the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* NAMELIST::
-* DOUBLE COMPLEX::
-
-\1f
-File: g77.info, Node: NAMELIST, Next: DOUBLE COMPLEX, Up: Specification Statements
-
-`NAMELIST' Statement
---------------------
-
- The `NAMELIST' statement, and related I/O constructs, are supported
-by the GNU Fortran language in essentially the same way as they are by
-`f2c'.
-
-\1f
-File: g77.info, Node: DOUBLE COMPLEX, Prev: NAMELIST, Up: Specification Statements
-
-`DOUBLE COMPLEX' Statement
---------------------------
-
- `DOUBLE COMPLEX' is a type-statement (and type) that specifies the
-type `COMPLEX(KIND=2)' in GNU Fortran.
-
-\1f
-File: g77.info, Node: Control Statements, Next: Functions and Subroutines, Prev: Specification Statements, Up: Language
-
-Control Statements
-==================
-
- (The following information augments or overrides the information in
-Chapter 11 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 11 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* DO WHILE::
-* END DO::
-* Construct Names::
-* CYCLE and EXIT::
-
-\1f
-File: g77.info, Node: DO WHILE, Next: END DO, Up: Control Statements
-
-DO WHILE
---------
-
- The `DO WHILE' statement, a feature of both the MIL-STD 1753 and
-Fortran 90 standards, is provided by the GNU Fortran language.
-
-\1f
-File: g77.info, Node: END DO, Next: Construct Names, Prev: DO WHILE, Up: Control Statements
-
-END DO
-------
-
- The `END DO' statement is provided by the GNU Fortran language.
-
- This statement is used in one of two ways:
-
- * The Fortran 90 meaning, in which it specifies the termination
- point of a single `DO' loop started with a `DO' statement that
- specifies no termination label.
-
- * The MIL-STD 1753 meaning, in which it specifies the termination
- point of one or more `DO' loops, all of which start with a `DO'
- statement that specify the label defined for the `END DO'
- statement.
-
- This kind of `END DO' statement is merely a synonym for
- `CONTINUE', except it is permitted only when the statement is
- labeled and a target of one or more labeled `DO' loops.
-
- It is expected that this use of `END DO' will be removed from the
- GNU Fortran language in the future, though it is likely that it
- will long be supported by `g77' as a dialect form.
-
-\1f
-File: g77.info, Node: Construct Names, Next: CYCLE and EXIT, Prev: END DO, Up: Control Statements
-
-Construct Names
----------------
-
- The GNU Fortran language supports construct names as defined by the
-Fortran 90 standard. These names are local to the program unit and are
-defined as follows:
-
- CONSTRUCT-NAME: BLOCK-STATEMENT
-
-Here, CONSTRUCT-NAME is the construct name itself; its definition is
-connoted by the single colon (`:'); and BLOCK-STATEMENT is an `IF',
-`DO', or `SELECT CASE' statement that begins a block.
-
- A block that is given a construct name must also specify the same
-construct name in its termination statement:
-
- END BLOCK CONSTRUCT-NAME
-
-Here, BLOCK must be `IF', `DO', or `SELECT', as appropriate.
-
-\1f
-File: g77.info, Node: CYCLE and EXIT, Prev: Construct Names, Up: Control Statements
-
-The `CYCLE' and `EXIT' Statements
----------------------------------
-
- The `CYCLE' and `EXIT' statements specify that the remaining
-statements in the current iteration of a particular active (enclosing)
-`DO' loop are to be skipped.
-
- `CYCLE' specifies that these statements are skipped, but the `END
-DO' statement that marks the end of the `DO' loop be executed--that is,
-the next iteration, if any, is to be started. If the statement marking
-the end of the `DO' loop is not `END DO'--in other words, if the loop
-is not a block `DO'--the `CYCLE' statement does not execute that
-statement, but does start the next iteration (if any).
-
- `EXIT' specifies that the loop specified by the `DO' construct is
-terminated.
-
- The `DO' loop affected by `CYCLE' and `EXIT' is the innermost
-enclosing `DO' loop when the following forms are used:
-
- CYCLE
- EXIT
-
- Otherwise, the following forms specify the construct name of the
-pertinent `DO' loop:
-
- CYCLE CONSTRUCT-NAME
- EXIT CONSTRUCT-NAME
-
- `CYCLE' and `EXIT' can be viewed as glorified `GO TO' statements.
-However, they cannot be easily thought of as `GO TO' statements in
-obscure cases involving FORTRAN 77 loops. For example:
-
- DO 10 I = 1, 5
- DO 10 J = 1, 5
- IF (J .EQ. 5) EXIT
- DO 10 K = 1, 5
- IF (K .EQ. 3) CYCLE
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- 20 CONTINUE
-
-In particular, neither the `EXIT' nor `CYCLE' statements above are
-equivalent to a `GO TO' statement to either label `10' or `20'.
-
- To understand the effect of `CYCLE' and `EXIT' in the above
-fragment, it is helpful to first translate it to its equivalent using
-only block `DO' loops:
-
- DO I = 1, 5
- DO J = 1, 5
- IF (J .EQ. 5) EXIT
- DO K = 1, 5
- IF (K .EQ. 3) CYCLE
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- END DO
- END DO
- END DO
- 20 CONTINUE
-
- Adding new labels allows translation of `CYCLE' and `EXIT' to `GO
-TO' so they may be more easily understood by programmers accustomed to
-FORTRAN coding:
-
- DO I = 1, 5
- DO J = 1, 5
- IF (J .EQ. 5) GOTO 18
- DO K = 1, 5
- IF (K .EQ. 3) GO TO 12
- 10 PRINT *, 'I=', I, ' J=', J, ' K=', K
- 12 END DO
- END DO
- 18 END DO
- 20 CONTINUE
-
-Thus, the `CYCLE' statement in the innermost loop skips over the
-`PRINT' statement as it begins the next iteration of the loop, while
-the `EXIT' statement in the middle loop ends that loop but *not* the
-outermost loop.
-
-\1f
-File: g77.info, Node: Functions and Subroutines, Next: Scope and Classes of Names, Prev: Control Statements, Up: Language
-
-Functions and Subroutines
-=========================
-
- (The following information augments or overrides the information in
-Chapter 15 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
-language. Chapter 15 of that document otherwise serves as the basis
-for the relevant aspects of GNU Fortran.)
-
-* Menu:
-
-* %VAL()::
-* %REF()::
-* %DESCR()::
-* Generics and Specifics::
-* REAL() and AIMAG() of Complex::
-* CMPLX() of DOUBLE PRECISION::
-* MIL-STD 1753::
-* f77/f2c Intrinsics::
-* Table of Intrinsic Functions::
-
-\1f
-File: g77.info, Node: %VAL(), Next: %REF(), Up: Functions and Subroutines
-
-The `%VAL()' Construct
-----------------------
-
- %VAL(ARG)
-
- The `%VAL()' construct specifies that an argument, ARG, is to be
-passed by value, instead of by reference or descriptor.
-
- `%VAL()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%VAL()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- *Implementation Note:* Currently, `g77' passes all arguments either
-by reference or by descriptor.
-
- Thus, use of `%VAL()' tends to be restricted to cases where the
-called procedure is written in a language other than Fortran that
-supports call-by-value semantics. (C is an example of such a language.)
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-\1f
-File: g77.info, Node: %REF(), Next: %DESCR(), Prev: %VAL(), Up: Functions and Subroutines
-
-The `%REF()' Construct
-----------------------
-
- %REF(ARG)
-
- The `%REF()' construct specifies that an argument, ARG, is to be
-passed by reference, instead of by value or descriptor.
-
- `%REF()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%REF()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%REF()' supplying a pointer to the procedure being
-invoked. While that is a likely implementation choice, other
-implementation choices are available that preserve Fortran
-pass-by-reference semantics without passing a pointer to the argument,
-ARG. (For example, a copy-in/copy-out implementation.)
-
- *Implementation Note:* Currently, `g77' passes all arguments (other
-than variables and arrays of type `CHARACTER') by reference. Future
-versions of, or dialects supported by, `g77' might not pass `CHARACTER'
-functions by reference.
-
- Thus, use of `%REF()' tends to be restricted to cases where ARG is
-type `CHARACTER' but the called procedure accesses it via a means other
-than the method used for Fortran `CHARACTER' arguments.
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-\1f
-File: g77.info, Node: %DESCR(), Next: Generics and Specifics, Prev: %REF(), Up: Functions and Subroutines
-
-The `%DESCR()' Construct
-------------------------
-
- %DESCR(ARG)
-
- The `%DESCR()' construct specifies that an argument, ARG, is to be
-passed by descriptor, instead of by value or reference.
-
- `%DESCR()' is restricted to actual arguments in invocations of
-external procedures.
-
- Use of `%DESCR()' is recommended only for code that is accessing
-facilities outside of GNU Fortran, such as operating system or
-windowing facilities. It is best to constrain such uses to isolated
-portions of a program--portions the deal specifically and exclusively
-with low-level, system-dependent facilities. Such portions might well
-provide a portable interface for use by the program as a whole, but are
-themselves not portable, and should be thoroughly tested each time they
-are rebuilt using a new compiler or version of a compiler.
-
- Do not depend on `%DESCR()' supplying a pointer and/or a length
-passed by value to the procedure being invoked. While that is a likely
-implementation choice, other implementation choices are available that
-preserve the pass-by-reference semantics without passing a pointer to
-the argument, ARG. (For example, a copy-in/copy-out implementation.)
-And, future versions of `g77' might change the way descriptors are
-implemented, such as passing a single argument pointing to a record
-containing the pointer/length information instead of passing that same
-information via two arguments as it currently does.
-
- *Implementation Note:* Currently, `g77' passes all variables and
-arrays of type `CHARACTER' by descriptor. Future versions of, or
-dialects supported by, `g77' might pass `CHARACTER' functions by
-descriptor as well.
-
- Thus, use of `%DESCR()' tends to be restricted to cases where ARG is
-not type `CHARACTER' but the called procedure accesses it via a means
-similar to the method used for Fortran `CHARACTER' arguments.
-
- *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
-information on how this particular version of `g77' passes arguments to
-procedures.
-
-\1f
-File: g77.info, Node: Generics and Specifics, Next: REAL() and AIMAG() of Complex, Prev: %DESCR(), Up: Functions and Subroutines
-
-Generics and Specifics
-----------------------
-
- The ANSI FORTRAN 77 language defines generic and specific intrinsics.
-In short, the distinctions are:
-
- * *Specific* intrinsics have specific types for their arguments and
- a specific return type.
-
- * *Generic* intrinsics are treated, on a case-by-case basis in the
- program's source code, as one of several possible specific
- intrinsics.
-
- Typically, a generic intrinsic has a return type that is
- determined by the type of one or more of its arguments.
-
- The GNU Fortran language generalizes these concepts somewhat,
-especially by providing intrinsic subroutines and generic intrinsics
-that are treated as either a specific intrinsic subroutine or a
-specific intrinsic function (e.g. `SECOND').
-
- However, GNU Fortran avoids generalizing this concept to the point
-where existing code would be accepted as meaning something possibly
-different than what was intended.
-
- For example, `ABS' is a generic intrinsic, so all working code
-written using `ABS' of an `INTEGER' argument expects an `INTEGER'
-return value. Similarly, all such code expects that `ABS' of an
-`INTEGER*2' argument returns an `INTEGER*2' return value.
-
- Yet, `IABS' is a *specific* intrinsic that accepts only an
-`INTEGER(KIND=1)' argument. Code that passes something other than an
-`INTEGER(KIND=1)' argument to `IABS' is not valid GNU Fortran code,
-because it is not clear what the author intended.
-
- For example, if `J' is `INTEGER(KIND=6)', `IABS(J)' is not defined
-by the GNU Fortran language, because the programmer might have used
-that construct to mean any of the following, subtly different, things:
-
- * Convert `J' to `INTEGER(KIND=1)' first (as if `IABS(INT(J))' had
- been written).
-
- * Convert the result of the intrinsic to `INTEGER(KIND=1)' (as if
- `INT(ABS(J))' had been written).
-
- * No conversion (as if `ABS(J)' had been written).
-
- The distinctions matter especially when types and values wider than
-`INTEGER(KIND=1)' (such as `INTEGER(KIND=2)'), or when operations
-performing more "arithmetic" than absolute-value, are involved.
-
- The following sample program is not a valid GNU Fortran program, but
-might be accepted by other compilers. If so, the output is likely to
-be revealing in terms of how a given compiler treats intrinsics (that
-normally are specific) when they are given arguments that do not
-conform to their stated requirements:
-
- PROGRAM JCB002
- C Version 1:
- C Modified 1997-05-21 (Burley) to accommodate compilers that implement
- C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
- C
- C Version 0:
- C Written by James Craig Burley 1997-02-20.
- C Contact via Internet email: burley@gnu.ai.mit.edu
- C
- C Purpose:
- C Determine how compilers handle non-standard IDIM
- C on INTEGER*2 operands, which presumably can be
- C extrapolated into understanding how the compiler
- C generally treats specific intrinsics that are passed
- C arguments not of the correct types.
- C
- C If your compiler implements INTEGER*2 and INTEGER
- C as the same type, change all INTEGER*2 below to
- C INTEGER*1.
- C
- INTEGER*2 I0, I4
- INTEGER I1, I2, I3
- INTEGER*2 ISMALL, ILARGE
- INTEGER*2 ITOOLG, ITWO
- INTEGER*2 ITMP
- LOGICAL L2, L3, L4
- C
- C Find smallest INTEGER*2 number.
- C
- ISMALL=0
- 10 I0 = ISMALL-1
- IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20
- ISMALL = I0
- GOTO 10
- 20 CONTINUE
- C
- C Find largest INTEGER*2 number.
- C
- ILARGE=0
- 30 I0 = ILARGE+1
- IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40
- ILARGE = I0
- GOTO 30
- 40 CONTINUE
- C
- C Multiplying by two adds stress to the situation.
- C
- ITWO = 2
- C
- C Need a number that, added to -2, is too wide to fit in I*2.
- C
- ITOOLG = ISMALL
- C
- C Use IDIM the straightforward way.
- C
- I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG
- C
- C Calculate result for first interpretation.
- C
- I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG
- C
- C Calculate result for second interpretation.
- C
- ITMP = ILARGE - ISMALL
- I3 = (INT (ITMP)) * ITWO + ITOOLG
- C
- C Calculate result for third interpretation.
- C
- I4 = (ILARGE - ISMALL) * ITWO + ITOOLG
- C
- C Print results.
- C
- PRINT *, 'ILARGE=', ILARGE
- PRINT *, 'ITWO=', ITWO
- PRINT *, 'ITOOLG=', ITOOLG
- PRINT *, 'ISMALL=', ISMALL
- PRINT *, 'I1=', I1
- PRINT *, 'I2=', I2
- PRINT *, 'I3=', I3
- PRINT *, 'I4=', I4
- PRINT *
- L2 = (I1 .EQ. I2)
- L3 = (I1 .EQ. I3)
- L4 = (I1 .EQ. I4)
- IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN
- PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))'
- STOP
- END IF
- IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN
- PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))'
- STOP
- END IF
- IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN
- PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)'
- STOP
- END IF
- PRINT *, 'Results need careful analysis.'
- END
-
- No future version of the GNU Fortran language will likely permit
-specific intrinsic invocations with wrong-typed arguments (such as
-`IDIM' in the above example), since it has been determined that
-disagreements exist among many production compilers on the
-interpretation of such invocations. These disagreements strongly
-suggest that Fortran programmers, and certainly existing Fortran
-programs, disagree about the meaning of such invocations.
-
- The first version of `JCB002' didn't accommodate some compilers'
-treatment of `INT(I1-I2)' where `I1' and `I2' are `INTEGER*2'. In such
-a case, these compilers apparently convert both operands to `INTEGER*4'
-and then do an `INTEGER*4' subtraction, instead of doing an `INTEGER*2'
-subtraction on the original values in `I1' and `I2'.
-
- However, the results of the careful analyses done on the outputs of
-programs compiled by these various compilers show that they all
-implement either `Interp 1' or `Interp 2' above.
-
- Specifically, it is believed that the new version of `JCB002' above
-will confirm that:
-
- * Digital Semiconductor ("DEC") Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5
- `f77' compilers all implement `Interp 1'.
-
- * IRIX 5.3 `f77' compiler implements `Interp 2'.
-
- * Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3, and IRIX 6.1
- `f77' compilers all implement `Interp 3'.
-
- If you get different results than the above for the stated
-compilers, or have results for other compilers that might be worth
-adding to the above list, please let us know the details (compiler
-product, version, machine, results, and so on).
-
-\1f
-File: g77.info, Node: REAL() and AIMAG() of Complex, Next: CMPLX() of DOUBLE PRECISION, Prev: Generics and Specifics, Up: Functions and Subroutines
-
-`REAL()' and `AIMAG()' of Complex
----------------------------------
-
- The GNU Fortran language disallows `REAL(EXPR)' and `AIMAG(EXPR)',
-where EXPR is any `COMPLEX' type other than `COMPLEX(KIND=1)', except
-when they are used in the following way:
-
- REAL(REAL(EXPR))
- REAL(AIMAG(EXPR))
-
-The above forms explicitly specify that the desired effect is to
-convert the real or imaginary part of EXPR, which might be some `REAL'
-type other than `REAL(KIND=1)', to type `REAL(KIND=1)', and have that
-serve as the value of the expression.
-
- The GNU Fortran language offers clearly named intrinsics to extract
-the real and imaginary parts of a complex entity without any conversion:
-
- REALPART(EXPR)
- IMAGPART(EXPR)
-
- To express the above using typical extended FORTRAN 77, use the
-following constructs (when EXPR is `COMPLEX(KIND=2)'):
-
- DBLE(EXPR)
- DIMAG(EXPR)
-
- The FORTRAN 77 language offers no way to explicitly specify the real
-and imaginary parts of a complex expression of arbitrary type,
-apparently as a result of requiring support for only one `COMPLEX' type
-(`COMPLEX(KIND=1)'). The concepts of converting an expression to type
-`REAL(KIND=1)' and of extracting the real part of a complex expression
-were thus "smooshed" by FORTRAN 77 into a single intrinsic, since they
-happened to have the exact same effect in that language (due to having
-only one `COMPLEX' type).
-
- *Note:* When `-ff90' is in effect, `g77' treats `REAL(EXPR)', where
-EXPR is of type `COMPLEX', as `REALPART(EXPR)', whereas with
-`-fugly-complex -fno-f90' in effect, it is treated as
-`REAL(REALPART(EXPR))'.
-
- *Note Ugly Complex Part Extraction::, for more information.
-
-\1f
-File: g77.info, Node: CMPLX() of DOUBLE PRECISION, Next: MIL-STD 1753, Prev: REAL() and AIMAG() of Complex, Up: Functions and Subroutines
-
-`CMPLX()' of `DOUBLE PRECISION'
--------------------------------
-
- In accordance with Fortran 90 and at least some (perhaps all) other
-compilers, the GNU Fortran language defines `CMPLX()' as always
-returning a result that is type `COMPLEX(KIND=1)'.
-
- This means `CMPLX(D1,D2)', where `D1' and `D2' are `REAL(KIND=2)'
-(`DOUBLE PRECISION'), is treated as:
-
- CMPLX(SNGL(D1), SNGL(D2))
-
- (It was necessary for Fortran 90 to specify this behavior for
-`DOUBLE PRECISION' arguments, since that is the behavior mandated by
-FORTRAN 77.)
-
- The GNU Fortran language also provides the `DCMPLX()' intrinsic,
-which is provided by some FORTRAN 77 compilers to construct a `DOUBLE
-COMPLEX' entity from of `DOUBLE PRECISION' operands. However, this
-solution does not scale well when more `COMPLEX' types (having various
-precisions and ranges) are offered by Fortran implementations.
-
- Fortran 90 extends the `CMPLX()' intrinsic by adding an extra
-argument used to specify the desired kind of complex result. However,
-this solution is somewhat awkward to use, and `g77' currently does not
-support it.
-
- The GNU Fortran language provides a simple way to build a complex
-value out of two numbers, with the precise type of the value determined
-by the types of the two numbers (via the usual type-promotion
-mechanism):
-
- COMPLEX(REAL, IMAG)
-
- When REAL and IMAG are the same `REAL' types, `COMPLEX()' performs
-no conversion other than to put them together to form a complex result
-of the same (complex version of real) type.
-
- *Note Complex Intrinsic::, for more information.
-
-\1f
-File: g77.info, Node: MIL-STD 1753, Next: f77/f2c Intrinsics, Prev: CMPLX() of DOUBLE PRECISION, Up: Functions and Subroutines
-
-MIL-STD 1753 Support
---------------------
-
- The GNU Fortran language includes the MIL-STD 1753 intrinsics
-`BTEST', `IAND', `IBCLR', `IBITS', `IBSET', `IEOR', `IOR', `ISHFT',
-`ISHFTC', `MVBITS', and `NOT'.
-
-\1f
-File: g77.info, Node: f77/f2c Intrinsics, Next: Table of Intrinsic Functions, Prev: MIL-STD 1753, Up: Functions and Subroutines
-
-`f77'/`f2c' Intrinsics
-----------------------
-
- The bit-manipulation intrinsics supported by traditional `f77' and
-by `f2c' are available in the GNU Fortran language. These include
-`AND', `LSHIFT', `OR', `RSHIFT', and `XOR'.
-
- Also supported are the intrinsics `CDABS', `CDCOS', `CDEXP',
-`CDLOG', `CDSIN', `CDSQRT', `DCMPLX', `DCONJG', `DFLOAT', `DIMAG',
-`DREAL', and `IMAG', `ZABS', `ZCOS', `ZEXP', `ZLOG', `ZSIN', and
-`ZSQRT'.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: Table of Intrinsic Functions, Prev: f77/f2c Intrinsics, Up: Functions and Subroutines
-
-Table of Intrinsic Functions
-----------------------------
-
- (Corresponds to Section 15.10 of ANSI X3.9-1978 FORTRAN 77.)
-
- The GNU Fortran language adds various functions, subroutines, types,
-and arguments to the set of intrinsic functions in ANSI FORTRAN 77.
-The complete set of intrinsics supported by the GNU Fortran language is
-described below.
-
- Note that a name is not treated as that of an intrinsic if it is
-specified in an `EXTERNAL' statement in the same program unit; if a
-command-line option is used to disable the groups to which the
-intrinsic belongs; or if the intrinsic is not named in an `INTRINSIC'
-statement and a command-line option is used to hide the groups to which
-the intrinsic belongs.
-
- So, it is recommended that any reference in a program unit to an
-intrinsic procedure that is not a standard FORTRAN 77 intrinsic be
-accompanied by an appropriate `INTRINSIC' statement in that program
-unit. This sort of defensive programming makes it more likely that an
-implementation will issue a diagnostic rather than generate incorrect
-code for such a reference.
-
- The terminology used below is based on that of the Fortran 90
-standard, so that the text may be more concise and accurate:
-
- * `OPTIONAL' means the argument may be omitted.
-
- * `A-1, A-2, ..., A-n' means more than one argument (generally named
- `A') may be specified.
-
- * `scalar' means the argument must not be an array (must be a
- variable or array element, or perhaps a constant if expressions
- are permitted).
-
- * `DIMENSION(4)' means the argument must be an array having 4
- elements.
-
- * `INTENT(IN)' means the argument must be an expression (such as a
- constant or a variable that is defined upon invocation of the
- intrinsic).
-
- * `INTENT(OUT)' means the argument must be definable by the
- invocation of the intrinsic (that is, must not be a constant nor
- an expression involving operators other than array reference and
- substring reference).
-
- * `INTENT(INOUT)' means the argument must be defined prior to, and
- definable by, invocation of the intrinsic (a combination of the
- requirements of `INTENT(IN)' and `INTENT(OUT)'.
-
- * *Note Kind Notation:: for explanation of `KIND'.
-
- (Note that the empty lines appearing in the menu below are not
-intentional--they result from a bug in the GNU `makeinfo' program...a
-program that, if it did not exist, would leave this document in far
-worse shape!)
-
-* Menu:
-
-
-* Abort Intrinsic:: Abort the program.
-
-* Abs Intrinsic:: Absolute value.
-
-* Access Intrinsic:: Check file accessibility.
-
-* AChar Intrinsic:: ASCII character from code.
-
-* ACos Intrinsic:: Arc cosine.
-
-* AdjustL Intrinsic:: (Reserved for future use.)
-* AdjustR Intrinsic:: (Reserved for future use.)
-
-* AImag Intrinsic:: Convert/extract imaginary part of complex.
-
-* AInt Intrinsic:: Truncate to whole number.
-
-* Alarm Intrinsic:: Execute a routine after a given delay.
-
-* All Intrinsic:: (Reserved for future use.)
-* Allocated Intrinsic:: (Reserved for future use.)
-
-* ALog Intrinsic:: Natural logarithm (archaic).
-* ALog10 Intrinsic:: Natural logarithm (archaic).
-* AMax0 Intrinsic:: Maximum value (archaic).
-* AMax1 Intrinsic:: Maximum value (archaic).
-* AMin0 Intrinsic:: Minimum value (archaic).
-* AMin1 Intrinsic:: Minimum value (archaic).
-* AMod Intrinsic:: Remainder (archaic).
-
-* And Intrinsic:: Boolean AND.
-
-* ANInt Intrinsic:: Round to nearest whole number.
-
-* Any Intrinsic:: (Reserved for future use.)
-
-* ASin Intrinsic:: Arc sine.
-
-* Associated Intrinsic:: (Reserved for future use.)
-
-* ATan Intrinsic:: Arc tangent.
-* ATan2 Intrinsic:: Arc tangent.
-
-* BesJ0 Intrinsic:: Bessel function.
-* BesJ1 Intrinsic:: Bessel function.
-* BesJN Intrinsic:: Bessel function.
-* BesY0 Intrinsic:: Bessel function.
-* BesY1 Intrinsic:: Bessel function.
-* BesYN Intrinsic:: Bessel function.
-
-* Bit_Size Intrinsic:: Number of bits in argument's type.
-
-* BTest Intrinsic:: Test bit.
-
-* CAbs Intrinsic:: Absolute value (archaic).
-* CCos Intrinsic:: Cosine (archaic).
-
-* Ceiling Intrinsic:: (Reserved for future use.)
-
-* CExp Intrinsic:: Exponential (archaic).
-* Char Intrinsic:: Character from code.
-
-* ChDir Intrinsic (subroutine):: Change directory.
-
-* ChMod Intrinsic (subroutine):: Change file modes.
-
-* CLog Intrinsic:: Natural logarithm (archaic).
-* Cmplx Intrinsic:: Construct `COMPLEX(KIND=1)' value.
-
-* Complex Intrinsic:: Build complex value from real and
- imaginary parts.
-
-* Conjg Intrinsic:: Complex conjugate.
-* Cos Intrinsic:: Cosine.
-
-* CosH Intrinsic:: Hyperbolic cosine.
-
-* Count Intrinsic:: (Reserved for future use.)
-* Cpu_Time Intrinsic:: Get current CPU time.
-* CShift Intrinsic:: (Reserved for future use.)
-
-* CSin Intrinsic:: Sine (archaic).
-* CSqRt Intrinsic:: Square root (archaic).
-
-* CTime Intrinsic (subroutine):: Convert time to Day Mon dd hh:mm:ss yyyy.
-* CTime Intrinsic (function):: Convert time to Day Mon dd hh:mm:ss yyyy.
-
-* DAbs Intrinsic:: Absolute value (archaic).
-* DACos Intrinsic:: Arc cosine (archaic).
-
-* DASin Intrinsic:: Arc sine (archaic).
-
-* DATan Intrinsic:: Arc tangent (archaic).
-* DATan2 Intrinsic:: Arc tangent (archaic).
-
-* Date_and_Time Intrinsic:: (Reserved for future use.)
-
-* DbesJ0 Intrinsic:: Bessel function (archaic).
-* DbesJ1 Intrinsic:: Bessel function (archaic).
-* DbesJN Intrinsic:: Bessel function (archaic).
-* DbesY0 Intrinsic:: Bessel function (archaic).
-* DbesY1 Intrinsic:: Bessel function (archaic).
-* DbesYN Intrinsic:: Bessel function (archaic).
-
-* Dble Intrinsic:: Convert to double precision.
-
-* DCos Intrinsic:: Cosine (archaic).
-
-* DCosH Intrinsic:: Hyperbolic cosine (archaic).
-* DDiM Intrinsic:: Difference magnitude (archaic).
-
-* DErF Intrinsic:: Error function (archaic).
-* DErFC Intrinsic:: Complementary error function (archaic).
-
-* DExp Intrinsic:: Exponential (archaic).
-
-* Digits Intrinsic:: (Reserved for future use.)
-
-* DiM Intrinsic:: Difference magnitude (non-negative subtract).
-
-* DInt Intrinsic:: Truncate to whole number (archaic).
-* DLog Intrinsic:: Natural logarithm (archaic).
-* DLog10 Intrinsic:: Natural logarithm (archaic).
-* DMax1 Intrinsic:: Maximum value (archaic).
-* DMin1 Intrinsic:: Minimum value (archaic).
-* DMod Intrinsic:: Remainder (archaic).
-* DNInt Intrinsic:: Round to nearest whole number (archaic).
-
-* Dot_Product Intrinsic:: (Reserved for future use.)
-
-* DProd Intrinsic:: Double-precision product.
-
-* DSign Intrinsic:: Apply sign to magnitude (archaic).
-* DSin Intrinsic:: Sine (archaic).
-
-* DSinH Intrinsic:: Hyperbolic sine (archaic).
-* DSqRt Intrinsic:: Square root (archaic).
-* DTan Intrinsic:: Tangent (archaic).
-
-* DTanH Intrinsic:: Hyperbolic tangent (archaic).
-
-* Dtime Intrinsic (subroutine):: Get elapsed time since last time.
-
-* EOShift Intrinsic:: (Reserved for future use.)
-* Epsilon Intrinsic:: (Reserved for future use.)
-
-* ErF Intrinsic:: Error function.
-* ErFC Intrinsic:: Complementary error function.
-* ETime Intrinsic (subroutine):: Get elapsed time for process.
-* ETime Intrinsic (function):: Get elapsed time for process.
-* Exit Intrinsic:: Terminate the program.
-
-* Exp Intrinsic:: Exponential.
-
-* Exponent Intrinsic:: (Reserved for future use.)
-
-* Fdate Intrinsic (subroutine):: Get current time as Day Mon dd hh:mm:ss yyyy.
-* Fdate Intrinsic (function):: Get current time as Day Mon dd hh:mm:ss yyyy.
-* FGet Intrinsic (subroutine):: Read a character from unit 5 stream-wise.
-
-* FGetC Intrinsic (subroutine):: Read a character stream-wise.
-
-* Float Intrinsic:: Conversion (archaic).
-
-* Floor Intrinsic:: (Reserved for future use.)
-
-* Flush Intrinsic:: Flush buffered output.
-* FNum Intrinsic:: Get file descriptor from Fortran unit number.
-* FPut Intrinsic (subroutine):: Write a character to unit 6 stream-wise.
-
-* FPutC Intrinsic (subroutine):: Write a character stream-wise.
-
-* Fraction Intrinsic:: (Reserved for future use.)
-
-* FSeek Intrinsic:: Position file (low-level).
-* FStat Intrinsic (subroutine):: Get file information.
-* FStat Intrinsic (function):: Get file information.
-* FTell Intrinsic (subroutine):: Get file position (low-level).
-* FTell Intrinsic (function):: Get file position (low-level).
-* GError Intrinsic:: Get error message for last error.
-* GetArg Intrinsic:: Obtain command-line argument.
-* GetCWD Intrinsic (subroutine):: Get current working directory.
-* GetCWD Intrinsic (function):: Get current working directory.
-* GetEnv Intrinsic:: Get environment variable.
-* GetGId Intrinsic:: Get process group id.
-* GetLog Intrinsic:: Get login name.
-* GetPId Intrinsic:: Get process id.
-* GetUId Intrinsic:: Get process user id.
-* GMTime Intrinsic:: Convert time to GMT time info.
-* HostNm Intrinsic (subroutine):: Get host name.
-* HostNm Intrinsic (function):: Get host name.
-
-* Huge Intrinsic:: (Reserved for future use.)
-
-* IAbs Intrinsic:: Absolute value (archaic).
-
-* IAChar Intrinsic:: ASCII code for character.
-
-* IAnd Intrinsic:: Boolean AND.
-
-* IArgC Intrinsic:: Obtain count of command-line arguments.
-
-* IBClr Intrinsic:: Clear a bit.
-* IBits Intrinsic:: Extract a bit subfield of a variable.
-* IBSet Intrinsic:: Set a bit.
-
-* IChar Intrinsic:: Code for character.
-
-* IDate Intrinsic (UNIX):: Get local time info.
-
-* IDiM Intrinsic:: Difference magnitude (archaic).
-* IDInt Intrinsic:: Convert to `INTEGER' value truncated
- to whole number (archaic).
-* IDNInt Intrinsic:: Convert to `INTEGER' value rounded
- to nearest whole number (archaic).
-
-* IEOr Intrinsic:: Boolean XOR.
-
-* IErrNo Intrinsic:: Get error number for last error.
-
-* IFix Intrinsic:: Conversion (archaic).
-
-* Imag Intrinsic:: Extract imaginary part of complex.
-
-* ImagPart Intrinsic:: Extract imaginary part of complex.
-
-* Index Intrinsic:: Locate a CHARACTER substring.
-
-* Int Intrinsic:: Convert to `INTEGER' value truncated
- to whole number.
-
-* Int2 Intrinsic:: Convert to `INTEGER(KIND=6)' value
- truncated to whole number.
-* Int8 Intrinsic:: Convert to `INTEGER(KIND=2)' value
- truncated to whole number.
-
-* IOr Intrinsic:: Boolean OR.
-
-* IRand Intrinsic:: Random number.
-* IsaTty Intrinsic:: Is unit connected to a terminal?
-
-* IShft Intrinsic:: Logical bit shift.
-* IShftC Intrinsic:: Circular bit shift.
-
-* ISign Intrinsic:: Apply sign to magnitude (archaic).
-
-* ITime Intrinsic:: Get local time of day.
-
-* Kill Intrinsic (subroutine):: Signal a process.
-
-* Kind Intrinsic:: (Reserved for future use.)
-* LBound Intrinsic:: (Reserved for future use.)
-
-* Len Intrinsic:: Length of character entity.
-
-* Len_Trim Intrinsic:: Get last non-blank character in string.
-
-* LGe Intrinsic:: Lexically greater than or equal.
-* LGt Intrinsic:: Lexically greater than.
-
-* Link Intrinsic (subroutine):: Make hard link in file system.
-
-* LLe Intrinsic:: Lexically less than or equal.
-* LLt Intrinsic:: Lexically less than.
-
-* LnBlnk Intrinsic:: Get last non-blank character in string.
-* Loc Intrinsic:: Address of entity in core.
-
-* Log Intrinsic:: Natural logarithm.
-* Log10 Intrinsic:: Natural logarithm.
-
-* Logical Intrinsic:: (Reserved for future use.)
-
-* Long Intrinsic:: Conversion to `INTEGER(KIND=1)' (archaic).
-
-* LShift Intrinsic:: Left-shift bits.
-
-* LStat Intrinsic (subroutine):: Get file information.
-* LStat Intrinsic (function):: Get file information.
-* LTime Intrinsic:: Convert time to local time info.
-
-* MatMul Intrinsic:: (Reserved for future use.)
-
-* Max Intrinsic:: Maximum value.
-* Max0 Intrinsic:: Maximum value (archaic).
-* Max1 Intrinsic:: Maximum value (archaic).
-
-* MaxExponent Intrinsic:: (Reserved for future use.)
-* MaxLoc Intrinsic:: (Reserved for future use.)
-* MaxVal Intrinsic:: (Reserved for future use.)
-
-* MClock Intrinsic:: Get number of clock ticks for process.
-* MClock8 Intrinsic:: Get number of clock ticks for process.
-
-* Merge Intrinsic:: (Reserved for future use.)
-
-* Min Intrinsic:: Minimum value.
-* Min0 Intrinsic:: Minimum value (archaic).
-* Min1 Intrinsic:: Minimum value (archaic).
-
-* MinExponent Intrinsic:: (Reserved for future use.)
-* MinLoc Intrinsic:: (Reserved for future use.)
-* MinVal Intrinsic:: (Reserved for future use.)
-
-* Mod Intrinsic:: Remainder.
-
-* Modulo Intrinsic:: (Reserved for future use.)
-
-* MvBits Intrinsic:: Moving a bit field.
-
-* Nearest Intrinsic:: (Reserved for future use.)
-
-* NInt Intrinsic:: Convert to `INTEGER' value rounded
- to nearest whole number.
-
-* Not Intrinsic:: Boolean NOT.
-
-* Or Intrinsic:: Boolean OR.
-
-* Pack Intrinsic:: (Reserved for future use.)
-
-* PError Intrinsic:: Print error message for last error.
-
-* Precision Intrinsic:: (Reserved for future use.)
-* Present Intrinsic:: (Reserved for future use.)
-* Product Intrinsic:: (Reserved for future use.)
-
-* Radix Intrinsic:: (Reserved for future use.)
-
-* Rand Intrinsic:: Random number.
-
-* Random_Number Intrinsic:: (Reserved for future use.)
-* Random_Seed Intrinsic:: (Reserved for future use.)
-* Range Intrinsic:: (Reserved for future use.)
-
-* Real Intrinsic:: Convert value to type `REAL(KIND=1)'.
-
-* RealPart Intrinsic:: Extract real part of complex.
-
-* Rename Intrinsic (subroutine):: Rename file.
-
-* Repeat Intrinsic:: (Reserved for future use.)
-* Reshape Intrinsic:: (Reserved for future use.)
-* RRSpacing Intrinsic:: (Reserved for future use.)
-
-* RShift Intrinsic:: Right-shift bits.
-
-* Scale Intrinsic:: (Reserved for future use.)
-* Scan Intrinsic:: (Reserved for future use.)
-
-* Second Intrinsic (function):: Get CPU time for process in seconds.
-* Second Intrinsic (subroutine):: Get CPU time for process
- in seconds.
-
-* Selected_Int_Kind Intrinsic:: (Reserved for future use.)
-* Selected_Real_Kind Intrinsic:: (Reserved for future use.)
-* Set_Exponent Intrinsic:: (Reserved for future use.)
-* Shape Intrinsic:: (Reserved for future use.)
-
-* Short Intrinsic:: Convert to `INTEGER(KIND=6)' value
- truncated to whole number.
-
-* Sign Intrinsic:: Apply sign to magnitude.
-
-* Signal Intrinsic (subroutine):: Muck with signal handling.
-
-* Sin Intrinsic:: Sine.
-
-* SinH Intrinsic:: Hyperbolic sine.
-
-* Sleep Intrinsic:: Sleep for a specified time.
-
-* Sngl Intrinsic:: Convert (archaic).
-
-* Spacing Intrinsic:: (Reserved for future use.)
-* Spread Intrinsic:: (Reserved for future use.)
-
-* SqRt Intrinsic:: Square root.
-
-* SRand Intrinsic:: Random seed.
-* Stat Intrinsic (subroutine):: Get file information.
-* Stat Intrinsic (function):: Get file information.
-
-* Sum Intrinsic:: (Reserved for future use.)
-
-* SymLnk Intrinsic (subroutine):: Make symbolic link in file system.
-
-* System Intrinsic (subroutine):: Invoke shell (system) command.
-
-* System_Clock Intrinsic:: Get current system clock value.
-
-* Tan Intrinsic:: Tangent.
-
-* TanH Intrinsic:: Hyperbolic tangent.
-
-* Time Intrinsic (UNIX):: Get current time as time value.
-
-* Time8 Intrinsic:: Get current time as time value.
-
-* Tiny Intrinsic:: (Reserved for future use.)
-* Transfer Intrinsic:: (Reserved for future use.)
-* Transpose Intrinsic:: (Reserved for future use.)
-* Trim Intrinsic:: (Reserved for future use.)
-
-* TtyNam Intrinsic (subroutine):: Get name of terminal device for unit.
-* TtyNam Intrinsic (function):: Get name of terminal device for unit.
-
-* UBound Intrinsic:: (Reserved for future use.)
-
-* UMask Intrinsic (subroutine):: Set file creation permissions mask.
-
-* Unlink Intrinsic (subroutine):: Unlink file.
-
-* Unpack Intrinsic:: (Reserved for future use.)
-* Verify Intrinsic:: (Reserved for future use.)
-
-* XOr Intrinsic:: Boolean XOR.
-* ZAbs Intrinsic:: Absolute value (archaic).
-* ZCos Intrinsic:: Cosine (archaic).
-* ZExp Intrinsic:: Exponential (archaic).
-
-* ZLog Intrinsic:: Natural logarithm (archaic).
-* ZSin Intrinsic:: Sine (archaic).
-* ZSqRt Intrinsic:: Square root (archaic).
-
-\1f
-File: g77.info, Node: Abort Intrinsic, Next: Abs Intrinsic, Up: Table of Intrinsic Functions
-
-Abort Intrinsic
-...............
-
- CALL Abort()
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Prints a message and potentially causes a core dump via `abort(3)'.
-
-\1f
-File: g77.info, Node: Abs Intrinsic, Next: Access Intrinsic, Prev: Abort Intrinsic, Up: Table of Intrinsic Functions
-
-Abs Intrinsic
-.............
-
- Abs(A)
-
-Abs: `INTEGER' or `REAL' function. The exact type depends on that of
-argument A--if A is `COMPLEX', this function's type is `REAL' with the
-same `KIND=' value as the type of A. Otherwise, this function's type
-is the same as that of A.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the absolute value of A.
-
- If A is type `COMPLEX', the absolute value is computed as:
-
- SQRT(REALPART(A)**2, IMAGPART(A)**2)
-
-Otherwise, it is computed by negating the A if it is negative, or
-returning A.
-
- *Note Sign Intrinsic::, for how to explicitly compute the positive
-or negative form of the absolute value of an expression.
-
-\1f
-File: g77.info, Node: Access Intrinsic, Next: AChar Intrinsic, Prev: Abs Intrinsic, Up: Table of Intrinsic Functions
-
-Access Intrinsic
-................
-
- Access(NAME, MODE)
-
-Access: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Checks file NAME for accessibility in the mode specified by MODE and
-returns 0 if the file is accessible in that mode, otherwise an error
-code if the file is inaccessible or MODE is invalid. See `access(2)'.
-A null character (`CHAR(0)') marks the end of the name in
-NAME--otherwise, trailing blanks in NAME are ignored. MODE may be a
-concatenation of any of the following characters:
-
-`r'
- Read permission
-
-`w'
- Write permission
-
-`x'
- Execute permission
-
-`SPC'
- Existence
-
-\1f
-File: g77.info, Node: AChar Intrinsic, Next: ACos Intrinsic, Prev: Access Intrinsic, Up: Table of Intrinsic Functions
-
-AChar Intrinsic
-...............
-
- AChar(I)
-
-AChar: `CHARACTER*1' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `f90'.
-
-Description:
-
- Returns the ASCII character corresponding to the code specified by I.
-
- *Note IAChar Intrinsic::, for the inverse of this function.
-
- *Note Char Intrinsic::, for the function corresponding to the
-system's native character set.
-
-\1f
-File: g77.info, Node: ACos Intrinsic, Next: AdjustL Intrinsic, Prev: AChar Intrinsic, Up: Table of Intrinsic Functions
-
-ACos Intrinsic
-..............
-
- ACos(X)
-
-ACos: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-cosine (inverse cosine) of X in radians.
-
- *Note Cos Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: AdjustL Intrinsic, Next: AdjustR Intrinsic, Prev: ACos Intrinsic, Up: Table of Intrinsic Functions
-
-AdjustL Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AdjustL' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: AdjustR Intrinsic, Next: AImag Intrinsic, Prev: AdjustL Intrinsic, Up: Table of Intrinsic Functions
-
-AdjustR Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL AdjustR' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: AImag Intrinsic, Next: AInt Intrinsic, Prev: AdjustR Intrinsic, Up: Table of Intrinsic Functions
-
-AImag Intrinsic
-...............
-
- AImag(Z)
-
-AImag: `REAL' function. This intrinsic is valid when argument Z is
-`COMPLEX(KIND=1)'. When Z is any other `COMPLEX' type, this intrinsic
-is valid only when used as the argument to `REAL()', as explained below.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the (possibly converted) imaginary part of Z.
-
- Use of `AIMAG()' with an argument of a type other than
-`COMPLEX(KIND=1)' is restricted to the following case:
-
- REAL(AIMAG(Z))
-
-This expression converts the imaginary part of Z to `REAL(KIND=1)'.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-\1f
-File: g77.info, Node: AInt Intrinsic, Next: Alarm Intrinsic, Prev: AImag Intrinsic, Up: Table of Intrinsic Functions
-
-AInt Intrinsic
-..............
-
- AInt(A)
-
-AInt: `REAL' function, the `KIND=' value of the type being that of
-argument A.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved. (Also called "truncation towards zero".)
-
- *Note ANInt Intrinsic::, for how to round to nearest whole number.
-
- *Note Int Intrinsic::, for how to truncate and then convert number
-to `INTEGER'.
-
-\1f
-File: g77.info, Node: Alarm Intrinsic, Next: All Intrinsic, Prev: AInt Intrinsic, Up: Table of Intrinsic Functions
-
-Alarm Intrinsic
-...............
-
- CALL Alarm(SECONDS, HANDLER, STATUS)
-
-SECONDS: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Causes external subroutine HANDLER to be executed after a delay of
-SECONDS seconds by using `alarm(1)' to set up a signal and `signal(2)'
-to catch it. If STATUS is supplied, it will be returned with the the
-number of seconds remaining until any previously scheduled alarm was
-due to be delivered, or zero if there was no previously scheduled alarm.
-*Note Signal Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: All Intrinsic, Next: Allocated Intrinsic, Prev: Alarm Intrinsic, Up: Table of Intrinsic Functions
-
-All Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL All' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Allocated Intrinsic, Next: ALog Intrinsic, Prev: All Intrinsic, Up: Table of Intrinsic Functions
-
-Allocated Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Allocated' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: ALog Intrinsic, Next: ALog10 Intrinsic, Prev: Allocated Intrinsic, Up: Table of Intrinsic Functions
-
-ALog Intrinsic
-..............
-
- ALog(X)
-
-ALog: `REAL(KIND=1)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-\1f
-File: g77.info, Node: ALog10 Intrinsic, Next: AMax0 Intrinsic, Prev: ALog Intrinsic, Up: Table of Intrinsic Functions
-
-ALog10 Intrinsic
-................
-
- ALog10(X)
-
-ALog10: `REAL(KIND=1)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG10()' that is specific to one type for X. *Note
-Log10 Intrinsic::.
-
-\1f
-File: g77.info, Node: AMax0 Intrinsic, Next: AMax1 Intrinsic, Prev: ALog10 Intrinsic, Up: Table of Intrinsic Functions
-
-AMax0 Intrinsic
-...............
-
- AMax0(A-1, A-2, ..., A-n)
-
-AMax0: `REAL(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A and a
-different return type. *Note Max Intrinsic::.
-
-\1f
-File: g77.info, Node: AMax1 Intrinsic, Next: AMin0 Intrinsic, Prev: AMax0 Intrinsic, Up: Table of Intrinsic Functions
-
-AMax1 Intrinsic
-...............
-
- AMax1(A-1, A-2, ..., A-n)
-
-AMax1: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-\1f
-File: g77.info, Node: AMin0 Intrinsic, Next: AMin1 Intrinsic, Prev: AMax1 Intrinsic, Up: Table of Intrinsic Functions
-
-AMin0 Intrinsic
-...............
-
- AMin0(A-1, A-2, ..., A-n)
-
-AMin0: `REAL(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A and a
-different return type. *Note Min Intrinsic::.
-
-\1f
-File: g77.info, Node: AMin1 Intrinsic, Next: AMod Intrinsic, Prev: AMin0 Intrinsic, Up: Table of Intrinsic Functions
-
-AMin1 Intrinsic
-...............
-
- AMin1(A-1, A-2, ..., A-n)
-
-AMin1: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-\1f
-File: g77.info, Node: AMod Intrinsic, Next: And Intrinsic, Prev: AMin1 Intrinsic, Up: Table of Intrinsic Functions
-
-AMod Intrinsic
-..............
-
- AMod(A, P)
-
-AMod: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-P: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MOD()' that is specific to one type for A. *Note
-Mod Intrinsic::.
-
-\1f
-File: g77.info, Node: And Intrinsic, Next: ANInt Intrinsic, Prev: AMod Intrinsic, Up: Table of Intrinsic Functions
-
-And Intrinsic
-.............
-
- And(I, J)
-
-And: `INTEGER' or `LOGICAL' function, the exact type being the result
-of cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean AND of pair of bits in each of
-I and J.
-
-\1f
-File: g77.info, Node: ANInt Intrinsic, Next: Any Intrinsic, Prev: And Intrinsic, Up: Table of Intrinsic Functions
-
-ANInt Intrinsic
-...............
-
- ANInt(A)
-
-ANInt: `REAL' function, the `KIND=' value of the type being that of
-argument A.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude eliminated by
-rounding to the nearest whole number and with its sign preserved.
-
- A fractional portion exactly equal to `.5' is rounded to the whole
-number that is larger in magnitude. (Also called "Fortran round".)
-
- *Note AInt Intrinsic::, for how to truncate to whole number.
-
- *Note NInt Intrinsic::, for how to round and then convert number to
-`INTEGER'.
-
-\1f
-File: g77.info, Node: Any Intrinsic, Next: ASin Intrinsic, Prev: ANInt Intrinsic, Up: Table of Intrinsic Functions
-
-Any Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Any' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: ASin Intrinsic, Next: Associated Intrinsic, Prev: Any Intrinsic, Up: Table of Intrinsic Functions
-
-ASin Intrinsic
-..............
-
- ASin(X)
-
-ASin: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-sine (inverse sine) of X in radians.
-
- *Note Sin Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: Associated Intrinsic, Next: ATan Intrinsic, Prev: ASin Intrinsic, Up: Table of Intrinsic Functions
-
-Associated Intrinsic
-....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Associated' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: ATan Intrinsic, Next: ATan2 Intrinsic, Prev: Associated Intrinsic, Up: Table of Intrinsic Functions
-
-ATan Intrinsic
-..............
-
- ATan(X)
-
-ATan: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-tangent (inverse tangent) of X in radians.
-
- *Note Tan Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: ATan2 Intrinsic, Next: BesJ0 Intrinsic, Prev: ATan Intrinsic, Up: Table of Intrinsic Functions
-
-ATan2 Intrinsic
-...............
-
- ATan2(Y, X)
-
-ATan2: `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-Y: `REAL'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the arc-tangent (inverse tangent) of the complex number (Y,
-X) in radians.
-
- *Note Tan Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: BesJ0 Intrinsic, Next: BesJ1 Intrinsic, Prev: ATan2 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJ0 Intrinsic
-...............
-
- BesJ0(X)
-
-BesJ0: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order 0 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: BesJ1 Intrinsic, Next: BesJN Intrinsic, Prev: BesJ0 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJ1 Intrinsic
-...............
-
- BesJ1(X)
-
-BesJ1: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order 1 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: BesJN Intrinsic, Next: BesY0 Intrinsic, Prev: BesJ1 Intrinsic, Up: Table of Intrinsic Functions
-
-BesJN Intrinsic
-...............
-
- BesJN(N, X)
-
-BesJN: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the first kind of order N of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: BesY0 Intrinsic, Next: BesY1 Intrinsic, Prev: BesJN Intrinsic, Up: Table of Intrinsic Functions
-
-BesY0 Intrinsic
-...............
-
- BesY0(X)
-
-BesY0: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order 0 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: BesY1 Intrinsic, Next: BesYN Intrinsic, Prev: BesY0 Intrinsic, Up: Table of Intrinsic Functions
-
-BesY1 Intrinsic
-...............
-
- BesY1(X)
-
-BesY1: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order 1 of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: BesYN Intrinsic, Next: Bit_Size Intrinsic, Prev: BesY1 Intrinsic, Up: Table of Intrinsic Functions
-
-BesYN Intrinsic
-...............
-
- BesYN(N, X)
-
-BesYN: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Calculates the Bessel function of the second kind of order N of X.
-See `bessel(3m)', on whose implementation the function depends.
-
-\1f
-File: g77.info, Node: Bit_Size Intrinsic, Next: BTest Intrinsic, Prev: BesYN Intrinsic, Up: Table of Intrinsic Functions
-
-Bit_Size Intrinsic
-..................
-
- Bit_Size(I)
-
-Bit_Size: `INTEGER' function, the `KIND=' value of the type being that
-of argument I.
-
-I: `INTEGER'; scalar.
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns the number of bits (integer precision plus sign bit)
-represented by the type for I.
-
- *Note BTest Intrinsic::, for how to test the value of a bit in a
-variable or array.
-
- *Note IBSet Intrinsic::, for how to set a bit in a variable to 1.
-
- *Note IBClr Intrinsic::, for how to set a bit in a variable to 0.
-
-\1f
-File: g77.info, Node: BTest Intrinsic, Next: CAbs Intrinsic, Prev: Bit_Size Intrinsic, Up: Table of Intrinsic Functions
-
-BTest Intrinsic
-...............
-
- BTest(I, POS)
-
-BTest: `LOGICAL(KIND=1)' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns `.TRUE.' if bit POS in I is 1, `.FALSE.' otherwise.
-
- (Bit 0 is the low-order (rightmost) bit, adding the value 2**0, or 1,
-to the number if set to 1; bit 1 is the next-higher-order bit, adding
-2**1, or 2; bit 2 adds 2**2, or 4; and so on.)
-
- *Note Bit_Size Intrinsic::, for how to obtain the number of bits in
-a type. The leftmost bit of I is `BIT_SIZE(I-1)'.
-
-\1f
-File: g77.info, Node: CAbs Intrinsic, Next: CCos Intrinsic, Prev: BTest Intrinsic, Up: Table of Intrinsic Functions
-
-CAbs Intrinsic
-..............
-
- CAbs(A)
-
-CAbs: `REAL(KIND=1)' function.
-
-A: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-\1f
-File: g77.info, Node: CCos Intrinsic, Next: Ceiling Intrinsic, Prev: CAbs Intrinsic, Up: Table of Intrinsic Functions
-
-CCos Intrinsic
-..............
-
- CCos(X)
-
-CCos: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-\1f
-File: g77.info, Node: Ceiling Intrinsic, Next: CExp Intrinsic, Prev: CCos Intrinsic, Up: Table of Intrinsic Functions
-
-Ceiling Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Ceiling' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: CExp Intrinsic, Next: Char Intrinsic, Prev: Ceiling Intrinsic, Up: Table of Intrinsic Functions
-
-CExp Intrinsic
-..............
-
- CExp(X)
-
-CExp: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-\1f
-File: g77.info, Node: Char Intrinsic, Next: ChDir Intrinsic (subroutine), Prev: CExp Intrinsic, Up: Table of Intrinsic Functions
-
-Char Intrinsic
-..............
-
- Char(I)
-
-Char: `CHARACTER*1' function.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the character corresponding to the code specified by I,
-using the system's native character set.
-
- Because the system's native character set is used, the
-correspondence between character and their codes is not necessarily the
-same between GNU Fortran implementations.
-
- Note that no intrinsic exists to convert a numerical value to a
-printable character string. For example, there is no intrinsic that,
-given an `INTEGER' or `REAL' argument with the value `154', returns the
-`CHARACTER' result `'154''.
-
- Instead, you can use internal-file I/O to do this kind of conversion.
-For example:
-
- INTEGER VALUE
- CHARACTER*10 STRING
- VALUE = 154
- WRITE (STRING, '(I10)'), VALUE
- PRINT *, STRING
- END
-
- The above program, when run, prints:
-
- 154
-
- *Note IChar Intrinsic::, for the inverse of the `CHAR' function.
-
- *Note AChar Intrinsic::, for the function corresponding to the ASCII
-character set.
-
-\1f
-File: g77.info, Node: ChDir Intrinsic (subroutine), Next: ChMod Intrinsic (subroutine), Prev: Char Intrinsic, Up: Table of Intrinsic Functions
-
-ChDir Intrinsic (subroutine)
-............................
-
- CALL ChDir(DIR, STATUS)
-
-DIR: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets the current working directory to be DIR. If the STATUS
-argument is supplied, it contains 0 on success or a non-zero error code
-otherwise upon return. See `chdir(3)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note ChDir
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: ChMod Intrinsic (subroutine), Next: CLog Intrinsic, Prev: ChDir Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-ChMod Intrinsic (subroutine)
-............................
-
- CALL ChMod(NAME, MODE, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-MODE: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Changes the access mode of file NAME according to the specification
-MODE, which is given in the format of `chmod(1)'. A null character
-(`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
-blanks in NAME are ignored. Currently, NAME must not contain the
-single quote character.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Note that this currently works by actually invoking `/bin/chmod' (or
-the `chmod' found when the library was configured) and so may fail in
-some circumstances and will, anyway, be slow.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note ChMod
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: CLog Intrinsic, Next: Cmplx Intrinsic, Prev: ChMod Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-CLog Intrinsic
-..............
-
- CLog(X)
-
-CLog: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-\1f
-File: g77.info, Node: Cmplx Intrinsic, Next: Complex Intrinsic, Prev: CLog Intrinsic, Up: Table of Intrinsic Functions
-
-Cmplx Intrinsic
-...............
-
- Cmplx(X, Y)
-
-Cmplx: `COMPLEX(KIND=1)' function.
-
-X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- If X is not type `COMPLEX', constructs a value of type
-`COMPLEX(KIND=1)' from the real and imaginary values specified by X and
-Y, respectively. If Y is omitted, `0.' is assumed.
-
- If X is type `COMPLEX', converts it to type `COMPLEX(KIND=1)'.
-
- *Note Complex Intrinsic::, for information on easily constructing a
-`COMPLEX' value of arbitrary precision from `REAL' arguments.
-
-\1f
-File: g77.info, Node: Complex Intrinsic, Next: Conjg Intrinsic, Prev: Cmplx Intrinsic, Up: Table of Intrinsic Functions
-
-Complex Intrinsic
-.................
-
- Complex(REAL, IMAG)
-
-Complex: `COMPLEX' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-REAL: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-IMAG: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns a `COMPLEX' value that has `Real' and `Imag' as its real and
-imaginary parts, respectively.
-
- If REAL and IMAG are the same type, and that type is not `INTEGER',
-no data conversion is performed, and the type of the resulting value
-has the same kind value as the types of REAL and IMAG.
-
- If REAL and IMAG are not the same type, the usual type-promotion
-rules are applied to both, converting either or both to the appropriate
-`REAL' type. The type of the resulting value has the same kind value
-as the type to which both REAL and IMAG were converted, in this case.
-
- If REAL and IMAG are both `INTEGER', they are both converted to
-`REAL(KIND=1)', and the result of the `COMPLEX()' invocation is type
-`COMPLEX(KIND=1)'.
-
- *Note:* The way to do this in standard Fortran 90 is too hairy to
-describe here, but it is important to note that `CMPLX(D1,D2)' returns
-a `COMPLEX(KIND=1)' result even if `D1' and `D2' are type
-`REAL(KIND=2)'. Hence the availability of `COMPLEX()' in GNU Fortran.
-
-\1f
-File: g77.info, Node: Conjg Intrinsic, Next: Cos Intrinsic, Prev: Complex Intrinsic, Up: Table of Intrinsic Functions
-
-Conjg Intrinsic
-...............
-
- Conjg(Z)
-
-Conjg: `COMPLEX' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the complex conjugate:
-
- COMPLEX(REALPART(Z), -IMAGPART(Z))
-
-\1f
-File: g77.info, Node: Cos Intrinsic, Next: CosH Intrinsic, Prev: Conjg Intrinsic, Up: Table of Intrinsic Functions
-
-Cos Intrinsic
-.............
-
- Cos(X)
-
-Cos: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the cosine of X, an angle measured in radians.
-
- *Note ACos Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: CosH Intrinsic, Next: Count Intrinsic, Prev: Cos Intrinsic, Up: Table of Intrinsic Functions
-
-CosH Intrinsic
-..............
-
- CosH(X)
-
-CosH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic cosine of X.
-
-\1f
-File: g77.info, Node: Count Intrinsic, Next: Cpu_Time Intrinsic, Prev: CosH Intrinsic, Up: Table of Intrinsic Functions
-
-Count Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Count' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Cpu_Time Intrinsic, Next: CShift Intrinsic, Prev: Count Intrinsic, Up: Table of Intrinsic Functions
-
-Cpu_Time Intrinsic
-..................
-
- CALL Cpu_Time(SECONDS)
-
-SECONDS: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns in SECONDS the current value of the system time. This
-implementation of the Fortran 95 intrinsic is just an alias for
-`second' *Note Second Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: CShift Intrinsic, Next: CSin Intrinsic, Prev: Cpu_Time Intrinsic, Up: Table of Intrinsic Functions
-
-CShift Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL CShift' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: CSin Intrinsic, Next: CSqRt Intrinsic, Prev: CShift Intrinsic, Up: Table of Intrinsic Functions
-
-CSin Intrinsic
-..............
-
- CSin(X)
-
-CSin: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-\1f
-File: g77.info, Node: CSqRt Intrinsic, Next: CTime Intrinsic (subroutine), Prev: CSin Intrinsic, Up: Table of Intrinsic Functions
-
-CSqRt Intrinsic
-...............
-
- CSqRt(X)
-
-CSqRt: `COMPLEX(KIND=1)' function.
-
-X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-\1f
-File: g77.info, Node: CTime Intrinsic (subroutine), Next: CTime Intrinsic (function), Prev: CSqRt Intrinsic, Up: Table of Intrinsic Functions
-
-CTime Intrinsic (subroutine)
-............................
-
- CALL CTime(RESULT, STIME)
-
-RESULT: `CHARACTER'; scalar; INTENT(OUT).
-
-STIME: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Converts STIME, a system time value, such as returned by `TIME8()',
-to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
-string in RESULT.
-
- *Note Time8 Intrinsic::.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note CTime
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: CTime Intrinsic (function), Next: DAbs Intrinsic, Prev: CTime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-CTime Intrinsic (function)
-..........................
-
- CTime(STIME)
-
-CTime: `CHARACTER*(*)' function.
-
-STIME: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Converts STIME, a system time value, such as returned by `TIME8()',
-to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
-string as the function value.
-
- *Note Time8 Intrinsic::.
-
- For information on other intrinsics with the same name: *Note CTime
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: DAbs Intrinsic, Next: DACos Intrinsic, Prev: CTime Intrinsic (function), Up: Table of Intrinsic Functions
-
-DAbs Intrinsic
-..............
-
- DAbs(A)
-
-DAbs: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-\1f
-File: g77.info, Node: DACos Intrinsic, Next: DASin Intrinsic, Prev: DAbs Intrinsic, Up: Table of Intrinsic Functions
-
-DACos Intrinsic
-...............
-
- DACos(X)
-
-DACos: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ACOS()' that is specific to one type for X. *Note
-ACos Intrinsic::.
-
-\1f
-File: g77.info, Node: DASin Intrinsic, Next: DATan Intrinsic, Prev: DACos Intrinsic, Up: Table of Intrinsic Functions
-
-DASin Intrinsic
-...............
-
- DASin(X)
-
-DASin: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ASIN()' that is specific to one type for X. *Note
-ASin Intrinsic::.
-
-\1f
-File: g77.info, Node: DATan Intrinsic, Next: DATan2 Intrinsic, Prev: DASin Intrinsic, Up: Table of Intrinsic Functions
-
-DATan Intrinsic
-...............
-
- DATan(X)
-
-DATan: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ATAN()' that is specific to one type for X. *Note
-ATan Intrinsic::.
-
-\1f
-File: g77.info, Node: DATan2 Intrinsic, Next: Date_and_Time Intrinsic, Prev: DATan Intrinsic, Up: Table of Intrinsic Functions
-
-DATan2 Intrinsic
-................
-
- DATan2(Y, X)
-
-DATan2: `REAL(KIND=2)' function.
-
-Y: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ATAN2()' that is specific to one type for Y and X.
-*Note ATan2 Intrinsic::.
-
-\1f
-File: g77.info, Node: Date_and_Time Intrinsic, Next: DbesJ0 Intrinsic, Prev: DATan2 Intrinsic, Up: Table of Intrinsic Functions
-
-Date_and_Time Intrinsic
-.......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Date_and_Time' to use this
-name for an external procedure.
-
-\1f
-File: g77.info, Node: DbesJ0 Intrinsic, Next: DbesJ1 Intrinsic, Prev: Date_and_Time Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJ0 Intrinsic
-................
-
- DbesJ0(X)
-
-DbesJ0: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJ0()' that is specific to one type for X. *Note
-BesJ0 Intrinsic::.
-
-\1f
-File: g77.info, Node: DbesJ1 Intrinsic, Next: DbesJN Intrinsic, Prev: DbesJ0 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJ1 Intrinsic
-................
-
- DbesJ1(X)
-
-DbesJ1: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJ1()' that is specific to one type for X. *Note
-BesJ1 Intrinsic::.
-
-\1f
-File: g77.info, Node: DbesJN Intrinsic, Next: DbesY0 Intrinsic, Prev: DbesJ1 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesJN Intrinsic
-................
-
- DbesJN(N, X)
-
-DbesJN: `REAL(KIND=2)' function.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESJN()' that is specific to one type for X. *Note
-BesJN Intrinsic::.
-
-\1f
-File: g77.info, Node: DbesY0 Intrinsic, Next: DbesY1 Intrinsic, Prev: DbesJN Intrinsic, Up: Table of Intrinsic Functions
-
-DbesY0 Intrinsic
-................
-
- DbesY0(X)
-
-DbesY0: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESY0()' that is specific to one type for X. *Note
-BesY0 Intrinsic::.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: DbesY1 Intrinsic, Next: DbesYN Intrinsic, Prev: DbesY0 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesY1 Intrinsic
-................
-
- DbesY1(X)
-
-DbesY1: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESY1()' that is specific to one type for X. *Note
-BesY1 Intrinsic::.
-
-\1f
-File: g77.info, Node: DbesYN Intrinsic, Next: Dble Intrinsic, Prev: DbesY1 Intrinsic, Up: Table of Intrinsic Functions
-
-DbesYN Intrinsic
-................
-
- DbesYN(N, X)
-
-DbesYN: `REAL(KIND=2)' function.
-
-N: `INTEGER'; scalar; INTENT(IN).
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `BESYN()' that is specific to one type for X. *Note
-BesYN Intrinsic::.
-
-\1f
-File: g77.info, Node: Dble Intrinsic, Next: DCos Intrinsic, Prev: DbesYN Intrinsic, Up: Table of Intrinsic Functions
-
-Dble Intrinsic
-..............
-
- Dble(A)
-
-Dble: `REAL(KIND=2)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A converted to double precision (`REAL(KIND=2)'). If A is
-`COMPLEX', the real part of A is used for the conversion and the
-imaginary part disregarded.
-
- *Note Sngl Intrinsic::, for the function that converts to single
-precision.
-
- *Note Int Intrinsic::, for the function that converts to `INTEGER'.
-
- *Note Complex Intrinsic::, for the function that converts to
-`COMPLEX'.
-
-\1f
-File: g77.info, Node: DCos Intrinsic, Next: DCosH Intrinsic, Prev: Dble Intrinsic, Up: Table of Intrinsic Functions
-
-DCos Intrinsic
-..............
-
- DCos(X)
-
-DCos: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COS()' that is specific to one type for X. *Note
-Cos Intrinsic::.
-
-\1f
-File: g77.info, Node: DCosH Intrinsic, Next: DDiM Intrinsic, Prev: DCos Intrinsic, Up: Table of Intrinsic Functions
-
-DCosH Intrinsic
-...............
-
- DCosH(X)
-
-DCosH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `COSH()' that is specific to one type for X. *Note
-CosH Intrinsic::.
-
-\1f
-File: g77.info, Node: DDiM Intrinsic, Next: DErF Intrinsic, Prev: DCosH Intrinsic, Up: Table of Intrinsic Functions
-
-DDiM Intrinsic
-..............
-
- DDiM(X, Y)
-
-DDiM: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Y: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `DIM()' that is specific to one type for X and Y.
-*Note DiM Intrinsic::.
-
-\1f
-File: g77.info, Node: DErF Intrinsic, Next: DErFC Intrinsic, Prev: DDiM Intrinsic, Up: Table of Intrinsic Functions
-
-DErF Intrinsic
-..............
-
- DErF(X)
-
-DErF: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `ERF()' that is specific to one type for X. *Note
-ErF Intrinsic::.
-
-\1f
-File: g77.info, Node: DErFC Intrinsic, Next: DExp Intrinsic, Prev: DErF Intrinsic, Up: Table of Intrinsic Functions
-
-DErFC Intrinsic
-...............
-
- DErFC(X)
-
-DErFC: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `ERFC()' that is specific to one type for X. *Note
-ErFC Intrinsic::.
-
-\1f
-File: g77.info, Node: DExp Intrinsic, Next: Digits Intrinsic, Prev: DErFC Intrinsic, Up: Table of Intrinsic Functions
-
-DExp Intrinsic
-..............
-
- DExp(X)
-
-DExp: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `EXP()' that is specific to one type for X. *Note
-Exp Intrinsic::.
-
-\1f
-File: g77.info, Node: Digits Intrinsic, Next: DiM Intrinsic, Prev: DExp Intrinsic, Up: Table of Intrinsic Functions
-
-Digits Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Digits' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: DiM Intrinsic, Next: DInt Intrinsic, Prev: Digits Intrinsic, Up: Table of Intrinsic Functions
-
-DiM Intrinsic
-.............
-
- DiM(X, Y)
-
-DiM: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-X: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Y: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `X-Y' if X is greater than Y; otherwise returns zero.
-
-\1f
-File: g77.info, Node: DInt Intrinsic, Next: DLog Intrinsic, Prev: DiM Intrinsic, Up: Table of Intrinsic Functions
-
-DInt Intrinsic
-..............
-
- DInt(A)
-
-DInt: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `AINT()' that is specific to one type for A. *Note
-AInt Intrinsic::.
-
-\1f
-File: g77.info, Node: DLog Intrinsic, Next: DLog10 Intrinsic, Prev: DInt Intrinsic, Up: Table of Intrinsic Functions
-
-DLog Intrinsic
-..............
-
- DLog(X)
-
-DLog: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG()' that is specific to one type for X. *Note
-Log Intrinsic::.
-
-\1f
-File: g77.info, Node: DLog10 Intrinsic, Next: DMax1 Intrinsic, Prev: DLog Intrinsic, Up: Table of Intrinsic Functions
-
-DLog10 Intrinsic
-................
-
- DLog10(X)
-
-DLog10: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `LOG10()' that is specific to one type for X. *Note
-Log10 Intrinsic::.
-
-\1f
-File: g77.info, Node: DMax1 Intrinsic, Next: DMin1 Intrinsic, Prev: DLog10 Intrinsic, Up: Table of Intrinsic Functions
-
-DMax1 Intrinsic
-...............
-
- DMax1(A-1, A-2, ..., A-n)
-
-DMax1: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-\1f
-File: g77.info, Node: DMin1 Intrinsic, Next: DMod Intrinsic, Prev: DMax1 Intrinsic, Up: Table of Intrinsic Functions
-
-DMin1 Intrinsic
-...............
-
- DMin1(A-1, A-2, ..., A-n)
-
-DMin1: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-\1f
-File: g77.info, Node: DMod Intrinsic, Next: DNInt Intrinsic, Prev: DMin1 Intrinsic, Up: Table of Intrinsic Functions
-
-DMod Intrinsic
-..............
-
- DMod(A, P)
-
-DMod: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-P: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MOD()' that is specific to one type for A. *Note
-Mod Intrinsic::.
-
-\1f
-File: g77.info, Node: DNInt Intrinsic, Next: Dot_Product Intrinsic, Prev: DMod Intrinsic, Up: Table of Intrinsic Functions
-
-DNInt Intrinsic
-...............
-
- DNInt(A)
-
-DNInt: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ANINT()' that is specific to one type for A. *Note
-ANInt Intrinsic::.
-
-\1f
-File: g77.info, Node: Dot_Product Intrinsic, Next: DProd Intrinsic, Prev: DNInt Intrinsic, Up: Table of Intrinsic Functions
-
-Dot_Product Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Dot_Product' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: DProd Intrinsic, Next: DSign Intrinsic, Prev: Dot_Product Intrinsic, Up: Table of Intrinsic Functions
-
-DProd Intrinsic
-...............
-
- DProd(X, Y)
-
-DProd: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Y: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `DBLE(X)*DBLE(Y)'.
-
-\1f
-File: g77.info, Node: DSign Intrinsic, Next: DSin Intrinsic, Prev: DProd Intrinsic, Up: Table of Intrinsic Functions
-
-DSign Intrinsic
-...............
-
- DSign(A, B)
-
-DSign: `REAL(KIND=2)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-B: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIGN()' that is specific to one type for A and B.
-*Note Sign Intrinsic::.
-
-\1f
-File: g77.info, Node: DSin Intrinsic, Next: DSinH Intrinsic, Prev: DSign Intrinsic, Up: Table of Intrinsic Functions
-
-DSin Intrinsic
-..............
-
- DSin(X)
-
-DSin: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIN()' that is specific to one type for X. *Note
-Sin Intrinsic::.
-
-\1f
-File: g77.info, Node: DSinH Intrinsic, Next: DSqRt Intrinsic, Prev: DSin Intrinsic, Up: Table of Intrinsic Functions
-
-DSinH Intrinsic
-...............
-
- DSinH(X)
-
-DSinH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SINH()' that is specific to one type for X. *Note
-SinH Intrinsic::.
-
-\1f
-File: g77.info, Node: DSqRt Intrinsic, Next: DTan Intrinsic, Prev: DSinH Intrinsic, Up: Table of Intrinsic Functions
-
-DSqRt Intrinsic
-...............
-
- DSqRt(X)
-
-DSqRt: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SQRT()' that is specific to one type for X. *Note
-SqRt Intrinsic::.
-
-\1f
-File: g77.info, Node: DTan Intrinsic, Next: DTanH Intrinsic, Prev: DSqRt Intrinsic, Up: Table of Intrinsic Functions
-
-DTan Intrinsic
-..............
-
- DTan(X)
-
-DTan: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `TAN()' that is specific to one type for X. *Note
-Tan Intrinsic::.
-
-\1f
-File: g77.info, Node: DTanH Intrinsic, Next: Dtime Intrinsic (subroutine), Prev: DTan Intrinsic, Up: Table of Intrinsic Functions
-
-DTanH Intrinsic
-...............
-
- DTanH(X)
-
-DTanH: `REAL(KIND=2)' function.
-
-X: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `TANH()' that is specific to one type for X. *Note
-TanH Intrinsic::.
-
-\1f
-File: g77.info, Node: Dtime Intrinsic (subroutine), Next: EOShift Intrinsic, Prev: DTanH Intrinsic, Up: Table of Intrinsic Functions
-
-Dtime Intrinsic (subroutine)
-............................
-
- CALL Dtime(RESULT, TARRAY)
-
-RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Initially, return the number of seconds of runtime since the start
-of the process's execution in RESULT, and the user and system
-components of this in `TARRAY(1)' and `TARRAY(2)' respectively. The
-value of RESULT is equal to `TARRAY(1) + TARRAY(2)'.
-
- Subsequent invocations of `DTIME()' set values based on accumulations
-since the previous invocation.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note Dtime
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: EOShift Intrinsic, Next: Epsilon Intrinsic, Prev: Dtime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-EOShift Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL EOShift' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Epsilon Intrinsic, Next: ErF Intrinsic, Prev: EOShift Intrinsic, Up: Table of Intrinsic Functions
-
-Epsilon Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Epsilon' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: ErF Intrinsic, Next: ErFC Intrinsic, Prev: Epsilon Intrinsic, Up: Table of Intrinsic Functions
-
-ErF Intrinsic
-.............
-
- ErF(X)
-
-ErF: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the error function of X. See `erf(3m)', which provides the
-implementation.
-
-\1f
-File: g77.info, Node: ErFC Intrinsic, Next: ETime Intrinsic (subroutine), Prev: ErF Intrinsic, Up: Table of Intrinsic Functions
-
-ErFC Intrinsic
-..............
-
- ErFC(X)
-
-ErFC: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the complementary error function of X: `ERFC(R) = 1 -
-ERF(R)' (except that the result may be more accurate than explicitly
-evaluating that formulae would give). See `erfc(3m)', which provides
-the implementation.
-
-\1f
-File: g77.info, Node: ETime Intrinsic (subroutine), Next: ETime Intrinsic (function), Prev: ErFC Intrinsic, Up: Table of Intrinsic Functions
-
-ETime Intrinsic (subroutine)
-............................
-
- CALL ETime(RESULT, TARRAY)
-
-RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Return the number of seconds of runtime since the start of the
-process's execution in RESULT, and the user and system components of
-this in `TARRAY(1)' and `TARRAY(2)' respectively. The value of RESULT
-is equal to `TARRAY(1) + TARRAY(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note ETime
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: ETime Intrinsic (function), Next: Exit Intrinsic, Prev: ETime Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-ETime Intrinsic (function)
-..........................
-
- ETime(TARRAY)
-
-ETime: `REAL(KIND=1)' function.
-
-TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Return the number of seconds of runtime since the start of the
-process's execution as the function value, and the user and system
-components of this in `TARRAY(1)' and `TARRAY(2)' respectively. The
-functions' value is equal to `TARRAY(1) + TARRAY(2)'.
-
- For information on other intrinsics with the same name: *Note ETime
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Exit Intrinsic, Next: Exp Intrinsic, Prev: ETime Intrinsic (function), Up: Table of Intrinsic Functions
-
-Exit Intrinsic
-..............
-
- CALL Exit(STATUS)
-
-STATUS: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Exit the program with status STATUS after closing open Fortran I/O
-units and otherwise behaving as `exit(2)'. If STATUS is omitted the
-canonical `success' value will be returned to the system.
-
-\1f
-File: g77.info, Node: Exp Intrinsic, Next: Exponent Intrinsic, Prev: Exit Intrinsic, Up: Table of Intrinsic Functions
-
-Exp Intrinsic
-.............
-
- Exp(X)
-
-Exp: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `E**X', where E is approximately 2.7182818.
-
- *Note Log Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: Exponent Intrinsic, Next: Fdate Intrinsic (subroutine), Prev: Exp Intrinsic, Up: Table of Intrinsic Functions
-
-Exponent Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Exponent' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Fdate Intrinsic (subroutine), Next: Fdate Intrinsic (function), Prev: Exponent Intrinsic, Up: Table of Intrinsic Functions
-
-Fdate Intrinsic (subroutine)
-............................
-
- CALL Fdate(DATE)
-
-DATE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current date (using the same format as `CTIME()') in
-DATE.
-
- Equivalent to:
-
- CALL CTIME(DATE, TIME8())
-
- *Note CTime Intrinsic (subroutine)::.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note Fdate
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Fdate Intrinsic (function), Next: FGet Intrinsic (subroutine), Prev: Fdate Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Fdate Intrinsic (function)
-..........................
-
- Fdate()
-
-Fdate: `CHARACTER*(*)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current date (using the same format as `CTIME()').
-
- Equivalent to:
-
- CTIME(TIME8())
-
- *Note CTime Intrinsic (function)::.
-
- For information on other intrinsics with the same name: *Note Fdate
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FGet Intrinsic (subroutine), Next: FGetC Intrinsic (subroutine), Prev: Fdate Intrinsic (function), Up: Table of Intrinsic Functions
-
-FGet Intrinsic (subroutine)
-...........................
-
- CALL FGet(C, STATUS)
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reads a single character into C in stream mode from unit 5
-(by-passing normal formatted output) using `getc(3)'. Returns in
-STATUS 0 on success, -1 on end-of-file, and the error code from
-`ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGet
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: FGetC Intrinsic (subroutine), Next: Float Intrinsic, Prev: FGet Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FGetC Intrinsic (subroutine)
-............................
-
- CALL FGetC(UNIT, C, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reads a single character into C in stream mode from unit UNIT
-(by-passing normal formatted output) using `getc(3)'. Returns in
-STATUS 0 on success, -1 on end-of-file, and the error code from
-`ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FGetC
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Float Intrinsic, Next: Floor Intrinsic, Prev: FGetC Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Float Intrinsic
-...............
-
- Float(A)
-
-Float: `REAL(KIND=1)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-\1f
-File: g77.info, Node: Floor Intrinsic, Next: Flush Intrinsic, Prev: Float Intrinsic, Up: Table of Intrinsic Functions
-
-Floor Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Floor' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Flush Intrinsic, Next: FNum Intrinsic, Prev: Floor Intrinsic, Up: Table of Intrinsic Functions
-
-Flush Intrinsic
-...............
-
- CALL Flush(UNIT)
-
-UNIT: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Flushes Fortran unit(s) currently open for output. Without the
-optional argument, all such units are flushed, otherwise just the unit
-specified by UNIT.
-
- Some non-GNU implementations of Fortran provide this intrinsic as a
-library procedure that might or might not support the (optional) UNIT
-argument.
-
-\1f
-File: g77.info, Node: FNum Intrinsic, Next: FPut Intrinsic (subroutine), Prev: Flush Intrinsic, Up: Table of Intrinsic Functions
-
-FNum Intrinsic
-..............
-
- FNum(UNIT)
-
-FNum: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the Unix file descriptor number corresponding to the open
-Fortran I/O unit UNIT. This could be passed to an interface to C I/O
-routines.
-
-\1f
-File: g77.info, Node: FPut Intrinsic (subroutine), Next: FPutC Intrinsic (subroutine), Prev: FNum Intrinsic, Up: Table of Intrinsic Functions
-
-FPut Intrinsic (subroutine)
-...........................
-
- CALL FPut(C, STATUS)
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Writes the single character C in stream mode to unit 6 (by-passing
-normal formatted output) using `putc(3)'. Returns in STATUS 0 on
-success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPut
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: FPutC Intrinsic (subroutine), Next: Fraction Intrinsic, Prev: FPut Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FPutC Intrinsic (subroutine)
-............................
-
- CALL FPutC(UNIT, C, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Writes the single character UNIT in stream mode to unit 6
-(by-passing normal formatted output) using `putc(3)'. Returns in C 0
-on success, the error code from `ferror(3)' otherwise.
-
- Stream I/O should not be mixed with normal record-oriented
-(formatted or unformatted) I/O on the same unit; the results are
-unpredictable.
-
- For information on other intrinsics with the same name: *Note FPutC
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Fraction Intrinsic, Next: FSeek Intrinsic, Prev: FPutC Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Fraction Intrinsic
-..................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Fraction' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: FSeek Intrinsic, Next: FStat Intrinsic (subroutine), Prev: Fraction Intrinsic, Up: Table of Intrinsic Functions
-
-FSeek Intrinsic
-...............
-
- CALL FSeek(UNIT, OFFSET, WHENCE, ERRLAB)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-OFFSET: `INTEGER'; scalar; INTENT(IN).
-
-WHENCE: `INTEGER'; scalar; INTENT(IN).
-
-ERRLAB: `*LABEL', where LABEL is the label of an executable statement;
-OPTIONAL.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Attempts to move Fortran unit UNIT to the specified OFFSET: absolute
-offset if OFFSET=0; relative to the current offset if OFFSET=1;
-relative to the end of the file if OFFSET=2. It branches to label
-WHENCE if UNIT is not open or if the call otherwise fails.
-
-\1f
-File: g77.info, Node: FStat Intrinsic (subroutine), Next: FStat Intrinsic (function), Prev: FSeek Intrinsic, Up: Table of Intrinsic Functions
-
-FStat Intrinsic (subroutine)
-............................
-
- CALL FStat(UNIT, SARRAY, STATUS)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the file open on Fortran I/O unit UNIT and places
-them in the array SARRAY. The values in this array are extracted from
-the `stat' structure as returned by `fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note FStat
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: FStat Intrinsic (function), Next: FTell Intrinsic (subroutine), Prev: FStat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FStat Intrinsic (function)
-..........................
-
- FStat(UNIT, SARRAY)
-
-FStat: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the file open on Fortran I/O unit UNIT and places
-them in the array SARRAY. The values in this array are extracted from
-the `stat' structure as returned by `fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code.
-
- For information on other intrinsics with the same name: *Note FStat
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: FTell Intrinsic (subroutine), Next: FTell Intrinsic (function), Prev: FStat Intrinsic (function), Up: Table of Intrinsic Functions
-
-FTell Intrinsic (subroutine)
-............................
-
- CALL FTell(UNIT, OFFSET)
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-OFFSET: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets OFFSET to the current offset of Fortran unit UNIT (or to -1 if
-UNIT is not open).
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine.
-
- For information on other intrinsics with the same name: *Note FTell
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: FTell Intrinsic (function), Next: GError Intrinsic, Prev: FTell Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-FTell Intrinsic (function)
-..........................
-
- FTell(UNIT)
-
-FTell: `INTEGER(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current offset of Fortran unit UNIT (or -1 if UNIT is
-not open).
-
- For information on other intrinsics with the same name: *Note FTell
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: GError Intrinsic, Next: GetArg Intrinsic, Prev: FTell Intrinsic (function), Up: Table of Intrinsic Functions
-
-GError Intrinsic
-................
-
- CALL GError(MESSAGE)
-
-MESSAGE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the system error message corresponding to the last system
-error (C `errno').
-
-\1f
-File: g77.info, Node: GetArg Intrinsic, Next: GetCWD Intrinsic (subroutine), Prev: GError Intrinsic, Up: Table of Intrinsic Functions
-
-GetArg Intrinsic
-................
-
- CALL GetArg(POS, VALUE)
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-VALUE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets VALUE to the POS-th command-line argument (or to all blanks if
-there are fewer than VALUE command-line arguments); `CALL GETARG(0,
-VALUE)' sets VALUE to the name of the program (on systems that support
-this feature).
-
- *Note IArgC Intrinsic::, for information on how to get the number of
-arguments.
-
-\1f
-File: g77.info, Node: GetCWD Intrinsic (subroutine), Next: GetCWD Intrinsic (function), Prev: GetArg Intrinsic, Up: Table of Intrinsic Functions
-
-GetCWD Intrinsic (subroutine)
-.............................
-
- CALL GetCWD(NAME, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Places the current working directory in NAME. If the STATUS
-argument is supplied, it contains 0 success or a non-zero error code
-upon return (`ENOSYS' if the system does not provide `getcwd(3)' or
-`getwd(3)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note GetCWD
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: GetCWD Intrinsic (function), Next: GetEnv Intrinsic, Prev: GetCWD Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-GetCWD Intrinsic (function)
-...........................
-
- GetCWD(NAME)
-
-GetCWD: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Places the current working directory in NAME. Returns 0 on success,
-otherwise a non-zero error code (`ENOSYS' if the system does not
-provide `getcwd(3)' or `getwd(3)').
-
- For information on other intrinsics with the same name: *Note GetCWD
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: GetEnv Intrinsic, Next: GetGId Intrinsic, Prev: GetCWD Intrinsic (function), Up: Table of Intrinsic Functions
-
-GetEnv Intrinsic
-................
-
- CALL GetEnv(NAME, VALUE)
-
-NAME: `CHARACTER'; scalar; INTENT(IN).
-
-VALUE: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sets VALUE to the value of environment variable given by the value
-of NAME (`$name' in shell terms) or to blanks if `$name' has not been
-set. A null character (`CHAR(0)') marks the end of the name in
-NAME--otherwise, trailing blanks in NAME are ignored.
-
-\1f
-File: g77.info, Node: GetGId Intrinsic, Next: GetLog Intrinsic, Prev: GetEnv Intrinsic, Up: Table of Intrinsic Functions
-
-GetGId Intrinsic
-................
-
- GetGId()
-
-GetGId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the group id for the current process.
-
-\1f
-File: g77.info, Node: GetLog Intrinsic, Next: GetPId Intrinsic, Prev: GetGId Intrinsic, Up: Table of Intrinsic Functions
-
-GetLog Intrinsic
-................
-
- CALL GetLog(LOGIN)
-
-LOGIN: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the login name for the process in LOGIN.
-
-\1f
-File: g77.info, Node: GetPId Intrinsic, Next: GetUId Intrinsic, Prev: GetLog Intrinsic, Up: Table of Intrinsic Functions
-
-GetPId Intrinsic
-................
-
- GetPId()
-
-GetPId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process id for the current process.
-
-\1f
-File: g77.info, Node: GetUId Intrinsic, Next: GMTime Intrinsic, Prev: GetPId Intrinsic, Up: Table of Intrinsic Functions
-
-GetUId Intrinsic
-................
-
- GetUId()
-
-GetUId: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the user id for the current process.
-
-\1f
-File: g77.info, Node: GMTime Intrinsic, Next: HostNm Intrinsic (subroutine), Prev: GetUId Intrinsic, Up: Table of Intrinsic Functions
-
-GMTime Intrinsic
-................
-
- CALL GMTime(STIME, TARRAY)
-
-STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Given a system time value STIME, fills TARRAY with values extracted
-from it appropriate to the GMT time zone using `gmtime(3)'.
-
- The array elements are as follows:
-
- 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
- seconds
-
- 2. Minutes after the hour, range 0-59
-
- 3. Hours past midnight, range 0-23
-
- 4. Day of month, range 0-31
-
- 5. Number of months since January, range 0-12
-
- 6. Years since 1900
-
- 7. Number of days since Sunday, range 0-6
-
- 8. Days since January 1
-
- 9. Daylight savings indicator: positive if daylight savings is in
- effect, zero if not, and negative if the information isn't
- available.
-
-\1f
-File: g77.info, Node: HostNm Intrinsic (subroutine), Next: HostNm Intrinsic (function), Prev: GMTime Intrinsic, Up: Table of Intrinsic Functions
-
-HostNm Intrinsic (subroutine)
-.............................
-
- CALL HostNm(NAME, STATUS)
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills NAME with the system's host name returned by `gethostname(2)'.
-If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return (`ENOSYS' if the system does not
-provide `gethostname(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note HostNm
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: HostNm Intrinsic (function), Next: Huge Intrinsic, Prev: HostNm Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-HostNm Intrinsic (function)
-...........................
-
- HostNm(NAME)
-
-HostNm: `INTEGER(KIND=1)' function.
-
-NAME: `CHARACTER'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills NAME with the system's host name returned by `gethostname(2)',
-returning 0 on success or a non-zero error code (`ENOSYS' if the system
-does not provide `gethostname(2)').
-
- For information on other intrinsics with the same name: *Note HostNm
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Huge Intrinsic, Next: IAbs Intrinsic, Prev: HostNm Intrinsic (function), Up: Table of Intrinsic Functions
-
-Huge Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Huge' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: IAbs Intrinsic, Next: IAChar Intrinsic, Prev: Huge Intrinsic, Up: Table of Intrinsic Functions
-
-IAbs Intrinsic
-..............
-
- IAbs(A)
-
-IAbs: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `ABS()' that is specific to one type for A. *Note
-Abs Intrinsic::.
-
-\1f
-File: g77.info, Node: IAChar Intrinsic, Next: IAnd Intrinsic, Prev: IAbs Intrinsic, Up: Table of Intrinsic Functions
-
-IAChar Intrinsic
-................
-
- IAChar(C)
-
-IAChar: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c', `f90'.
-
-Description:
-
- Returns the code for the ASCII character in the first character
-position of C.
-
- *Note AChar Intrinsic::, for the inverse of this function.
-
- *Note IChar Intrinsic::, for the function corresponding to the
-system's native character set.
-
-\1f
-File: g77.info, Node: IAnd Intrinsic, Next: IArgC Intrinsic, Prev: IAChar Intrinsic, Up: Table of Intrinsic Functions
-
-IAnd Intrinsic
-..............
-
- IAnd(I, J)
-
-IAnd: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean AND of pair of bits in each of
-I and J.
-
-\1f
-File: g77.info, Node: IArgC Intrinsic, Next: IBClr Intrinsic, Prev: IAnd Intrinsic, Up: Table of Intrinsic Functions
-
-IArgC Intrinsic
-...............
-
- IArgC()
-
-IArgC: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of command-line arguments.
-
- This count does not include the specification of the program name
-itself.
-
-\1f
-File: g77.info, Node: IBClr Intrinsic, Next: IBits Intrinsic, Prev: IArgC Intrinsic, Up: Table of Intrinsic Functions
-
-IBClr Intrinsic
-...............
-
- IBClr(I, POS)
-
-IBClr: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns the value of I with bit POS cleared (set to zero). *Note
-BTest Intrinsic:: for information on bit positions.
-
-\1f
-File: g77.info, Node: IBits Intrinsic, Next: IBSet Intrinsic, Prev: IBClr Intrinsic, Up: Table of Intrinsic Functions
-
-IBits Intrinsic
-...............
-
- IBits(I, POS, LEN)
-
-IBits: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-LEN: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Extracts a subfield of length LEN from I, starting from bit position
-POS and extending left for LEN bits. The result is right-justified and
-the remaining bits are zeroed. The value of `POS+LEN' must be less
-than or equal to the value `BIT_SIZE(I)'. *Note Bit_Size Intrinsic::.
-
-\1f
-File: g77.info, Node: IBSet Intrinsic, Next: IChar Intrinsic, Prev: IBits Intrinsic, Up: Table of Intrinsic Functions
-
-IBSet Intrinsic
-...............
-
- IBSet(I, POS)
-
-IBSet: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-POS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns the value of I with bit POS set (to one). *Note BTest
-Intrinsic:: for information on bit positions.
-
-\1f
-File: g77.info, Node: IChar Intrinsic, Next: IDate Intrinsic (UNIX), Prev: IBSet Intrinsic, Up: Table of Intrinsic Functions
-
-IChar Intrinsic
-...............
-
- IChar(C)
-
-IChar: `INTEGER(KIND=1)' function.
-
-C: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the code for the character in the first character position
-of C.
-
- Because the system's native character set is used, the
-correspondence between character and their codes is not necessarily the
-same between GNU Fortran implementations.
-
- Note that no intrinsic exists to convert a printable character
-string to a numerical value. For example, there is no intrinsic that,
-given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL'
-value with the value `154'.
-
- Instead, you can use internal-file I/O to do this kind of conversion.
-For example:
-
- INTEGER VALUE
- CHARACTER*10 STRING
- STRING = '154'
- READ (STRING, '(I10)'), VALUE
- PRINT *, VALUE
- END
-
- The above program, when run, prints:
-
- 154
-
- *Note Char Intrinsic::, for the inverse of the `ICHAR' function.
-
- *Note IAChar Intrinsic::, for the function corresponding to the
-ASCII character set.
-
-\1f
-File: g77.info, Node: IDate Intrinsic (UNIX), Next: IDiM Intrinsic, Prev: IChar Intrinsic, Up: Table of Intrinsic Functions
-
-IDate Intrinsic (UNIX)
-......................
-
- CALL IDate(TARRAY)
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Fills TARRAY with the numerical values at the current local time of
-day, month (in the range 1-12), and year in elements 1, 2, and 3,
-respectively. The year has four significant digits.
-
- For information on other intrinsics with the same name: *Note IDate
-Intrinsic (VXT)::.
-
-\1f
-File: g77.info, Node: IDiM Intrinsic, Next: IDInt Intrinsic, Prev: IDate Intrinsic (UNIX), Up: Table of Intrinsic Functions
-
-IDiM Intrinsic
-..............
-
- IDiM(X, Y)
-
-IDiM: `INTEGER(KIND=1)' function.
-
-X: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Y: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `DIM()' that is specific to one type for X and Y.
-*Note DiM Intrinsic::.
-
-\1f
-File: g77.info, Node: IDInt Intrinsic, Next: IDNInt Intrinsic, Prev: IDiM Intrinsic, Up: Table of Intrinsic Functions
-
-IDInt Intrinsic
-...............
-
- IDInt(A)
-
-IDInt: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
-\1f
-File: g77.info, Node: IDNInt Intrinsic, Next: IEOr Intrinsic, Prev: IDInt Intrinsic, Up: Table of Intrinsic Functions
-
-IDNInt Intrinsic
-................
-
- IDNInt(A)
-
-IDNInt: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `NINT()' that is specific to one type for A. *Note
-NInt Intrinsic::.
-
-\1f
-File: g77.info, Node: IEOr Intrinsic, Next: IErrNo Intrinsic, Prev: IDNInt Intrinsic, Up: Table of Intrinsic Functions
-
-IEOr Intrinsic
-..............
-
- IEOr(I, J)
-
-IEOr: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean exclusive-OR of pair of bits in
-each of I and J.
-
-\1f
-File: g77.info, Node: IErrNo Intrinsic, Next: IFix Intrinsic, Prev: IEOr Intrinsic, Up: Table of Intrinsic Functions
-
-IErrNo Intrinsic
-................
-
- IErrNo()
-
-IErrNo: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the last system error number (corresponding to the C
-`errno').
-
-\1f
-File: g77.info, Node: IFix Intrinsic, Next: Imag Intrinsic, Prev: IErrNo Intrinsic, Up: Table of Intrinsic Functions
-
-IFix Intrinsic
-..............
-
- IFix(A)
-
-IFix: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
-\1f
-File: g77.info, Node: Imag Intrinsic, Next: ImagPart Intrinsic, Prev: IFix Intrinsic, Up: Table of Intrinsic Functions
-
-Imag Intrinsic
-..............
-
- Imag(Z)
-
-Imag: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- The imaginary part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
-However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `IMAG()' is that, while not necessarily more or
-less portable than `AIMAG()', it is more likely to cause a compiler
-that doesn't support it to produce a diagnostic than generate incorrect
-code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-\1f
-File: g77.info, Node: ImagPart Intrinsic, Next: Index Intrinsic, Prev: Imag Intrinsic, Up: Table of Intrinsic Functions
-
-ImagPart Intrinsic
-..................
-
- ImagPart(Z)
-
-ImagPart: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- The imaginary part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
-However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `IMAGPART()' is that, while not necessarily more or
-less portable than `AIMAG()', it is more likely to cause a compiler
-that doesn't support it to produce a diagnostic than generate incorrect
-code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-\1f
-File: g77.info, Node: Index Intrinsic, Next: Int Intrinsic, Prev: ImagPart Intrinsic, Up: Table of Intrinsic Functions
-
-Index Intrinsic
-...............
-
- Index(STRING, SUBSTRING)
-
-Index: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-SUBSTRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the position of the start of the first occurrence of string
-SUBSTRING as a substring in STRING, counting from one. If SUBSTRING
-doesn't occur in STRING, zero is returned.
-
-\1f
-File: g77.info, Node: Int Intrinsic, Next: Int2 Intrinsic, Prev: Index Intrinsic, Up: Table of Intrinsic Functions
-
-Int Intrinsic
-.............
-
- Int(A)
-
-Int: `INTEGER(KIND=1)' function.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=1)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disregarded.
-
- *Note NInt Intrinsic::, for how to convert, rounded to nearest whole
-number.
-
- *Note AInt Intrinsic::, for how to truncate to whole number without
-converting.
-
-\1f
-File: g77.info, Node: Int2 Intrinsic, Next: Int8 Intrinsic, Prev: Int Intrinsic, Up: Table of Intrinsic Functions
-
-Int2 Intrinsic
-..............
-
- Int2(A)
-
-Int2: `INTEGER(KIND=6)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=6)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-\1f
-File: g77.info, Node: Int8 Intrinsic, Next: IOr Intrinsic, Prev: Int2 Intrinsic, Up: Table of Intrinsic Functions
-
-Int8 Intrinsic
-..............
-
- Int8(A)
-
-Int8: `INTEGER(KIND=2)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=2)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-\1f
-File: g77.info, Node: IOr Intrinsic, Next: IRand Intrinsic, Prev: Int8 Intrinsic, Up: Table of Intrinsic Functions
-
-IOr Intrinsic
-.............
-
- IOr(I, J)
-
-IOr: `INTEGER' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-J: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean OR of pair of bits in each of I
-and J.
-
-\1f
-File: g77.info, Node: IRand Intrinsic, Next: IsaTty Intrinsic, Prev: IOr Intrinsic, Up: Table of Intrinsic Functions
-
-IRand Intrinsic
-...............
-
- IRand(FLAG)
-
-IRand: `INTEGER(KIND=1)' function.
-
-FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns a uniform quasi-random number up to a system-dependent limit.
-If FLAG is 0, the next number in sequence is returned; if FLAG is 1,
-the generator is restarted by calling the UNIX function `srand(0)'; if
-FLAG has any other value, it is used as a new seed with `srand()'.
-
- *Note SRand Intrinsic::.
-
- *Note:* As typically implemented (by the routine of the same name in
-the C library), this random number generator is a very poor one, though
-the BSD and GNU libraries provide a much better implementation than the
-`traditional' one. On a different system you almost certainly want to
-use something better.
-
-\1f
-File: g77.info, Node: IsaTty Intrinsic, Next: IShft Intrinsic, Prev: IRand Intrinsic, Up: Table of Intrinsic Functions
-
-IsaTty Intrinsic
-................
-
- IsaTty(UNIT)
-
-IsaTty: `LOGICAL(KIND=1)' function.
-
-UNIT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns `.TRUE.' if and only if the Fortran I/O unit specified by
-UNIT is connected to a terminal device. See `isatty(3)'.
-
-\1f
-File: g77.info, Node: IShft Intrinsic, Next: IShftC Intrinsic, Prev: IsaTty Intrinsic, Up: Table of Intrinsic Functions
-
-IShft Intrinsic
-...............
-
- IShft(I, SHIFT)
-
-IShft: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- All bits representing I are shifted SHIFT places. `SHIFT.GT.0'
-indicates a left shift, `SHIFT.EQ.0' indicates no shift and
-`SHIFT.LT.0' indicates a right shift. If the absolute value of the
-shift count is greater than `BIT_SIZE(I)', the result is undefined.
-Bits shifted out from the left end or the right end, as the case may be,
-are lost. Zeros are shifted in from the opposite end.
-
- *Note IShftC Intrinsic:: for the circular-shift equivalent.
-
+++ /dev/null
-This is Info file g77.info, produced by Makeinfo version 1.68 from the
-input file g77.texi.
-
- This file explains how to use the GNU Fortran system.
-
- Published by the Free Software Foundation 59 Temple Place - Suite 330
-Boston, MA 02111-1307 USA
-
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the sections entitled "GNU General Public License," "Funding for
-Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the sections entitled "GNU General Public
-License," "Funding for Free Software," and "Protect Your Freedom--Fight
-`Look And Feel'", and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
-
- Contributed by James Craig Burley (<burley@gnu.ai.mit.edu>).
-Inspired by a first pass at translating `g77-0.5.16/f/DOC' that was
-contributed to Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
-
-INFO-DIR-SECTION Fortran Programming
-START-INFO-DIR-ENTRY
-* g77: (g77). The GNU Fortran compilation system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: g77.info, Node: IShftC Intrinsic, Next: ISign Intrinsic, Prev: IShft Intrinsic, Up: Table of Intrinsic Functions
-
-IShftC Intrinsic
-................
-
- IShftC(I, SHIFT, SIZE)
-
-IShftC: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-SIZE: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- The rightmost SIZE bits of the argument I are shifted circularly
-SHIFT places, i.e. the bits shifted out of one end are shifted into the
-opposite end. No bits are lost. The unshifted bits of the result are
-the same as the unshifted bits of I. The absolute value of the
-argument SHIFT must be less than or equal to SIZE. The value of SIZE
-must be greater than or equal to one and less than or equal to
-`BIT_SIZE(I)'.
-
- *Note IShft Intrinsic:: for the logical shift equivalent.
-
-\1f
-File: g77.info, Node: ISign Intrinsic, Next: ITime Intrinsic, Prev: IShftC Intrinsic, Up: Table of Intrinsic Functions
-
-ISign Intrinsic
-...............
-
- ISign(A, B)
-
-ISign: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-B: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `SIGN()' that is specific to one type for A and B.
-*Note Sign Intrinsic::.
-
-\1f
-File: g77.info, Node: ITime Intrinsic, Next: Kill Intrinsic (subroutine), Prev: ISign Intrinsic, Up: Table of Intrinsic Functions
-
-ITime Intrinsic
-...............
-
- CALL ITime(TARRAY)
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the current local time hour, minutes, and seconds in elements
-1, 2, and 3 of TARRAY, respectively.
-
-\1f
-File: g77.info, Node: Kill Intrinsic (subroutine), Next: Kind Intrinsic, Prev: ITime Intrinsic, Up: Table of Intrinsic Functions
-
-Kill Intrinsic (subroutine)
-...........................
-
- CALL Kill(PID, SIGNAL, STATUS)
-
-PID: `INTEGER'; scalar; INTENT(IN).
-
-SIGNAL: `INTEGER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Sends the signal specified by SIGNAL to the process PID. If the
-STATUS argument is supplied, it contains 0 on success or a non-zero
-error code upon return. See `kill(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Kill
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Kind Intrinsic, Next: LBound Intrinsic, Prev: Kill Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Kind Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Kind' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: LBound Intrinsic, Next: Len Intrinsic, Prev: Kind Intrinsic, Up: Table of Intrinsic Functions
-
-LBound Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL LBound' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Len Intrinsic, Next: Len_Trim Intrinsic, Prev: LBound Intrinsic, Up: Table of Intrinsic Functions
-
-Len Intrinsic
-.............
-
- Len(STRING)
-
-Len: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar.
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the length of STRING.
-
- If STRING is an array, the length of an element of STRING is
-returned.
-
- Note that STRING need not be defined when this intrinsic is invoked,
-since only the length, not the content, of STRING is needed.
-
- *Note Bit_Size Intrinsic::, for the function that determines the
-size of its argument in bits.
-
-\1f
-File: g77.info, Node: Len_Trim Intrinsic, Next: LGe Intrinsic, Prev: Len Intrinsic, Up: Table of Intrinsic Functions
-
-Len_Trim Intrinsic
-..................
-
- Len_Trim(STRING)
-
-Len_Trim: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f90'.
-
-Description:
-
- Returns the index of the last non-blank character in STRING.
-`LNBLNK' and `LEN_TRIM' are equivalent.
-
-\1f
-File: g77.info, Node: LGe Intrinsic, Next: LGt Intrinsic, Prev: Len_Trim Intrinsic, Up: Table of Intrinsic Functions
-
-LGe Intrinsic
-.............
-
- LGe(STRING_A, STRING_B)
-
-LGe: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.GE.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- The lexical comparison intrinsics `LGe', `LGt', `LLe', and `LLt'
-differ from the corresponding intrinsic operators `.GE.', `.GT.',
-`.LE.', `.LT.'. Because the ASCII collating sequence is assumed, the
-following expressions always return `.TRUE.':
-
- LGE ('0', ' ')
- LGE ('A', '0')
- LGE ('a', 'A')
-
- The following related expressions do *not* always return `.TRUE.',
-as they are not necessarily evaluated assuming the arguments use ASCII
-encoding:
-
- '0' .GE. ' '
- 'A' .GE. '0'
- 'a' .GE. 'A'
-
- The same difference exists between `LGt' and `.GT.'; between `LLe'
-and `.LE.'; and between `LLt' and `.LT.'.
-
-\1f
-File: g77.info, Node: LGt Intrinsic, Next: Link Intrinsic (subroutine), Prev: LGe Intrinsic, Up: Table of Intrinsic Functions
-
-LGt Intrinsic
-.............
-
- LGt(STRING_A, STRING_B)
-
-LGt: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.GT.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LGT' intrinsic and the `.GT.' operator.
-
-\1f
-File: g77.info, Node: Link Intrinsic (subroutine), Next: LLe Intrinsic, Prev: LGt Intrinsic, Up: Table of Intrinsic Functions
-
-Link Intrinsic (subroutine)
-...........................
-
- CALL Link(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Makes a (hard) link from file PATH1 to PATH2. A null character
-(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
-trailing blanks in PATH1 and PATH2 are ignored. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return. See `link(2)'.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Link
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: LLe Intrinsic, Next: LLt Intrinsic, Prev: Link Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-LLe Intrinsic
-.............
-
- LLe(STRING_A, STRING_B)
-
-LLe: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.LE.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LLE' intrinsic and the `.LE.' operator.
-
-\1f
-File: g77.info, Node: LLt Intrinsic, Next: LnBlnk Intrinsic, Prev: LLe Intrinsic, Up: Table of Intrinsic Functions
-
-LLt Intrinsic
-.............
-
- LLt(STRING_A, STRING_B)
-
-LLt: `LOGICAL(KIND=1)' function.
-
-STRING_A: `CHARACTER'; scalar; INTENT(IN).
-
-STRING_B: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `.TRUE.' if `STRING_A.LT.STRING_B', `.FALSE.' otherwise.
-STRING_A and STRING_B are interpreted as containing ASCII character
-codes. If either value contains a character not in the ASCII character
-set, the result is processor dependent.
-
- If the STRING_A and STRING_B are not the same length, the shorter is
-compared as if spaces were appended to it to form a value that has the
-same length as the longer.
-
- *Note LGe Intrinsic::, for information on the distinction between
-the `LLT' intrinsic and the `.LT.' operator.
-
-\1f
-File: g77.info, Node: LnBlnk Intrinsic, Next: Loc Intrinsic, Prev: LLt Intrinsic, Up: Table of Intrinsic Functions
-
-LnBlnk Intrinsic
-................
-
- LnBlnk(STRING)
-
-LnBlnk: `INTEGER(KIND=1)' function.
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the index of the last non-blank character in STRING.
-`LNBLNK' and `LEN_TRIM' are equivalent.
-
-\1f
-File: g77.info, Node: Loc Intrinsic, Next: Log Intrinsic, Prev: LnBlnk Intrinsic, Up: Table of Intrinsic Functions
-
-Loc Intrinsic
-.............
-
- Loc(ENTITY)
-
-Loc: `INTEGER(KIND=0)' function.
-
-ENTITY: Any type; cannot be a constant or expression.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- The `LOC()' intrinsic works the same way as the `%LOC()' construct.
-*Note The `%LOC()' Construct: %LOC(), for more information.
-
-\1f
-File: g77.info, Node: Log Intrinsic, Next: Log10 Intrinsic, Prev: Loc Intrinsic, Up: Table of Intrinsic Functions
-
-Log Intrinsic
-.............
-
- Log(X)
-
-Log: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the natural logarithm of X, which must be greater than zero
-or, if type `COMPLEX', must not be zero.
-
- *Note Exp Intrinsic::, for the inverse of this function.
-
- *Note Log10 Intrinsic::, for the base-10 logarithm function.
-
-\1f
-File: g77.info, Node: Log10 Intrinsic, Next: Logical Intrinsic, Prev: Log Intrinsic, Up: Table of Intrinsic Functions
-
-Log10 Intrinsic
-...............
-
- Log10(X)
-
-Log10: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the natural logarithm of X, which must be greater than zero
-or, if type `COMPLEX', must not be zero.
-
- The inverse of this function is `10. ** LOG10(X)'.
-
- *Note Log Intrinsic::, for the natural logarithm function.
-
-\1f
-File: g77.info, Node: Logical Intrinsic, Next: Long Intrinsic, Prev: Log10 Intrinsic, Up: Table of Intrinsic Functions
-
-Logical Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Logical' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Long Intrinsic, Next: LShift Intrinsic, Prev: Logical Intrinsic, Up: Table of Intrinsic Functions
-
-Long Intrinsic
-..............
-
- Long(A)
-
-Long: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=6)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Archaic form of `INT()' that is specific to one type for A. *Note
-Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-\1f
-File: g77.info, Node: LShift Intrinsic, Next: LStat Intrinsic (subroutine), Prev: Long Intrinsic, Up: Table of Intrinsic Functions
-
-LShift Intrinsic
-................
-
- LShift(I, SHIFT)
-
-LShift: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns I shifted to the left SHIFT bits.
-
- Although similar to the expression `I*(2**SHIFT)', there are
-important differences. For example, the sign of the result is not
-necessarily the same as the sign of I.
-
- Currently this intrinsic is defined assuming the underlying
-representation of I is as a two's-complement integer. It is unclear at
-this point whether that definition will apply when a different
-representation is involved.
-
- *Note LShift Intrinsic::, for the inverse of this function.
-
- *Note IShft Intrinsic::, for information on a more widely available
-left-shifting intrinsic that is also more precisely defined.
-
-\1f
-File: g77.info, Node: LStat Intrinsic (subroutine), Next: LStat Intrinsic (function), Prev: LShift Intrinsic, Up: Table of Intrinsic Functions
-
-LStat Intrinsic (subroutine)
-............................
-
- CALL LStat(FILE, SARRAY, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. If FILE is a
-symbolic link it returns data on the link itself, so the routine is
-available only on systems that support symbolic links. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return (`ENOSYS' if the system does not
-provide `lstat(2)').
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note LStat
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: LStat Intrinsic (function), Next: LTime Intrinsic, Prev: LStat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-LStat Intrinsic (function)
-..........................
-
- LStat(FILE, SARRAY)
-
-LStat: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. If FILE is a
-symbolic link it returns data on the link itself, so the routine is
-available only on systems that support symbolic links. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code (`ENOSYS' if the
-system does not provide `lstat(2)').
-
- For information on other intrinsics with the same name: *Note LStat
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: LTime Intrinsic, Next: MatMul Intrinsic, Prev: LStat Intrinsic (function), Up: Table of Intrinsic Functions
-
-LTime Intrinsic
-...............
-
- CALL LTime(STIME, TARRAY)
-
-STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Given a system time value STIME, fills TARRAY with values extracted
-from it appropriate to the GMT time zone using `localtime(3)'.
-
- The array elements are as follows:
-
- 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
- seconds
-
- 2. Minutes after the hour, range 0-59
-
- 3. Hours past midnight, range 0-23
-
- 4. Day of month, range 0-31
-
- 5. Number of months since January, range 0-12
-
- 6. Years since 1900
-
- 7. Number of days since Sunday, range 0-6
-
- 8. Days since January 1
-
- 9. Daylight savings indicator: positive if daylight savings is in
- effect, zero if not, and negative if the information isn't
- available.
-
-\1f
-File: g77.info, Node: MatMul Intrinsic, Next: Max Intrinsic, Prev: LTime Intrinsic, Up: Table of Intrinsic Functions
-
-MatMul Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MatMul' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Max Intrinsic, Next: Max0 Intrinsic, Prev: MatMul Intrinsic, Up: Table of Intrinsic Functions
-
-Max Intrinsic
-.............
-
- Max(A-1, A-2, ..., A-n)
-
-Max: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the argument with the largest value.
-
- *Note Min Intrinsic::, for the opposite function.
-
-\1f
-File: g77.info, Node: Max0 Intrinsic, Next: Max1 Intrinsic, Prev: Max Intrinsic, Up: Table of Intrinsic Functions
-
-Max0 Intrinsic
-..............
-
- Max0(A-1, A-2, ..., A-n)
-
-Max0: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A. *Note
-Max Intrinsic::.
-
-\1f
-File: g77.info, Node: Max1 Intrinsic, Next: MaxExponent Intrinsic, Prev: Max0 Intrinsic, Up: Table of Intrinsic Functions
-
-Max1 Intrinsic
-..............
-
- Max1(A-1, A-2, ..., A-n)
-
-Max1: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MAX()' that is specific to one type for A and a
-different return type. *Note Max Intrinsic::.
-
-\1f
-File: g77.info, Node: MaxExponent Intrinsic, Next: MaxLoc Intrinsic, Prev: Max1 Intrinsic, Up: Table of Intrinsic Functions
-
-MaxExponent Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxExponent' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: MaxLoc Intrinsic, Next: MaxVal Intrinsic, Prev: MaxExponent Intrinsic, Up: Table of Intrinsic Functions
-
-MaxLoc Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxLoc' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: MaxVal Intrinsic, Next: MClock Intrinsic, Prev: MaxLoc Intrinsic, Up: Table of Intrinsic Functions
-
-MaxVal Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MaxVal' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: MClock Intrinsic, Next: MClock8 Intrinsic, Prev: MaxVal Intrinsic, Up: Table of Intrinsic Functions
-
-MClock Intrinsic
-................
-
- MClock()
-
-MClock: `INTEGER(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of clock ticks since the start of the process.
-Supported on systems with `clock(3)' (q.v.).
-
- This intrinsic is not fully portable, such as to systems with 32-bit
-`INTEGER' types but supporting times wider than 32 bits. *Note MClock8
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more GNU Fortran implementations, though to fewer Fortran
-compilers.
-
- If the system does not support `clock(3)', -1 is returned.
-
-\1f
-File: g77.info, Node: MClock8 Intrinsic, Next: Merge Intrinsic, Prev: MClock Intrinsic, Up: Table of Intrinsic Functions
-
-MClock8 Intrinsic
-.................
-
- MClock8()
-
-MClock8: `INTEGER(KIND=2)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the number of clock ticks since the start of the process.
-Supported on systems with `clock(3)' (q.v.).
-
- No Fortran implementations other than GNU Fortran are known to
-support this intrinsic at the time of this writing. *Note MClock
-Intrinsic::, for information on a similar intrinsic that might be
-portable to more Fortran compilers, though to fewer GNU Fortran
-implementations.
-
- If the system does not support `clock(3)', -1 is returned.
-
-\1f
-File: g77.info, Node: Merge Intrinsic, Next: Min Intrinsic, Prev: MClock8 Intrinsic, Up: Table of Intrinsic Functions
-
-Merge Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Merge' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Min Intrinsic, Next: Min0 Intrinsic, Prev: Merge Intrinsic, Up: Table of Intrinsic Functions
-
-Min Intrinsic
-.............
-
- Min(A-1, A-2, ..., A-n)
-
-Min: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the argument with the smallest value.
-
- *Note Max Intrinsic::, for the opposite function.
-
-\1f
-File: g77.info, Node: Min0 Intrinsic, Next: Min1 Intrinsic, Prev: Min Intrinsic, Up: Table of Intrinsic Functions
-
-Min0 Intrinsic
-..............
-
- Min0(A-1, A-2, ..., A-n)
-
-Min0: `INTEGER(KIND=1)' function.
-
-A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A. *Note
-Min Intrinsic::.
-
-\1f
-File: g77.info, Node: Min1 Intrinsic, Next: MinExponent Intrinsic, Prev: Min0 Intrinsic, Up: Table of Intrinsic Functions
-
-Min1 Intrinsic
-..............
-
- Min1(A-1, A-2, ..., A-n)
-
-Min1: `INTEGER(KIND=1)' function.
-
-A: `REAL(KIND=1)'; at least two such arguments must be provided;
-scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `MIN()' that is specific to one type for A and a
-different return type. *Note Min Intrinsic::.
-
-\1f
-File: g77.info, Node: MinExponent Intrinsic, Next: MinLoc Intrinsic, Prev: Min1 Intrinsic, Up: Table of Intrinsic Functions
-
-MinExponent Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinExponent' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: MinLoc Intrinsic, Next: MinVal Intrinsic, Prev: MinExponent Intrinsic, Up: Table of Intrinsic Functions
-
-MinLoc Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinLoc' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: MinVal Intrinsic, Next: Mod Intrinsic, Prev: MinLoc Intrinsic, Up: Table of Intrinsic Functions
-
-MinVal Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL MinVal' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Mod Intrinsic, Next: Modulo Intrinsic, Prev: MinVal Intrinsic, Up: Table of Intrinsic Functions
-
-Mod Intrinsic
-.............
-
- Mod(A, P)
-
-Mod: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-P: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns remainder calculated as:
-
- A - (INT(A / P) * P)
-
- P must not be zero.
-
-\1f
-File: g77.info, Node: Modulo Intrinsic, Next: MvBits Intrinsic, Prev: Mod Intrinsic, Up: Table of Intrinsic Functions
-
-Modulo Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Modulo' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: MvBits Intrinsic, Next: Nearest Intrinsic, Prev: Modulo Intrinsic, Up: Table of Intrinsic Functions
-
-MvBits Intrinsic
-................
-
- CALL MvBits(FROM, FROMPOS, LEN, TO, TOPOS)
-
-FROM: `INTEGER'; scalar; INTENT(IN).
-
-FROMPOS: `INTEGER'; scalar; INTENT(IN).
-
-LEN: `INTEGER'; scalar; INTENT(IN).
-
-TO: `INTEGER' with same `KIND=' value as for FROM; scalar;
-INTENT(INOUT).
-
-TOPOS: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Moves LEN bits from positions FROMPOS through `FROMPOS+LEN-1' of
-FROM to positions TOPOS through `FROMPOS+LEN-1' of TO. The portion of
-argument TO not affected by the movement of bits is unchanged.
-Arguments FROM and TO are permitted to be the same numeric storage
-unit. The values of `FROMPOS+LEN' and `TOPOS+LEN' must be less than or
-equal to `BIT_SIZE(FROM)'.
-
-\1f
-File: g77.info, Node: Nearest Intrinsic, Next: NInt Intrinsic, Prev: MvBits Intrinsic, Up: Table of Intrinsic Functions
-
-Nearest Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Nearest' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: NInt Intrinsic, Next: Not Intrinsic, Prev: Nearest Intrinsic, Up: Table of Intrinsic Functions
-
-NInt Intrinsic
-..............
-
- NInt(A)
-
-NInt: `INTEGER(KIND=1)' function.
-
-A: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns A with the fractional portion of its magnitude eliminated by
-rounding to the nearest whole number and with its sign preserved,
-converted to type `INTEGER(KIND=1)'.
-
- If A is type `COMPLEX', its real part is rounded and converted.
-
- A fractional portion exactly equal to `.5' is rounded to the whole
-number that is larger in magnitude. (Also called "Fortran round".)
-
- *Note Int Intrinsic::, for how to convert, truncate to whole number.
-
- *Note ANInt Intrinsic::, for how to round to nearest whole number
-without converting.
-
-\1f
-File: g77.info, Node: Not Intrinsic, Next: Or Intrinsic, Prev: NInt Intrinsic, Up: Table of Intrinsic Functions
-
-Not Intrinsic
-.............
-
- Not(I)
-
-Not: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `mil', `f90', `vxt'.
-
-Description:
-
- Returns value resulting from boolean NOT of each bit in I.
-
-\1f
-File: g77.info, Node: Or Intrinsic, Next: Pack Intrinsic, Prev: Not Intrinsic, Up: Table of Intrinsic Functions
-
-Or Intrinsic
-............
-
- Or(I, J)
-
-Or: `INTEGER' or `LOGICAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns value resulting from boolean OR of pair of bits in each of I
-and J.
-
-\1f
-File: g77.info, Node: Pack Intrinsic, Next: PError Intrinsic, Prev: Or Intrinsic, Up: Table of Intrinsic Functions
-
-Pack Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Pack' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: PError Intrinsic, Next: Precision Intrinsic, Prev: Pack Intrinsic, Up: Table of Intrinsic Functions
-
-PError Intrinsic
-................
-
- CALL PError(STRING)
-
-STRING: `CHARACTER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Prints (on the C `stderr' stream) a newline-terminated error message
-corresponding to the last system error. This is prefixed by STRING, a
-colon and a space. See `perror(3)'.
-
-\1f
-File: g77.info, Node: Precision Intrinsic, Next: Present Intrinsic, Prev: PError Intrinsic, Up: Table of Intrinsic Functions
-
-Precision Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Precision' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: Present Intrinsic, Next: Product Intrinsic, Prev: Precision Intrinsic, Up: Table of Intrinsic Functions
-
-Present Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Present' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Product Intrinsic, Next: Radix Intrinsic, Prev: Present Intrinsic, Up: Table of Intrinsic Functions
-
-Product Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Product' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Radix Intrinsic, Next: Rand Intrinsic, Prev: Product Intrinsic, Up: Table of Intrinsic Functions
-
-Radix Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Radix' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Rand Intrinsic, Next: Random_Number Intrinsic, Prev: Radix Intrinsic, Up: Table of Intrinsic Functions
-
-Rand Intrinsic
-..............
-
- Rand(FLAG)
-
-Rand: `REAL(KIND=1)' function.
-
-FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns a uniform quasi-random number between 0 and 1. If FLAG is
-0, the next number in sequence is returned; if FLAG is 1, the generator
-is restarted by calling `srand(0)'; if FLAG has any other value, it is
-used as a new seed with `srand'.
-
- *Note SRand Intrinsic::.
-
- *Note:* As typically implemented (by the routine of the same name in
-the C library), this random number generator is a very poor one, though
-the BSD and GNU libraries provide a much better implementation than the
-`traditional' one. On a different system you almost certainly want to
-use something better.
-
-\1f
-File: g77.info, Node: Random_Number Intrinsic, Next: Random_Seed Intrinsic, Prev: Rand Intrinsic, Up: Table of Intrinsic Functions
-
-Random_Number Intrinsic
-.......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Random_Number' to use this
-name for an external procedure.
-
-\1f
-File: g77.info, Node: Random_Seed Intrinsic, Next: Range Intrinsic, Prev: Random_Number Intrinsic, Up: Table of Intrinsic Functions
-
-Random_Seed Intrinsic
-.....................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Random_Seed' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: Range Intrinsic, Next: Real Intrinsic, Prev: Random_Seed Intrinsic, Up: Table of Intrinsic Functions
-
-Range Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Range' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Real Intrinsic, Next: RealPart Intrinsic, Prev: Range Intrinsic, Up: Table of Intrinsic Functions
-
-Real Intrinsic
-..............
-
- Real(A)
-
-Real: `REAL' function. The exact type is `REAL(KIND=1)' when argument
-A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'.
-When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this
-intrinsic is valid only when used as the argument to `REAL()', as
-explained below.
-
-A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Converts A to `REAL(KIND=1)'.
-
- Use of `REAL()' with a `COMPLEX' argument (other than
-`COMPLEX(KIND=1)') is restricted to the following case:
-
- REAL(REAL(A))
-
-This expression converts the real part of A to `REAL(KIND=1)'.
-
- *Note RealPart Intrinsic::, for information on a GNU Fortran
-intrinsic that extracts the real part of an arbitrary `COMPLEX' value.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-\1f
-File: g77.info, Node: RealPart Intrinsic, Next: Rename Intrinsic (subroutine), Prev: Real Intrinsic, Up: Table of Intrinsic Functions
-
-RealPart Intrinsic
-..................
-
- RealPart(Z)
-
-RealPart: `REAL' function, the `KIND=' value of the type being that of
-argument Z.
-
-Z: `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: `gnu'.
-
-Description:
-
- The real part of Z is returned, without conversion.
-
- *Note:* The way to do this in standard Fortran 90 is `REAL(Z)'.
-However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(Z)' means
-something different for some compilers that are not true Fortran 90
-compilers but offer some extensions standardized by Fortran 90 (such as
-the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
-
- The advantage of `REALPART()' is that, while not necessarily more or
-less portable than `REAL()', it is more likely to cause a compiler that
-doesn't support it to produce a diagnostic than generate incorrect code.
-
- *Note REAL() and AIMAG() of Complex::, for more information.
-
-\1f
-File: g77.info, Node: Rename Intrinsic (subroutine), Next: Repeat Intrinsic, Prev: RealPart Intrinsic, Up: Table of Intrinsic Functions
-
-Rename Intrinsic (subroutine)
-.............................
-
- CALL Rename(PATH1, PATH2, STATUS)
-
-PATH1: `CHARACTER'; scalar; INTENT(IN).
-
-PATH2: `CHARACTER'; scalar; INTENT(IN).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks
-the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
-PATH1 and PATH2 are ignored. See `rename(2)'. If the STATUS argument
-is supplied, it contains 0 on success or a non-zero error code upon
-return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Rename
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Repeat Intrinsic, Next: Reshape Intrinsic, Prev: Rename Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Repeat Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Repeat' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Reshape Intrinsic, Next: RRSpacing Intrinsic, Prev: Repeat Intrinsic, Up: Table of Intrinsic Functions
-
-Reshape Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Reshape' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: RRSpacing Intrinsic, Next: RShift Intrinsic, Prev: Reshape Intrinsic, Up: Table of Intrinsic Functions
-
-RRSpacing Intrinsic
-...................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL RRSpacing' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: RShift Intrinsic, Next: Scale Intrinsic, Prev: RRSpacing Intrinsic, Up: Table of Intrinsic Functions
-
-RShift Intrinsic
-................
-
- RShift(I, SHIFT)
-
-RShift: `INTEGER' function, the `KIND=' value of the type being that of
-argument I.
-
-I: `INTEGER'; scalar; INTENT(IN).
-
-SHIFT: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `f2c'.
-
-Description:
-
- Returns I shifted to the right SHIFT bits.
-
- Although similar to the expression `I/(2**SHIFT)', there are
-important differences. For example, the sign of the result is
-undefined.
-
- Currently this intrinsic is defined assuming the underlying
-representation of I is as a two's-complement integer. It is unclear at
-this point whether that definition will apply when a different
-representation is involved.
-
- *Note RShift Intrinsic::, for the inverse of this function.
-
- *Note IShft Intrinsic::, for information on a more widely available
-right-shifting intrinsic that is also more precisely defined.
-
-\1f
-File: g77.info, Node: Scale Intrinsic, Next: Scan Intrinsic, Prev: RShift Intrinsic, Up: Table of Intrinsic Functions
-
-Scale Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Scale' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Scan Intrinsic, Next: Second Intrinsic (function), Prev: Scale Intrinsic, Up: Table of Intrinsic Functions
-
-Scan Intrinsic
-..............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Scan' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Second Intrinsic (function), Next: Second Intrinsic (subroutine), Prev: Scan Intrinsic, Up: Table of Intrinsic Functions
-
-Second Intrinsic (function)
-...........................
-
- Second()
-
-Second: `REAL(KIND=1)' function.
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process's runtime in seconds--the same value as the UNIX
-function `etime' returns.
-
- This routine is known from Cray Fortran.
-
- For information on other intrinsics with the same name: *Note Second
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Second Intrinsic (subroutine), Next: Selected_Int_Kind Intrinsic, Prev: Second Intrinsic (function), Up: Table of Intrinsic Functions
-
-Second Intrinsic (subroutine)
-.............................
-
- CALL Second(SECONDS)
-
-SECONDS: `REAL(KIND=1)'; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns the process's runtime in seconds in SECONDS--the same value
-as the UNIX function `etime' returns.
-
- This routine is known from Cray Fortran. *Note Cpu_Time Intrinsic::
-for a standard equivalent.
-
- For information on other intrinsics with the same name: *Note Second
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Selected_Int_Kind Intrinsic, Next: Selected_Real_Kind Intrinsic, Prev: Second Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Selected_Int_Kind Intrinsic
-...........................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Selected_Int_Kind' to use this
-name for an external procedure.
-
-\1f
-File: g77.info, Node: Selected_Real_Kind Intrinsic, Next: Set_Exponent Intrinsic, Prev: Selected_Int_Kind Intrinsic, Up: Table of Intrinsic Functions
-
-Selected_Real_Kind Intrinsic
-............................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Selected_Real_Kind' to use
-this name for an external procedure.
-
-\1f
-File: g77.info, Node: Set_Exponent Intrinsic, Next: Shape Intrinsic, Prev: Selected_Real_Kind Intrinsic, Up: Table of Intrinsic Functions
-
-Set_Exponent Intrinsic
-......................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Set_Exponent' to use this name
-for an external procedure.
-
-\1f
-File: g77.info, Node: Shape Intrinsic, Next: Short Intrinsic, Prev: Set_Exponent Intrinsic, Up: Table of Intrinsic Functions
-
-Shape Intrinsic
-...............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Shape' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: Short Intrinsic, Next: Sign Intrinsic, Prev: Shape Intrinsic, Up: Table of Intrinsic Functions
-
-Short Intrinsic
-...............
-
- Short(A)
-
-Short: `INTEGER(KIND=6)' function.
-
-A: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Returns A with the fractional portion of its magnitude truncated and
-its sign preserved, converted to type `INTEGER(KIND=6)'.
-
- If A is type `COMPLEX', its real part is truncated and converted,
-and its imaginary part is disgregarded.
-
- *Note Int Intrinsic::.
-
- The precise meaning of this intrinsic might change in a future
-version of the GNU Fortran language, as more is learned about how it is
-used.
-
-\1f
-File: g77.info, Node: Sign Intrinsic, Next: Signal Intrinsic (subroutine), Prev: Short Intrinsic, Up: Table of Intrinsic Functions
-
-Sign Intrinsic
-..............
-
- Sign(A, B)
-
-Sign: `INTEGER' or `REAL' function, the exact type being the result of
-cross-promoting the types of all the arguments.
-
-A: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-B: `INTEGER' or `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise.
-
- *Note Abs Intrinsic::, for the function that returns the magnitude
-of a value.
-
-\1f
-File: g77.info, Node: Signal Intrinsic (subroutine), Next: Sin Intrinsic, Prev: Sign Intrinsic, Up: Table of Intrinsic Functions
-
-Signal Intrinsic (subroutine)
-.............................
-
- CALL Signal(NUMBER, HANDLER, STATUS)
-
-NUMBER: `INTEGER'; scalar; INTENT(IN).
-
-HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
-dummy/global `INTEGER(KIND=1)' scalar.
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
-with a single integer argument (of system-dependent length) when signal
-NUMBER occurs. If NUMBER is an integer, it can be used to turn off
-handling of signal HANDLER or revert to its default action. See
-`signal(2)'.
-
- Note that HANDLER will be called using C conventions, so its value in
-Fortran terms is obtained by applying `%LOC()' (or LOC()) to it.
-
- The value returned by `signal(2)' is written to STATUS, if that
-argument is supplied. Otherwise the return value is ignored.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Signal
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Sin Intrinsic, Next: SinH Intrinsic, Prev: Signal Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Sin Intrinsic
-.............
-
- Sin(X)
-
-Sin: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the sine of X, an angle measured in radians.
-
- *Note ASin Intrinsic::, for the inverse of this function.
-
-\1f
-File: g77.info, Node: SinH Intrinsic, Next: Sleep Intrinsic, Prev: Sin Intrinsic, Up: Table of Intrinsic Functions
-
-SinH Intrinsic
-..............
-
- SinH(X)
-
-SinH: `REAL' function, the `KIND=' value of the type being that of
-argument X.
-
-X: `REAL'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the hyperbolic sine of X.
-
-\1f
-File: g77.info, Node: Sleep Intrinsic, Next: Sngl Intrinsic, Prev: SinH Intrinsic, Up: Table of Intrinsic Functions
-
-Sleep Intrinsic
-...............
-
- CALL Sleep(SECONDS)
-
-SECONDS: `INTEGER(KIND=1)'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Causes the process to pause for SECONDS seconds. See `sleep(2)'.
-
-\1f
-File: g77.info, Node: Sngl Intrinsic, Next: Spacing Intrinsic, Prev: Sleep Intrinsic, Up: Table of Intrinsic Functions
-
-Sngl Intrinsic
-..............
-
- Sngl(A)
-
-Sngl: `REAL(KIND=1)' function.
-
-A: `REAL(KIND=2)'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Archaic form of `REAL()' that is specific to one type for A. *Note
-Real Intrinsic::.
-
-\1f
-File: g77.info, Node: Spacing Intrinsic, Next: Spread Intrinsic, Prev: Sngl Intrinsic, Up: Table of Intrinsic Functions
-
-Spacing Intrinsic
-.................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Spacing' to use this name for
-an external procedure.
-
-\1f
-File: g77.info, Node: Spread Intrinsic, Next: SqRt Intrinsic, Prev: Spacing Intrinsic, Up: Table of Intrinsic Functions
-
-Spread Intrinsic
-................
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Spread' to use this name for an
-external procedure.
-
-\1f
-File: g77.info, Node: SqRt Intrinsic, Next: SRand Intrinsic, Prev: Spread Intrinsic, Up: Table of Intrinsic Functions
-
-SqRt Intrinsic
-..............
-
- SqRt(X)
-
-SqRt: `REAL' or `COMPLEX' function, the exact type being that of
-argument X.
-
-X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
-
-Intrinsic groups: (standard FORTRAN 77).
-
-Description:
-
- Returns the square root of X, which must not be negative.
-
- To calculate and represent the square root of a negative number,
-complex arithmetic must be used. For example, `SQRT(COMPLEX(X))'.
-
- The inverse of this function is `SQRT(X) * SQRT(X)'.
-
-\1f
-File: g77.info, Node: SRand Intrinsic, Next: Stat Intrinsic (subroutine), Prev: SqRt Intrinsic, Up: Table of Intrinsic Functions
-
-SRand Intrinsic
-...............
-
- CALL SRand(SEED)
-
-SEED: `INTEGER'; scalar; INTENT(IN).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Reinitialises the generator with the seed in SEED. *Note IRand
-Intrinsic::. *Note Rand Intrinsic::.
-
-\1f
-File: g77.info, Node: Stat Intrinsic (subroutine), Next: Stat Intrinsic (function), Prev: SRand Intrinsic, Up: Table of Intrinsic Functions
-
-Stat Intrinsic (subroutine)
-...........................
-
- CALL Stat(FILE, SARRAY, STATUS)
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- If the STATUS argument is supplied, it contains 0 on success or a
-non-zero error code upon return.
-
- Some non-GNU implementations of Fortran provide this intrinsic as
-only a function, not as a subroutine, or do not support the (optional)
-STATUS argument.
-
- For information on other intrinsics with the same name: *Note Stat
-Intrinsic (function)::.
-
-\1f
-File: g77.info, Node: Stat Intrinsic (function), Next: Sum Intrinsic, Prev: Stat Intrinsic (subroutine), Up: Table of Intrinsic Functions
-
-Stat Intrinsic (function)
-.........................
-
- Stat(FILE, SARRAY)
-
-Stat: `INTEGER(KIND=1)' function.
-
-FILE: `CHARACTER'; scalar; INTENT(IN).
-
-SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
-
-Intrinsic groups: `unix'.
-
-Description:
-
- Obtains data about the given file FILE and places them in the array
-SARRAY. A null character (`CHAR(0)') marks the end of the name in
-FILE--otherwise, trailing blanks in FILE are ignored. The values in
-this array are extracted from the `stat' structure as returned by
-`fstat(2)' q.v., as follows:
-
- 1. File mode
-
- 2. Inode number
-
- 3. ID of device containing directory entry for file
-
- 4. Device id (if relevant)
-
- 5. Number of links
-
- 6. Owner's uid
-
- 7. Owner's gid
-
- 8. File size (bytes)
-
- 9. Last access time
-
- 10. Last modification time
-
- 11. Last file status change time
-
- 12. Preferred I/O block size
-
- 13. Number of blocks allocated
-
- Not all these elements are relevant on all systems. If an element
-is not relevant, it is returned as 0.
-
- Returns 0 on success or a non-zero error code.
-
- For information on other intrinsics with the same name: *Note Stat
-Intrinsic (subroutine)::.
-
-\1f
-File: g77.info, Node: Sum Intrinsic, Next: SymLnk Intrinsic (subroutine), Prev: Stat Intrinsic (function), Up: Table of Intrinsic Functions
-
-Sum Intrinsic
-.............
-
- This intrinsic is not yet implemented. The name is, however,
-reserved as an intrinsic. Use `EXTERNAL Sum' to use this name for an
-external procedure.
-