📄 node36.html
字号:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2 Final//FR"><!-- Converted with LaTeX2HTML 95.1 (Fri Jan 20 1995) --><!-- by Nikos Drakos (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds --><!-- Modified Simulog 03/97 --><HTML><HEAD><TITLE>4.2 The non-portable subroutines</TITLE><LINK REL=STYLESHEET TYPE="text/css" HREF="./Modulef.css" TITLE="Modulef CSS"><meta name="description" value="4.2 The non-portable subroutines"><meta name="keywords" value="Guide1"><meta name="resource-type" value="document"><meta name="distribution" value="global"></HEAD><BODY BGCOLOR="#FFFFFF"><P> <IMG SRC="../icons/smallmod.gif" WIDTH=211 HEIGHT=50 ALIGN=BOTTOM ALT="Modulef"><A NAME=tex2html622 HREF="node35.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/previous_motif.gif" ALT="previous"></A><A NAME=tex2html628 HREF="node34.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/up_motif.gif" ALT="up"></A><A NAME=tex2html630 HREF="node37.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/next_motif.gif" ALT="next"></A><A NAME=tex2html632 HREF="node2.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/contents_motif.gif" ALT="contents"></A><A HREF="../Guide1-18/node36.html"><IMG BORDER=0 SRC="../icons/zoom18.gif" ALIGN=BOTTOM ALT="[BIG]"></A><A HREF="../Guide1-14/node36.html"><IMG BORDER=0 SRC="../icons/zoom14.gif" ALIGN=BOTTOM ALT="[Normal]"></A><A HREF="../Guide1-10/node36.html"><IMG BORDER=0 SRC="../icons/zoom10.gif" ALIGN=BOTTOM ALT="[small]"></A><BR><B> Next: </B> <A NAME=tex2html631 HREF="node37.html">4.3 Selecting the graphic peripherals</A><B>Up: </B> <A NAME=tex2html629 HREF="node34.html">4 Generalities</A><B> Prev: </B> <A NAME=tex2html623 HREF="node35.html">4.1 List of the MODULEF libraries </A><B><A HREF="node2.html" >Contents</A></B><HR SIZE=3 WIDTH="75%"><H1><A NAME=SECTION05520000000000000000>4.2 The non-portable subroutines</A></H1> <A NAME=secnonport> </A><P><P><P>The non-portable part of MODULEF is kept as small as possible. If a versionhas already been programmed on your machine, this is the version you will use (ex: The subroutines found in <b> U_SUN</b> if you are working on Sun). If not, you need to modify the subroutines inlibrary <b> U_MOD</b> to conform to your machine.<P>The non-portable part contains the subroutines <b> EXEC, MAJUSC, MINUSC,NOMFSD, OUVRIR, RETPAG, TILT, TRUNIT</b>, and functions <b> INFO</b> listed below:<P><UL><LI> Subroutine <b> EXEC</b>:<BR> {<PRE> SUBROUTINE EXEC(COM)C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C PURPOSE : EXECUTE A COMMAND ON THE HOST SYSTEMCC EXAMPLE : CALL EXEC('ls') PRINTS THE LIST OF FILES ON THEC MULTICS SYSTEMCC INPUT PARAMETER :C COM : CHAIN CONTAINING A COMMANDC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CHARACTER*(*) COM</PRE>}<P> <LI> Function <b> MAJUSC</b>:<P>If the computer codes characters internally in ascii, the following function is used to transform lower-case toupper-case letters:{<PRE> CHARACTER*1 FUNCTION MAJUSC(C)C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C PURPOSE : TRANSFORMS A MINISCULE CHARACTER INTO A MAJUSCULEC VERSION ASCIIC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CHARACTER*1 C I = ICHAR(C) IF (97.LE.I .AND. I.LE.122) THEN MAJUSC = CHAR(I-32) ELSE MAJUSC = C ENDIF END</PRE>}<P> <LI> Function <b> MINUSC</b>:<P> The inverse of function <b> MAJUSC</b>.<P> <LI> Function <b> NOMFSD</b> :<P>This function creates a file name for a MODULEF data structure (D.S.) from a generic name (possibly blank) and the D.S. type:{<PRE> CHARACTER*80 FUNCTION NOMFSD(NOMGER,NOMSD)C *********************************************************************C PURPOSE: CREATE A GENERIC NAMEC -------C NOMGER : GENERIC NAMEC NOMSD : D.S. NAME C ********************************************************************* CHARACTER*(*) NOMSD,NOMGER,NOM*256</PRE> }<P>The above function is portable if the file name has the form: <b> NOMGER.NOMSD</b><P> <LI> Subroutine <b> OUVRIR</b>:<P>Experience shows that the FORTRAN 77 command, OPEN, is not totally portable. Subroutine <b> OUVRIR</b> has been defined for this purpose and may require some modifications at a new site:{<PRE> SUBROUTINE OUVRIR(UNIT,FILE,SPEC,RECL,IOSTAT)C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C PURPOSE :C TO OPEN A FILE (OPEN)C AFTER A CALL TO OUVRIR, TEST IOSTAT (IF NOT CALL OUVRIS)CC THE CONVENTIONS ARE THOSE OF THE FORTRAN 77 STANDARD, EXCEPT FORC THE FOLLOWING EXTENSION : IF SPEC CONTAINS 'OLD' AND 'DIRECT',C AND IF RECL=0, THEN THE FILE IS OPEN WITH THE RECORD LENGTHC GIVEN AT THE TIME IT WAS CREATEDCC INPUT PARAMETERS :C UNIT : FILE UNIT NUMBERC FILE : FILE NAMEC IF FILE=' ', OPEN WITHOUT FILE =... SPECIFIERSC SPEC : LIST OF SPECIFIERS (EX: 'OLD,DIRECT,UNFORMATTED')C RECL : RECORD LENGTHC IF RECL=0, OPEN WITHOUT RECL=... SPECIFIERCC OUTPUT PARAMETERS :C IOSTAT : INPUT/OUTPUT STATUSC IOSTAT = 0 IF NO ERRORS OCCURREDC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</PRE> }<P><LI> Function <b> RETPAG</b>:{<PRE> SUBROUTINE RETPAG(IUNIT,NUMENR,BUF,LPAGE,NBPAGE)C**********************************************************************C PURPOSE : NON-PORTABLE SUBROUTINE TO SWEEP THROUGH A DIRECT ACCESS FILE C ------- UNTIL THE END OF THE FILE. C ATTENTION: THERE IS NO ERROR VERIFICATIONC**********************************************************************C MOTIVATION : WITH UNIX THE END OF FILE IS MARKED BY THE OPTION C ------------ END = , WHILE WITH MULTICS THE OPTIONS C REC = , AND END = ARE INCOMPATIBLE. C**********************************************************************C ON ENTRY : C -----------C IUNIT : LOGICAL FILE UNIT NUMBERC NUMENR : RECORD NUMBER TO READC IF NUMENR IS < 0 WE SWEEP THE FILE IN ORDER TO RETURN THEC NUMBER OF PAGES, IF NOT WE READ THE RECORD C NUMENR IN BUFFER BUF C LPAGE : LENGTH OF TABLE BUF C ON EXIT :C -----------C BUF : CONTENTS OF THE RECORD IF NUMENR >0C EMPTY IF NOTC NBPAGE : NUMBER OF PAGES IF NUMENR <=0C EMPTY IF NOTC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C VERSION UNIXC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DIMENSION BUF(LPAGE)C IF (NUMENR .GT. 0) THEN READ (IUNIT,REC=NUMENR,ERR=150,END=150) BUF 150 CONTINUE ELSE NBPAGE = 1 200 READ (IUNIT,REC=NUMENR,ERR=150,END=250) BUF NBPAGE = NBPAGE + 1 GOTO 200 250 CONTINUE NBPAGE = NBPAGE - 1 ENDIF RETURN END</PRE>}<P><LI> Subroutine <b> TILT</b>:<P>This subroutine is called by <b> ARRET</b>, or other subroutines, to abort a MODULEF run. Several implementations are possible:<UL><LI> Do not program <b> TILT</b>: once the system wants to execute subroutine <b> TILT</b>, which does not exist,it causes an interruption. This option is however not available for some systems with static linking.<LI> Program <b> TILT</b> in such a way that it initiates some error routine (division by zero or a more adequateerror) at execution time and, if possible, print the sequence of calls (in batch), or activate a symbolic debugger(interactive).</UL><P><LI> Subroutine <b> TRUNIT</b>:<P>This subroutine is also not completely portable:{<PRE> SUBROUTINE TRUNIT(UNIT)C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C PURPOSE :C TO FIND A FREE UNIT NUMBER, I.E., NOT CONNECTED TO ANY FILE.C THIS SUBROUTINE OFTEN PRECEDES SUBROUTINE OUVRIR.CC OUTPUT PARAMETERS :C UNIT : FILE UNIT NUMBERC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</PRE> }<P><LI> Functions <b> INFO</b>:<P>It corresponds to the 4 functions: <b> IINFO</b> (integer), <b> RINFO</b> (real), <b> DINFO</b> (double precision)and <b> KINFO</b> (character<IMG BORDER=0 ALIGN=BOTTOM ALT="" SRC="img279.gif">). These functions enable the programs to have access to general information(output device unit number, smaller positive floating number, user name, etc.) without using commons.<P>To adapt these functions, the user should read the version provided <BR>(<b> U_MOD</b>) with a text editorand modify it slightly by consulting the comments inserted in each function. For example, function <b> IINFO</b>looks like:{<PRE> INTEGER FUNCTION IINFO(KEYWRD)C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++C PURPOSE :C TO RETURN INFORMATION OF TYPE INTEGERCC INPUT PARAMETER :C KEYWRD : NATURE OF THE INFORMATION TO RETURNC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CHARACTER*(*) KEYWRDC COMMON /TRAVA1/ PADTR1(29),IMPRE,PADTR2(3) COMMON /UNITES/ LECTEU,IMPRIM,INTERA,NFNEWS,NFSAUV,PADUNI(27) REAL PADTR1,PADTR2,PADUNI INTEGER LECTEU,INTERA,IMPRIM,NFNEWS,NFSAUV,IMPREC------------------------------------------------C-- MODIF 13/10/93 C-- F.HECHT ET E.SALTEL POUR QUE LES COMMONS C-- SOIENT TOUJOURS INITIALISESC------------------------------------------------ INTEGER COUNTK SAVE COUNTK DATA COUNTK /0/ IF(COUNTK.EQ.0) THENC--- INIT DE INFO LECTEU = 5 IMPRIM = 6 INTERA = 0 NFNEWS = 99 NFSAUV =0 IMPRE = 1 COUNTK = 1 ENDIFCC 1. PORTABLE PARTC ------------------C IF (KEYWRD .EQ. ...) THEN ... ELSE IF (KEYWRD .EQ. ...) THEN ...CC 2. NON-PORTABLE PARTC ----------------------CC INITIAL INPUT DEVICE UNIT NUMBER ELSE IF (KEYWRD .EQ. 'LECTEUR INITIAL') THEN IINFO = 5 ...CC ERROR ELSE WRITE (IMPRIM,*) 'IINFO : KEYWORD UNKNOWN : ', KEYWRD IINFO = 0 END IF END</PRE> }<P>Part 1 in the above function must obviously not be modified. However, part 2 must be examined, forexample, to change the initial unit number of the input device <FONT color="#B8860B" SIZE=-1><I>(<IMG ALIGN=middle SRC="../icons/foot_motif.gif" ALT="[note]"> Recall that the user can modify the input device unit number during execution by using the <b> !LECTEUR</b> command [<A HREF="node65.html#guide_2"><A NAME=tex2html35 HREF="../Guide2/welcome.html">MODULEF User Guide - 2</A></A>].)</I></FONT>by replacing the value 5, valid on Multics and numerous other machines, by the appropriate value (for example the value 105 on SIRIS 8). The values returned by functions <b> INFO</b> may be obtained by a simple constant assignment, but also by a system call (obtaining CPU time, etc.). If this type of value is difficultto obtain on the host machine, give an arbitrary value, for example 'SMITH' as the user name.<P>The keywords presently defined are:{<PRE>DOUBLE PRECISION FUNCTION DINFO(MOTCLE) 'PETIT' 'GRAND' 'PRECISION' 'HORLOGE' 'DELTA HORLOGE' 'CPU' 'DELTA CPU'INTEGER FUNCTION IINFO(MOTCLE) 'I' 'IMPRIMANTE' 'L' 'LECTEUR' 'INTERACTIVITE' 'NOUVELLES' 'SAUVEGARDE' 'BAVARD' 'LANGUE' 'LECTEUR INITIAL' 'IMPRIMANTE INITIALE' 'REEL2' 'RECL' 'UNITE RECL' 'INTERACTIVITE INITIALE' 'GRAND'CHARACTER*80 FUNCTION KINFO(MOTCLE) 'TITRE' 'MACHINE' 'DATE' 'HEURE' 'UTILISATEUR' 'POBA' 'PRE_HELP' 'SYMD' 'TESD' 'HELP ' 'SYMD ' 'PROC'REAL FUNCTION RINFO(MOTCLE) 'PETIT' 'GRAND' 'PRECISION'</PRE><P>}</UL><P><P><P><HR SIZE=3 WIDTH="75%"><IMG SRC="../icons/smallmod.gif" WIDTH=211 HEIGHT=50 ALIGN=BOTTOM ALT="Modulef"><A NAME=tex2html622 HREF="node35.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/previous_motif.gif" ALT="previous"></A><A NAME=tex2html628 HREF="node34.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/up_motif.gif" ALT="up"></A><A NAME=tex2html630 HREF="node37.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/next_motif.gif" ALT="next"></A><A NAME=tex2html632 HREF="node2.html"><IMG BORDER=0 ALIGN=BOTTOM SRC="../icons/contents_motif.gif" ALT="contents"></A><A HREF="../Guide1-18/node36.html"><IMG BORDER=0 SRC="../icons/zoom18.gif" ALIGN=BOTTOM ALT="[BIG]"></A><A HREF="../Guide1-14/node36.html"><IMG BORDER=0 SRC="../icons/zoom14.gif" ALIGN=BOTTOM ALT="[Normal]"></A><A HREF="../Guide1-10/node36.html"><IMG BORDER=0 SRC="../icons/zoom10.gif" ALIGN=BOTTOM ALT="[small]"></A><BR><B> Next: </B> <A NAME=tex2html631 HREF="node37.html">4.3 Selecting the graphic peripherals</A><B>Up: </B> <A NAME=tex2html629 HREF="node34.html">4 Generalities</A><B> Prev: </B> <A NAME=tex2html623 HREF="node35.html">4.1 List of the MODULEF libraries </A><B><A HREF="node2.html" >Contents</A></B><BR> <HR><P><ADDRESS></ADDRESS></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -