Doxygen Source Code Documentation
io.c File Reference
#include "defs.h"#include "names.h"#include "iob.h"Go to the source code of this file.
Data Structures | |
| struct | Ioclist |
Defines | |
| #define | TYIOINT TYLONG |
| #define | SZIOINT SZLONG |
| #define | UNFORMATTED 0 |
| #define | FORMATTED 1 |
| #define | LISTDIRECTED 2 |
| #define | NAMEDIRECTED 3 |
| #define | V(z) ioc[z].iocval |
| #define | IOALL 07777 |
| #define | NIOS (sizeof(ioc)/sizeof(struct Ioclist) - 1) |
| #define | IOSERR 3 |
| #define | IOSEND 4 |
| #define | IOSIOSTAT 5 |
| #define | IOSREC 6 |
| #define | IOSRECL 7 |
| #define | IOSFILE 8 |
| #define | IOSSTATUS 9 |
| #define | IOSACCESS 10 |
| #define | IOSFORM 11 |
| #define | IOSBLANK 12 |
| #define | IOSEXISTS 13 |
| #define | IOSOPENED 14 |
| #define | IOSNUMBER 15 |
| #define | IOSNAMED 16 |
| #define | IOSNAME 17 |
| #define | IOSSEQUENTIAL 18 |
| #define | IOSDIRECT 19 |
| #define | IOSFORMATTED 20 |
| #define | IOSUNFORMATTED 21 |
| #define | IOSNEXTREC 22 |
| #define | IOSNML 23 |
| #define | IOSTP V(IOSIOSTAT) |
| #define | SZFLAG SZIOINT |
| #define | XERR 0 |
| #define | XUNIT SZFLAG |
| #define | XEND SZFLAG + SZIOINT |
| #define | XFMT 2*SZFLAG + SZIOINT |
| #define | XREC 2*SZFLAG + SZIOINT + SZADDR |
| #define | XIUNIT SZFLAG |
| #define | XIEND SZFLAG + SZADDR |
| #define | XIFMT 2*SZFLAG + SZADDR |
| #define | XIRLEN 2*SZFLAG + 2*SZADDR |
| #define | XIRNUM 2*SZFLAG + 2*SZADDR + SZIOINT |
| #define | XIREC 2*SZFLAG + 2*SZADDR + 2*SZIOINT |
| #define | XFNAME SZFLAG + SZIOINT |
| #define | XFNAMELEN SZFLAG + SZIOINT + SZADDR |
| #define | XSTATUS SZFLAG + 2*SZIOINT + SZADDR |
| #define | XACCESS SZFLAG + 2*SZIOINT + 2*SZADDR |
| #define | XFORMATTED SZFLAG + 2*SZIOINT + 3*SZADDR |
| #define | XRECLEN SZFLAG + 2*SZIOINT + 4*SZADDR |
| #define | XBLANK SZFLAG + 3*SZIOINT + 4*SZADDR |
| #define | XCLSTATUS SZFLAG + SZIOINT |
| #define | XFILE SZFLAG + SZIOINT |
| #define | XFILELEN SZFLAG + SZIOINT + SZADDR |
| #define | XEXISTS SZFLAG + 2*SZIOINT + SZADDR |
| #define | XOPEN SZFLAG + 2*SZIOINT + 2*SZADDR |
| #define | XNUMBER SZFLAG + 2*SZIOINT + 3*SZADDR |
| #define | XNAMED SZFLAG + 2*SZIOINT + 4*SZADDR |
| #define | XNAME SZFLAG + 2*SZIOINT + 5*SZADDR |
| #define | XNAMELEN SZFLAG + 2*SZIOINT + 6*SZADDR |
| #define | XQACCESS SZFLAG + 3*SZIOINT + 6*SZADDR |
| #define | XQACCLEN SZFLAG + 3*SZIOINT + 7*SZADDR |
| #define | XSEQ SZFLAG + 4*SZIOINT + 7*SZADDR |
| #define | XSEQLEN SZFLAG + 4*SZIOINT + 8*SZADDR |
| #define | XDIRECT SZFLAG + 5*SZIOINT + 8*SZADDR |
| #define | XDIRLEN SZFLAG + 5*SZIOINT + 9*SZADDR |
| #define | XFORM SZFLAG + 6*SZIOINT + 9*SZADDR |
| #define | XFORMLEN SZFLAG + 6*SZIOINT + 10*SZADDR |
| #define | XFMTED SZFLAG + 7*SZIOINT + 10*SZADDR |
| #define | XFMTEDLEN SZFLAG + 7*SZIOINT + 11*SZADDR |
| #define | XUNFMT SZFLAG + 8*SZIOINT + 11*SZADDR |
| #define | XUNFMTLEN SZFLAG + 8*SZIOINT + 12*SZADDR |
| #define | XQRECL SZFLAG + 9*SZIOINT + 12*SZADDR |
| #define | XNEXTREC SZFLAG + 9*SZIOINT + 13*SZADDR |
| #define | XQBLANK SZFLAG + 9*SZIOINT + 14*SZADDR |
| #define | XQBLANKLEN SZFLAG + 9*SZIOINT + 15*SZADDR |
| #define | zork(n, t) n, sizeof(n)/sizeof(char *) - 1, t |
Functions | |
| void dofclose | Argdcl ((void)) |
| void dofmove | Argdcl ((char *)) |
| void doiolist | Argdcl ((chainp)) |
| void ioset | Argdcl ((int, int, expptr)) |
| void ioseta | Argdcl ((int, Addrp)) |
| void iosetc | Argdcl ((int, expptr)) |
| void iosetip | Argdcl ((int, int)) |
| void iosetlc | Argdcl ((int, int, int)) |
| void putio | Argdcl ((expptr, expptr)) |
| void putiocall | Argdcl ((expptr)) |
| int | fmtstmt (register struct Labelblock *lp) |
| void | setfmt (struct Labelblock *lp) |
| void | startioctl () |
| long | newiolabel (Void) |
| void | endioctl (Void) |
| int | iocname (Void) |
| void | ioclause (register int n, register expptr p) |
| void | doio (chainp list) |
| LOCAL void | doiolist (chainp p0) |
| LOCAL void | putio (expptr nelt, register expptr addr) |
| void | endio (Void) |
| LOCAL void | putiocall (register expptr q) |
| void | fmtname (Namep np, register Addrp q) |
| LOCAL Addrp | asg_addr (union Expression *p) |
| void | startrw (Void) |
| LOCAL void | dofopen (Void) |
| LOCAL void | dofclose (Void) |
| LOCAL void | dofinquire (Void) |
| LOCAL void | dofmove (char *subname) |
| LOCAL void | ioset (int type, int offset, register expptr p) |
| LOCAL void | iosetc (int offset, register expptr p) |
| LOCAL void | ioseta (int offset, register Addrp p) |
| LOCAL void | iosetip (int i, int offset) |
| LOCAL void | iosetlc (int i, int offp, int offl) |
Variables | |
| int | byterev |
| int | inqmask |
| iob_data * | iob_list |
| Addrp | io_structs [9] |
| LOCAL char | ioroutine [12] |
| LOCAL long | ioendlab |
| LOCAL long | ioerrlab |
| LOCAL int | endbit |
| LOCAL int | errbit |
| LOCAL long | jumplab |
| LOCAL long | skiplab |
| LOCAL int | ioformatted |
| LOCAL int | statstruct = NO |
| LOCAL struct Labelblock * | skiplabel |
| Addrp | ioblkp |
| LOCAL struct Ioclist | ioc |
| LOCAL char * | cilist_names [] |
| LOCAL char * | icilist_names [] |
| LOCAL char * | olist_names [] |
| LOCAL char * | cllist_names [] |
| LOCAL char * | alist_names [] |
| LOCAL char * | inlist_names [] |
| LOCAL char ** | io_fields |
| LOCAL io_setup | io_stuff [] |
| int | iocalladdr = TYADDR |
| int | typeconv [TYERROR+1] |
| int | ioset_assign = OPASSIGN |
Define Documentation
|
|
Definition at line 68 of file f2cdir/io.c. Referenced by ioclause(), putio(), and startrw(). |
|
|
Definition at line 74 of file f2cdir/io.c. |
|
|
Definition at line 121 of file f2cdir/io.c. Referenced by dofinquire(), and dofopen(). |
|
|
Definition at line 123 of file f2cdir/io.c. Referenced by dofinquire(), and dofopen(). |
|
|
Definition at line 130 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 115 of file f2cdir/io.c. Referenced by endioctl(). |
|
|
Definition at line 114 of file f2cdir/io.c. Referenced by endioctl(). |
|
|
Definition at line 124 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 119 of file f2cdir/io.c. Referenced by dofinquire(), dofopen(), and ioclause(). |
|
|
Definition at line 122 of file f2cdir/io.c. Referenced by dofinquire(), and dofopen(). |
|
|
Definition at line 131 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 116 of file f2cdir/io.c. Referenced by endioctl(). |
|
|
Definition at line 128 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 127 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 133 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 134 of file f2cdir/io.c. Referenced by ioclause(). |
|
|
Definition at line 126 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 125 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 117 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 118 of file f2cdir/io.c. Referenced by dofinquire(), and dofopen(). |
|
|
Definition at line 129 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 120 of file f2cdir/io.c. Referenced by dofclose(), and dofopen(). |
|
|
Definition at line 136 of file f2cdir/io.c. Referenced by endio(), endioctl(), and putiocall(). |
|
|
Definition at line 132 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 69 of file f2cdir/io.c. Referenced by ioclause(), putio(), and startrw(). |
|
|
Definition at line 70 of file f2cdir/io.c. |
|
|
Definition at line 110 of file f2cdir/io.c. Referenced by endioctl(), iocname(), and startioctl(). |
|
|
Definition at line 141 of file f2cdir/io.c. |
|
|
Definition at line 30 of file f2cdir/io.c. |
|
|
Definition at line 29 of file f2cdir/io.c. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), endioctl(), ioset(), iosetlc(), and startrw(). |
|
|
Definition at line 67 of file f2cdir/io.c. Referenced by startioctl(), and startrw(). |
|
|
Definition at line 72 of file f2cdir/io.c. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), endioctl(), iosetip(), iosetlc(), startioctl(), and startrw(). |
|
|
Definition at line 165 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 168 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 172 of file f2cdir/io.c. Referenced by dofclose(). |
|
|
Definition at line 188 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 189 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 147 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 145 of file f2cdir/io.c. Referenced by endioctl(), and startrw(). |
|
|
Definition at line 178 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 176 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 177 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 148 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 192 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 193 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 162 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 163 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 190 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 166 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 191 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 154 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 155 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 158 of file f2cdir/io.c. |
|
|
Definition at line 156 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 157 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 153 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 182 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 181 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 183 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 197 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 180 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 179 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 184 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 185 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 198 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 199 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 196 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 149 of file f2cdir/io.c. Referenced by startrw(). |
|
|
Definition at line 167 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 186 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 187 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 164 of file f2cdir/io.c. Referenced by dofopen(). |
|
|
Definition at line 194 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 195 of file f2cdir/io.c. Referenced by dofinquire(). |
|
|
Definition at line 146 of file f2cdir/io.c. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), and startrw(). |
|
|
Definition at line 273 of file f2cdir/io.c. Referenced by killit_CB(), and matrix_print(). |
Function Documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 918 of file f2cdir/io.c. References ALLOC, badtag(), fmtname(), ICON, Addrblock::isarray, Addrblock::memoffset, Primblock::namep, Addrblock::ntempelt, Expression::primblock, STGAUTO, TADDR, Addrblock::tag, Expression::tag, TPRIM, Addrblock::vstg, and Addrblock::vtype. Referenced by startrw().
00920 {
00921 register Addrp q;
00922
00923 if (p->tag != TPRIM)
00924 badtag("asg_addr", p->tag);
00925 q = ALLOC(Addrblock);
00926 q->tag = TADDR;
00927 q->vtype = TYCHAR;
00928 q->vstg = STGAUTO;
00929 q->ntempelt = 1;
00930 q->isarray = 0;
00931 q->memoffset = ICON(0);
00932 fmtname(p->primblock.namep, q);
00933 return q;
00934 }
|
|
|
Definition at line 1220 of file f2cdir/io.c. References call1(), cpexpr(), err, Expression::headblock, ioblkp, ioset(), iosetc(), IOSSTATUS, IOSUNIT, ISINT, putiocall(), TYINT, TYIOINT, V, Headblock::vtype, XCLSTATUS, and XUNIT. Referenced by endioctl().
01221 {
01222 register expptr p;
01223
01224 if( (p = V(IOSUNIT)) && ISINT(p->headblock.vtype) )
01225 {
01226 ioset(TYIOINT, XUNIT, cpexpr(p) );
01227 iosetc(XCLSTATUS, V(IOSSTATUS));
01228 putiocall( call1(TYINT, "f_clos", cpexpr((expptr)ioblkp)) );
01229 }
01230 else
01231 err("bad unit in close statement");
01232 }
|
|
|
|
Definition at line 1273 of file f2cdir/io.c. References call1(), cpexpr(), err, Expression::headblock, ioblkp, ioset(), IOSUNIT, ISINT, putiocall(), TYINT, TYIOINT, V, Headblock::vtype, and XUNIT. Referenced by endioctl().
|
|
|
|
Definition at line 649 of file f2cdir/io.c. References call0(), doiolist(), err, ioformatted, ioroutine, jumplab, NAMEDIRECTED, putiocall(), and TYINT. Referenced by yyparse().
00651 {
00652 if(ioformatted == NAMEDIRECTED)
00653 {
00654 if(list)
00655 err("no I/O list allowed in NAMELIST read/write");
00656 }
00657 else
00658 {
00659 doiolist(list);
00660 ioroutine[0] = 'e';
00661 if (skiplab)
00662 jumplab = 0;
00663 putiocall( call0(TYINT, ioroutine) );
00664 }
00665 }
|
|
|
Definition at line 676 of file f2cdir/io.c. References Expression::addrblock, Primblock::argsp, charptr, Expression::constblock, cpexpr(), Impldoblock::datalist, Chain::datap, enddo(), err, exdo(), fixtype(), frchain(), free, frexpr(), Expression::headblock, ICON, Impldoblock::impdospec, Expression::impldoblock, IOWRITE, ISCHAR, ISCOMPLEX, ISCONST, lencat(), memversion(), mkscalar(), mktmp(), Primblock::namep, Dimblock::nelt, newlabel(), Chain::nextp, ohalign, Expression::primblock, putconst(), puteq(), putio(), q, TADDR, Expression::tag, TCONST, TIMPLDO, TPRIM, TYERROR, UNAM_CONST, Addrblock::uname_tag, vardcl(), Nameblock::vdim, Nameblock::vlastdim, Headblock::vleng, Headblock::vtype, and Constblock::vtype. Referenced by doio().
00678 {
00679 chainp p;
00680 register tagptr q;
00681 register expptr qe;
00682 register Namep qn;
00683 Addrp tp;
00684 int range;
00685 extern char *ohalign;
00686
00687 for (p = p0 ; p ; p = p->nextp)
00688 {
00689 q = (tagptr)p->datap;
00690 if(q->tag == TIMPLDO)
00691 {
00692 exdo(range = (int)newlabel(), (Namep)0,
00693 q->impldoblock.impdospec);
00694 doiolist(q->impldoblock.datalist);
00695 enddo(range);
00696 free( (charptr) q);
00697 }
00698 else {
00699 if(q->tag==TPRIM && q->primblock.argsp==NULL
00700 && q->primblock.namep->vdim!=NULL)
00701 {
00702 vardcl(qn = q->primblock.namep);
00703 if(qn->vdim->nelt) {
00704 putio( fixtype(cpexpr(qn->vdim->nelt)),
00705 (expptr)mkscalar(qn) );
00706 qn->vlastdim = 0;
00707 }
00708 else
00709 err("attempt to i/o array of unknown size");
00710 }
00711 else if(q->tag==TPRIM && q->primblock.argsp==NULL &&
00712 (qe = (expptr) memversion(q->primblock.namep)) )
00713 putio(ICON(1),qe);
00714 else if (ISCONST(q) && q->constblock.vtype == TYCHAR) {
00715 halign = 0;
00716 putio(ICON(1), qe = fixtype(cpexpr(q)));
00717 halign = ohalign;
00718 }
00719 else if(((qe = fixtype(cpexpr(q)))->tag==TADDR &&
00720 (qe->addrblock.uname_tag != UNAM_CONST ||
00721 !ISCOMPLEX(qe -> addrblock.vtype))) ||
00722 (qe -> tag == TCONST && !ISCOMPLEX(qe ->
00723 headblock.vtype))) {
00724 if (qe -> tag == TCONST)
00725 qe = (expptr) putconst((Constp)qe);
00726 putio(ICON(1), qe);
00727 }
00728 else if(qe->headblock.vtype != TYERROR)
00729 {
00730 if(iostmt == IOWRITE)
00731 {
00732 expptr qvl;
00733 qvl = NULL;
00734 if( ISCHAR(qe) )
00735 {
00736 qvl = (expptr)
00737 cpexpr(qe->headblock.vleng);
00738 tp = mktmp(qe->headblock.vtype,
00739 ICON(lencat(qe)));
00740 }
00741 else
00742 tp = mktmp(qe->headblock.vtype,
00743 qe->headblock.vleng);
00744 puteq( cpexpr((expptr)tp), qe);
00745 if(qvl) /* put right length on block */
00746 {
00747 frexpr(tp->vleng);
00748 tp->vleng = qvl;
00749 }
00750 putio(ICON(1), (expptr)tp);
00751 }
00752 else
00753 err("non-left side in READ list");
00754 }
00755 frexpr(q);
00756 }
00757 }
00758 frchain( &p0 );
00759 }
|
|
|
Definition at line 831 of file f2cdir/io.c. References cpexpr(), execlab(), exendif(), exgoto(), exif(), frexpr(), ICON, ioendlab, ioerrlab, ioformatted, IOREAD, IOSTP, IOWRITE, mkexpr(), NAMEDIRECTED, OPGT, OPLT, OPNE, and p1_label(). Referenced by yyparse().
00832 {
00833 if(skiplab)
00834 {
00835 if (ioformatted != NAMEDIRECTED)
00836 p1_label((long)(skiplabel - labeltab));
00837 if(ioendlab) {
00838 exif( mkexpr(OPLT, cpexpr(IOSTP), ICON(0)));
00839 exgoto(execlab(ioendlab));
00840 exendif();
00841 }
00842 if(ioerrlab) {
00843 exif( mkexpr(iostmt==IOREAD||iostmt==IOWRITE
00844 ? OPGT : OPNE,
00845 cpexpr(IOSTP), ICON(0)));
00846 exgoto(execlab(ioerrlab));
00847 exendif();
00848 }
00849 }
00850
00851 if(IOSTP)
00852 frexpr(IOSTP);
00853 }
|
|
|
Definition at line 424 of file f2cdir/io.c. References autovar(), Constant::ci, Constblock::Const, Expression::constblock, dofclose(), dofinquire(), dofmove(), dofopen(), endbit, ENULL, err, errbit, execlab(), fatali(), io_setup::fields, frexpr(), i, ICON, io_fields, io_stuff, IOBACKSPACE, ioblkp, IOCLOSE, IOENDFILE, ioendlab, ioerrlab, IOINQUIRE, IOOPEN, IOREAD, IOREWIND, IOSEND, IOSERR, ioset(), IOSIOSTAT, IOSTP, IOWRITE, ISICON, ISINT, jumplab, mktmp(), newiolabel(), NIOS, NO, p, skiplab, startrw(), TADDR, TYINT, TYIOINT, io_setup::type, V, and XERR. Referenced by yyparse().
00425 {
00426 int i;
00427 expptr p;
00428 struct io_setup *ios;
00429
00430 inioctl = NO;
00431
00432 /* set up for error recovery */
00433
00434 ioerrlab = ioendlab = skiplab = jumplab = 0;
00435
00436 if(p = V(IOSEND))
00437 if(ISICON(p))
00438 execlab(ioendlab = p->constblock.Const.ci);
00439 else
00440 err("bad end= clause");
00441
00442 if(p = V(IOSERR))
00443 if(ISICON(p))
00444 execlab(ioerrlab = p->constblock.Const.ci);
00445 else
00446 err("bad err= clause");
00447
00448 if(IOSTP)
00449 if(IOSTP->tag!=TADDR || ! ISINT(IOSTP->addrblock.vtype) )
00450 {
00451 err("iostat must be an integer variable");
00452 frexpr(IOSTP);
00453 IOSTP = NULL;
00454 }
00455
00456 if(iostmt == IOREAD)
00457 {
00458 if(IOSTP)
00459 {
00460 if(ioerrlab && ioendlab && ioerrlab==ioendlab)
00461 jumplab = ioerrlab;
00462 else
00463 skiplab = jumplab = newiolabel();
00464 }
00465 else {
00466 if(ioerrlab && ioendlab && ioerrlab!=ioendlab)
00467 {
00468 IOSTP = (expptr) mktmp(TYINT, ENULL);
00469 skiplab = jumplab = newiolabel();
00470 }
00471 else
00472 jumplab = (ioerrlab ? ioerrlab : ioendlab);
00473 }
00474 }
00475 else if(iostmt == IOWRITE)
00476 {
00477 if(IOSTP && !ioerrlab)
00478 skiplab = jumplab = newiolabel();
00479 else
00480 jumplab = ioerrlab;
00481 }
00482 else
00483 jumplab = ioerrlab;
00484
00485 endbit = IOSTP!=NULL || ioendlab!=0; /* for use in startrw() */
00486 errbit = IOSTP!=NULL || ioerrlab!=0;
00487 if (jumplab && !IOSTP)
00488 IOSTP = (expptr) mktmp(TYINT, ENULL);
00489
00490 if(iostmt!=IOREAD && iostmt!=IOWRITE)
00491 {
00492 ios = io_stuff + iostmt;
00493 io_fields = ios->fields;
00494 ioblkp = io_structs[iostmt];
00495 if(ioblkp == NULL)
00496 io_structs[iostmt] = ioblkp =
00497 autovar(1, ios->type, ENULL, "");
00498 ioset(TYIOINT, XERR, ICON(errbit));
00499 }
00500
00501 switch(iostmt)
00502 {
00503 case IOOPEN:
00504 dofopen();
00505 break;
00506
00507 case IOCLOSE:
00508 dofclose();
00509 break;
00510
00511 case IOINQUIRE:
00512 dofinquire();
00513 break;
00514
00515 case IOBACKSPACE:
00516 dofmove("f_back");
00517 break;
00518
00519 case IOREWIND:
00520 dofmove("f_rew");
00521 break;
00522
00523 case IOENDFILE:
00524 dofmove("f_end");
00525 break;
00526
00527 case IOREAD:
00528 case IOWRITE:
00529 startrw();
00530 break;
00531
00532 default:
00533 fatali("impossible iostmt %d", iostmt);
00534 }
00535 for(i = 1 ; i<=NIOS ; ++i)
00536 if(i!=IOSIOSTAT && V(i)!=NULL)
00537 frexpr(V(i));
00538 }
|
|
||||||||||||
|
Definition at line 890 of file f2cdir/io.c. References IDENT_LEN, mem(), mkchain(), UNAM_CHARP, UNAM_IDENT, Addrblock::uname_tag, and Addrblock::user. Referenced by asg_addr(), and exassign().
00892 {
00893 register int k;
00894 register char *s, *t;
00895 extern chainp assigned_fmts;
00896
00897 if (!np->vfmt_asg) {
00898 np->vfmt_asg = 1;
00899 assigned_fmts = mkchain((char *)np, assigned_fmts);
00900 }
00901 k = strlen(s = np->fvarname);
00902 if (k < IDENT_LEN - 4) {
00903 q->uname_tag = UNAM_IDENT;
00904 t = q->user.ident;
00905 }
00906 else {
00907 q->uname_tag = UNAM_CHARP;
00908 q->user.Charp = t = mem(k + 5,0);
00909 }
00910 sprintf(t, "%s_fmt", s);
00911 }
|
|
|
Definition at line 294 of file f2cdir/io.c. References CNULL, execerr(), Labelblock::labelno, LABFORMAT, Labelblock::labtype, LABUNKNOWN, and newlabel(). Referenced by startrw(), and yyparse().
00296 {
00297 if(lp == NULL)
00298 {
00299 execerr("unlabeled format statement" , CNULL);
00300 return(-1);
00301 }
00302 if(lp->labtype == LABUNKNOWN)
00303 {
00304 lp->labtype = LABFORMAT;
00305 lp->labelno = (int)newlabel();
00306 }
00307 else if(lp->labtype != LABFORMAT)
00308 {
00309 execerr("bad format number", CNULL);
00310 return(-1);
00311 }
00312 return(lp->labelno);
00313 }
|
|
||||||||||||
|
Definition at line 577 of file f2cdir/io.c. References CLUNKNOWN, err, errstr(), fixtype(), FORMATTED, Expression::headblock, ioc, Ioclist::iocname, Ioclist::iocval, ioformatted, IOOPEN, IOREAD, IOSBAD, IOSFILE, IOSFMT, IOSNML, IOSPOSITIONAL, IOSTDIN, IOSTDOUT, IOSUNIT, LISTDIRECTED, Primblock::namep, NOEXT, Expression::primblock, Expression::tag, TPRIM, vardcl(), Nameblock::vclass, Nameblock::vtype, Primblock::vtype, and Headblock::vtype. Referenced by yyparse().
00579 {
00580 struct Ioclist *iocp;
00581
00582 ++nioctl;
00583 if(n == IOSBAD)
00584 return;
00585 if(n == IOSPOSITIONAL)
00586 {
00587 n = nioctl;
00588 if (n == IOSFMT) {
00589 if (iostmt == IOOPEN) {
00590 n = IOSFILE;
00591 NOEXT("file= specifier omitted from open");
00592 }
00593 else if (iostmt < IOREAD)
00594 goto illegal;
00595 }
00596 else if(n > IOSFMT)
00597 {
00598 illegal:
00599 err("illegal positional iocontrol");
00600 return;
00601 }
00602 }
00603 else if (n == IOSNML)
00604 n = IOSFMT;
00605
00606 if(p == NULL)
00607 {
00608 if(n == IOSUNIT)
00609 p = (expptr) (iostmt==IOREAD ? IOSTDIN : IOSTDOUT);
00610 else if(n != IOSFMT)
00611 {
00612 err("illegal * iocontrol");
00613 return;
00614 }
00615 }
00616 if(n == IOSFMT)
00617 ioformatted = (p==NULL ? LISTDIRECTED : FORMATTED);
00618
00619 iocp = & ioc[n];
00620 if(iocp->iocval == NULL)
00621 {
00622 if(n!=IOSFMT && ( n!=IOSUNIT || (p && p->headblock.vtype!=TYCHAR) ) )
00623 p = fixtype(p);
00624 else if (p && p->tag == TPRIM
00625 && p->primblock.namep->vclass == CLUNKNOWN) {
00626 /* kludge made necessary by attempt to infer types
00627 * for untyped external parameters: given an error
00628 * in calling sequences, an integer argument might
00629 * tentatively be assumed TYCHAR; this would otherwise
00630 * be corrected too late in startrw after startrw
00631 * had decided this to be an internal file.
00632 */
00633 vardcl(p->primblock.namep);
00634 p->primblock.vtype = p->primblock.namep->vtype;
00635 }
00636 iocp->iocval = p;
00637 }
00638 else
00639 errstr("iocontrol %s repeated", iocp->iocname);
00640 }
|
|
|
Definition at line 542 of file f2cdir/io.c. References errstr(), i, ioc, iocname(), IOOPEN, M, NIOS, and NOEXT. Referenced by iocname(), iosetip(), and yyparse().
00543 {
00544 register int i;
00545 int found, mask;
00546
00547 found = 0;
00548 mask = M(iostmt);
00549 for(i = 1 ; i <= NIOS ; ++i)
00550 if(!strcmp(ioc[i].iocname, token))
00551 if(ioc[i].iotype & mask)
00552 return(i);
00553 else {
00554 found = i;
00555 break;
00556 }
00557 if(found) {
00558 if (iostmt == IOOPEN && !strcmp(ioc[i].iocname, "name")) {
00559 NOEXT("open with \"name=\" treated as \"file=\"");
00560 for(i = 1; strcmp(ioc[i].iocname, "file"); i++);
00561 return i;
00562 }
00563 errstr("invalid control %s for statement", ioc[found].iocname);
00564 }
00565 else
00566 errstr("unknown iocontrol %s", token);
00567 return(IOSBAD);
00568 }
|
|
||||||||||||||||
|
Definition at line 1296 of file f2cdir/io.c. References ALLOC, badtype(), Constant::ci, Constblock::Const, Expression::constblock, iob_data::fields, frexpr(), Expression::headblock, ICON, io_fields, ioblkp, ioset_assign, Addrblock::isarray, ISCONST, Addrblock::memoffset, mkexpr(), iob_data::name, Addrblock::ntempelt, offset, putexpr(), statstruct, STGAUTO, string_num(), SZLONG, TADDR, Expression::tag, Addrblock::tag, TCONST, TYIOINT, UNAM_IDENT, Addrblock::uname_tag, Addrblock::user, Addrblock::vstg, Headblock::vtype, Constblock::vtype, and Addrblock::vtype. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), endioctl(), ioseta(), iosetc(), iosetip(), iosetlc(), and startrw().
01298 {
01299 offset /= SZLONG;
01300 if(statstruct && ISCONST(p)) {
01301 register char *s;
01302 switch(type) {
01303 case TYADDR: /* stmt label */
01304 s = "fmt_";
01305 break;
01306 case TYIOINT:
01307 s = "";
01308 break;
01309 default:
01310 badtype("ioset", type);
01311 }
01312 iob_list->fields[offset] =
01313 string_num(s, p->constblock.Const.ci);
01314 frexpr(p);
01315 }
01316 else {
01317 register Addrp q;
01318
01319 q = ALLOC(Addrblock);
01320 q->tag = TADDR;
01321 q->vtype = type;
01322 q->vstg = STGAUTO;
01323 q->ntempelt = 1;
01324 q->isarray = 0;
01325 q->memoffset = ICON(0);
01326 q->uname_tag = UNAM_IDENT;
01327 sprintf(q->user.ident, "%s.%s",
01328 statstruct ? iob_list->name : ioblkp->user.ident,
01329 io_fields[offset + 1]);
01330 if (type == TYADDR && p->tag == TCONST
01331 && p->constblock.vtype == TYADDR) {
01332 /* kludge */
01333 register Addrp p1;
01334 p1 = ALLOC(Addrblock);
01335 p1->tag = TADDR;
01336 p1->vtype = type;
01337 p1->vstg = STGAUTO; /* wrong, but who cares? */
01338 p1->ntempelt = 1;
01339 p1->isarray = 0;
01340 p1->memoffset = ICON(0);
01341 p1->uname_tag = UNAM_IDENT;
01342 sprintf(p1->user.ident, "fmt_%ld",
01343 p->constblock.Const.ci);
01344 frexpr(p);
01345 p = (expptr)p1;
01346 }
01347 if (type == TYADDR && p->headblock.vtype == TYCHAR)
01348 q->vtype = TYCHAR;
01349 putexpr(mkexpr(ioset_assign, (expptr)q, p));
01350 }
01351 }
|
|
||||||||||||
|
Definition at line 1383 of file f2cdir/io.c. References addrof(), badtag(), badthing(), Extsym::cextname, Constant::ci, Constblock::Const, Expression::constblock, cpstring(), Extsym::curno, Nameblock::cvarname, ENULL, iob_data::fields, ICON, ioset(), Addrblock::isarray, mem(), Addrblock::memoffset, mkexpr(), NOEXT, offset, OPCHARCAST, STGCOMMON, SZLONG, TADDR, Expression::tag, Addrblock::tag, TCONST, tostring(), UNAM_CONST, UNAM_NAME, Addrblock::uname_tag, usedefsforcommon, Addrblock::user, Nameblock::vardesc, Nameblock::vcommequiv, Nameblock::visused, Addrblock::vleng, Nameblock::voffset, Nameblock::vstg, and Addrblock::vtype. Referenced by startrw().
01385 {
01386 char *s, *s1;
01387 static char who[] = "ioseta";
01388 expptr e, mo;
01389 Namep np;
01390 ftnint ci;
01391 int k;
01392 char buf[24], buf1[24];
01393 Extsym *comm;
01394 extern int usedefsforcommon;
01395
01396 if(statstruct)
01397 {
01398 if (!p)
01399 return;
01400 if (p->tag != TADDR)
01401 badtag(who, p->tag);
01402 offset /= SZLONG;
01403 switch(p->uname_tag) {
01404 case UNAM_NAME:
01405 mo = p->memoffset;
01406 if (mo->tag != TCONST)
01407 badtag("ioseta/memoffset", mo->tag);
01408 np = p->user.name;
01409 np->visused = 1;
01410 ci = mo->constblock.Const.ci - np->voffset;
01411 if (np->vstg == STGCOMMON
01412 && !np->vcommequiv
01413 && !usedefsforcommon) {
01414 comm = &extsymtab[np->vardesc.varno];
01415 sprintf(buf, "%d.", comm->curno);
01416 k = strlen(buf) + strlen(comm->cextname)
01417 + strlen(np->cvarname);
01418 if (ci) {
01419 sprintf(buf1, "+%ld", ci);
01420 k += strlen(buf1);
01421 }
01422 else
01423 buf1[0] = 0;
01424 s = mem(k + 1, 0);
01425 sprintf(s, "%s%s%s%s", comm->cextname, buf,
01426 np->cvarname, buf1);
01427 }
01428 else if (ci) {
01429 sprintf(buf,"%ld", ci);
01430 s1 = p->user.name->cvarname;
01431 k = strlen(buf) + strlen(s1);
01432 sprintf(s = mem(k+2,0), "%s+%s", s1, buf);
01433 }
01434 else
01435 s = cpstring(np->cvarname);
01436 break;
01437 case UNAM_CONST:
01438 s = tostring(p->user.Const.ccp1.ccp0,
01439 (int)p->vleng->constblock.Const.ci);
01440 break;
01441 default:
01442 badthing("uname_tag", who, p->uname_tag);
01443 }
01444 /* kludge for Hollerith */
01445 if (p->vtype != TYCHAR) {
01446 s1 = mem(strlen(s)+10,0);
01447 sprintf(s1, "(char *)%s%s", p->isarray ? "" : "&", s);
01448 s = s1;
01449 }
01450 iob_list->fields[offset] = s;
01451 }
01452 else {
01453 if (!p)
01454 e = ICON(0);
01455 else if (p->vtype != TYCHAR) {
01456 NOEXT("non-character variable as format or internal unit");
01457 e = mkexpr(OPCHARCAST, (expptr)p, ENULL);
01458 }
01459 else
01460 e = addrof((expptr)p);
01461 ioset(TYADDR, offset, e);
01462 }
01463 }
|
|
||||||||||||
|
Definition at line 1362 of file f2cdir/io.c. References addrof(), cpexpr(), err, fixtype(), Expression::headblock, ICON, ioset(), offset, putchop(), putx(), and Headblock::vtype. Referenced by dofclose(), dofopen(), and iosetlc().
|
|
||||||||||||
|
Definition at line 1474 of file f2cdir/io.c. References Expression::addrblock, addrof(), cpexpr(), errstr(), i, ICON, inqmask, ioc, iocname(), ioset(), ioset_assign, offset, ONEOF, OPASSIGN, OPASSIGNI, TADDR, Expression::tag, V, and Addrblock::vtype. Referenced by dofinquire().
01476 {
01477 register expptr p;
01478
01479 if(p = V(i))
01480 if(p->tag==TADDR &&
01481 ONEOF(p->addrblock.vtype, inqmask) ) {
01482 ioset_assign = OPASSIGNI;
01483 ioset(TYADDR, offset, addrof(cpexpr(p)) );
01484 ioset_assign = OPASSIGN;
01485 }
01486 else
01487 errstr("impossible inquire parameter %s", ioc[i].iocname);
01488 else
01489 ioset(TYADDR, offset, ICON(0) );
01490 }
|
|
||||||||||||||||
|
Definition at line 1501 of file f2cdir/io.c. References cpexpr(), Expression::headblock, i, ioset(), iosetc(), TYIOINT, V, Headblock::vleng, and Headblock::vtype. Referenced by dofinquire().
|
|
|
Definition at line 415 of file f2cdir/io.c. References Labelblock::labdefined, and mklabel(). Referenced by endioctl().
00415 {
00416 long rv;
00417 rv = ++lastiolabno;
00418 skiplabel = mklabel(rv);
00419 skiplabel->labdefined = 1;
00420 return rv;
00421 }
|
|
||||||||||||
|
Definition at line 776 of file f2cdir/io.c. References ALLOC, byterev, c, call2(), call3(), call4(), Addrblock::charleng, ENULL, fixtype(), FORMATTED, Expression::headblock, ICON, iocalladdr, ioformatted, Addrblock::isarray, ISCOMPLEX, ISCONST, LISTDIRECTED, M, mc, Addrblock::memoffset, mkconv(), mkexpr(), Addrblock::ntempelt, ONEOF, OPCHARCAST, OPSTAR, putconst(), putiocall(), q, STGAUTO, TADDR, Addrblock::tag, TYINT, TYLENG, typeconv, UNAM_IDENT, Addrblock::uname_tag, Addrblock::user, Addrblock::vstg, Addrblock::vtype, and Headblock::vtype. Referenced by doiolist().
00778 {
00779 int type;
00780 register expptr q;
00781 register Addrp c = 0;
00782
00783 type = addr->headblock.vtype;
00784 if(ioformatted!=LISTDIRECTED && ISCOMPLEX(type) )
00785 {
00786 nelt = mkexpr(OPSTAR, ICON(2), nelt);
00787 type -= (TYCOMPLEX-TYREAL);
00788 }
00789
00790 /* pass a length with every item. for noncharacter data, fake one */
00791 if(type != TYCHAR)
00792 {
00793
00794 if( ISCONST(addr) )
00795 addr = (expptr) putconst((Constp)addr);
00796 c = ALLOC(Addrblock);
00797 c->tag = TADDR;
00798 c->vtype = TYLENG;
00799 c->vstg = STGAUTO;
00800 c->ntempelt = 1;
00801 c->isarray = 1;
00802 c->memoffset = ICON(0);
00803 c->uname_tag = UNAM_IDENT;
00804 c->charleng = 1;
00805 sprintf(c->user.ident, "(ftnlen)sizeof(%s)", typename[type]);
00806 addr = mkexpr(OPCHARCAST, addr, ENULL);
00807 }
00808
00809 nelt = fixtype( mkconv(tyioint,nelt) );
00810 if(ioformatted == LISTDIRECTED) {
00811 expptr mc = mkconv(tyioint, ICON(typeconv[type]));
00812 q = c ? call4(TYINT, "do_lio", mc, nelt, addr, (expptr)c)
00813 : call3(TYINT, "do_lio", mc, nelt, addr);
00814 }
00815 else {
00816 char *s = ioformatted==FORMATTED ? "do_fio"
00817 : !byterev ? "do_uio"
00818 : ONEOF(type, M(TYCHAR)|M(TYINT1)|M(TYLOGICAL1))
00819 ? "do_ucio" : "do_unio";
00820 q = c ? call3(TYINT, s, nelt, addr, (expptr)c)
00821 : call2(TYINT, s, nelt, addr);
00822 }
00823 iocalladdr = TYCHAR;
00824 putiocall(q);
00825 iocalladdr = TYADDR;
00826 }
|
|
|
Definition at line 862 of file f2cdir/io.c. References cpexpr(), execlab(), exendif(), exgoto(), exif(), fixexpr(), ICON, IOSTP, jumplab, mkexpr(), OPASSIGN, OPNE, putexpr(), q, and TYINT. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), doio(), putio(), and startrw().
00864 {
00865 int tyintsave;
00866
00867 tyintsave = tyint;
00868 tyint = tyioint; /* for -I2 and -i2 */
00869
00870 if(IOSTP)
00871 {
00872 q->headblock.vtype = TYINT;
00873 q = fixexpr((Exprp)mkexpr(OPASSIGN, cpexpr(IOSTP), q));
00874 }
00875 putexpr(q);
00876 if(jumplab) {
00877 exif(mkexpr(OPNE, cpexpr(IOSTP), ICON(0)));
00878 exgoto(execlab(jumplab));
00879 exendif();
00880 }
00881 tyint = tyintsave;
00882 }
|
|
|
Definition at line 321 of file f2cdir/io.c. References flline(), Labelblock::fmtstring, lexline(), mem(), warn(), warn1(), and warni(). Referenced by yyparse().
00323 {
00324 int n, parity;
00325 char *s0;
00326 register char *s, *se, *t;
00327 register k;
00328
00329 s0 = s = lexline(&n);
00330 se = t = s + n;
00331
00332 /* warn of trivial errors, e.g. " 11 CONTINUE" (one too few spaces) */
00333 /* following FORMAT... */
00334
00335 if (n <= 0)
00336 warn("No (...) after FORMAT");
00337 else if (*s != '(')
00338 warni("%c rather than ( after FORMAT", *s);
00339 else if (se[-1] != ')') {
00340 *se = 0;
00341 while(--t > s && *t != ')') ;
00342 if (t <= s)
00343 warn("No ) at end of FORMAT statement");
00344 else if (se - t > 30)
00345 warn1("Extraneous text at end of FORMAT: ...%s", se-12);
00346 else
00347 warn1("Extraneous text at end of FORMAT: %s", t+1);
00348 t = se;
00349 }
00350
00351 /* fix MYQUOTES (\002's) and \\'s */
00352
00353 parity = 1;
00354 while(s < se)
00355 switch(*s++) {
00356 case 2:
00357 if ((parity ^= 1) && *s == 2) {
00358 t -= 2;
00359 ++s;
00360 }
00361 else
00362 t += 3;
00363 break;
00364 case '"':
00365 case '\\':
00366 t++; break;
00367 }
00368 s = s0;
00369 parity = 1;
00370 if (lp) {
00371 lp->fmtstring = t = mem((int)(t - s + 1), 0);
00372 while(s < se)
00373 switch(k = *s++) {
00374 case 2:
00375 if ((parity ^= 1) && *s == 2)
00376 s++;
00377 else {
00378 t[0] = '\\';
00379 t[1] = '0';
00380 t[2] = '0';
00381 t[3] = '2';
00382 t += 4;
00383 }
00384 break;
00385 case '"':
00386 case '\\':
00387 *t++ = '\\';
00388 /* no break */
00389 default:
00390 *t++ = k;
00391 }
00392 *t = 0;
00393 }
00394 flline();
00395 }
|
|
|
Definition at line 402 of file f2cdir/io.c. References i, ioformatted, NIOS, UNFORMATTED, V, and YES. Referenced by yyparse().
00404 {
00405 register int i;
00406
00407 inioctl = YES;
00408 nioctl = 0;
00409 ioformatted = UNFORMATTED;
00410 for(i = 1 ; i<=NIOS ; ++i)
00411 V(i) = NULL;
00412 }
|
|
|
Definition at line 937 of file f2cdir/io.c. References Expression::addrblock, ALLOC, Primblock::argsp, asg_addr(), autovar(), call1(), Constant::ci, CLNAMELIST, CLVAR, Constblock::Const, Expression::constblock, cpexpr(), endbit, ENULL, err, errbit, io_setup::fields, fixtype(), Labelblock::fmtlabused, fmtstmt(), FORMATTED, frexpr(), Expression::headblock, ICON, io_fields, io_stuff, ioblkp, ioformatted, IOREAD, ioroutine, ioset(), ioseta(), IOSFMT, IOSREC, IOSTDIN, IOSUNIT, ISCONST, ISICON, ISINT, isstatic(), jumplab, LISTDIRECTED, Addrblock::memno, Addrblock::memoffset, mkaddcon(), mklabel(), mkscalar(), MSKSTATIC, NAMEDIRECTED, Primblock::namep, Dimblock::nelt, new_iob_data(), NO, ONEOF, Expression::primblock, putiocall(), Labelblock::stateno, statstruct, STGINIT, TADDR, Addrblock::tag, Expression::tag, temp_name(), TPRIM, TYINT, TYIOINT, io_setup::type, UNAM_IDENT, UNFORMATTED, Addrblock::user, V, vardcl(), Addrblock::vclass, Nameblock::vclass, Nameblock::vdim, Nameblock::vlastdim, Addrblock::vleng, Addrblock::vstg, Nameblock::vstg, Addrblock::vtype, Nameblock::vtype, Headblock::vtype, XEND, XERR, XFMT, XIEND, XIFMT, XIRLEN, XIRNUM, XIUNIT, XREC, XUNIT, and YES. Referenced by endioctl().
00938 {
00939 register expptr p;
00940 register Namep np;
00941 register Addrp unitp, fmtp, recp;
00942 register expptr nump;
00943 int iostmt1;
00944 flag intfile, sequential, ok, varfmt;
00945 struct io_setup *ios;
00946
00947 /* First look at all the parameters and determine what is to be done */
00948
00949 ok = YES;
00950 statstruct = YES;
00951
00952 intfile = NO;
00953 if(p = V(IOSUNIT))
00954 {
00955 if( ISINT(p->headblock.vtype) ) {
00956 int_unit:
00957 unitp = (Addrp) cpexpr(p);
00958 }
00959 else if(p->headblock.vtype == TYCHAR)
00960 {
00961 if (nioctl == 1 && iostmt == IOREAD) {
00962 /* kludge to recognize READ(format expr) */
00963 V(IOSFMT) = p;
00964 V(IOSUNIT) = p = (expptr) IOSTDIN;
00965 ioformatted = FORMATTED;
00966 goto int_unit;
00967 }
00968 intfile = YES;
00969 if(p->tag==TPRIM && p->primblock.argsp==NULL &&
00970 (np = p->primblock.namep)->vdim!=NULL)
00971 {
00972 vardcl(np);
00973 if(nump = np->vdim->nelt)
00974 {
00975 nump = fixtype(cpexpr(nump));
00976 if( ! ISCONST(nump) ) {
00977 statstruct = NO;
00978 np->vlastdim = 0;
00979 }
00980 }
00981 else
00982 {
00983 err("attempt to use internal unit array of unknown size");
00984 ok = NO;
00985 nump = ICON(1);
00986 }
00987 unitp = mkscalar(np);
00988 }
00989 else {
00990 nump = ICON(1);
00991 unitp = (Addrp /*pjw */) fixtype(cpexpr(p));
00992 }
00993 if(! isstatic((expptr)unitp) )
00994 statstruct = NO;
00995 }
00996 else {
00997 err("unit specifier not of type integer or character");
00998 ok = NO;
00999 }
01000 }
01001 else
01002 {
01003 err("bad unit specifier");
01004 ok = NO;
01005 }
01006
01007 sequential = YES;
01008 if(p = V(IOSREC))
01009 if( ISINT(p->headblock.vtype) )
01010 {
01011 recp = (Addrp) cpexpr(p);
01012 sequential = NO;
01013 }
01014 else {
01015 err("bad REC= clause");
01016 ok = NO;
01017 }
01018 else
01019 recp = NULL;
01020
01021
01022 varfmt = YES;
01023 fmtp = NULL;
01024 if(p = V(IOSFMT))
01025 {
01026 if(p->tag==TPRIM && p->primblock.argsp==NULL)
01027 {
01028 np = p->primblock.namep;
01029 if(np->vclass == CLNAMELIST)
01030 {
01031 ioformatted = NAMEDIRECTED;
01032 fmtp = (Addrp) fixtype(p);
01033 V(IOSFMT) = (expptr)fmtp;
01034 if (skiplab)
01035 jumplab = 0;
01036 goto endfmt;
01037 }
01038 vardcl(np);
01039 if(np->vdim)
01040 {
01041 if( ! ONEOF(np->vstg, MSKSTATIC) )
01042 statstruct = NO;
01043 fmtp = mkscalar(np);
01044 goto endfmt;
01045 }
01046 if( ISINT(np->vtype) ) /* ASSIGNed label */
01047 {
01048 statstruct = NO;
01049 varfmt = YES;
01050 fmtp = asg_addr(p);
01051 goto endfmt;
01052 }
01053 }
01054 p = V(IOSFMT) = fixtype(p);
01055 if(p->headblock.vtype == TYCHAR
01056 /* Since we allow write(6,n) */
01057 /* we may as well allow write(6,n(2)) */
01058 || p->tag == TADDR && ISINT(p->addrblock.vtype))
01059 {
01060 if( ! isstatic(p) )
01061 statstruct = NO;
01062 fmtp = (Addrp) cpexpr(p);
01063 }
01064 else if( ISICON(p) )
01065 {
01066 struct Labelblock *lp;
01067 lp = mklabel(p->constblock.Const.ci);
01068 if (fmtstmt(lp) > 0)
01069 {
01070 fmtp = (Addrp)mkaddcon(lp->stateno);
01071 /* lp->stateno for names fmt_nnn */
01072 lp->fmtlabused = 1;
01073 varfmt = NO;
01074 }
01075 else
01076 ioformatted = UNFORMATTED;
01077 }
01078 else {
01079 err("bad format descriptor");
01080 ioformatted = UNFORMATTED;
01081 ok = NO;
01082 }
01083 }
01084 else
01085 fmtp = NULL;
01086
01087 endfmt:
01088 if(intfile) {
01089 if (ioformatted==UNFORMATTED) {
01090 err("unformatted internal I/O not allowed");
01091 ok = NO;
01092 }
01093 if (recp) {
01094 err("direct internal I/O not allowed");
01095 ok = NO;
01096 }
01097 }
01098 if(!sequential && ioformatted==LISTDIRECTED)
01099 {
01100 err("direct list-directed I/O not allowed");
01101 ok = NO;
01102 }
01103 if(!sequential && ioformatted==NAMEDIRECTED)
01104 {
01105 err("direct namelist I/O not allowed");
01106 ok = NO;
01107 }
01108
01109 if( ! ok ) {
01110 statstruct = NO;
01111 return;
01112 }
01113
01114 /*
01115 Now put out the I/O structure, statically if all the clauses
01116 are constants, dynamically otherwise
01117 */
01118
01119 if (intfile) {
01120 ios = io_stuff + iostmt;
01121 iostmt1 = IOREAD;
01122 }
01123 else {
01124 ios = io_stuff;
01125 iostmt1 = 0;
01126 }
01127 io_fields = ios->fields;
01128 if(statstruct)
01129 {
01130 ioblkp = ALLOC(Addrblock);
01131 ioblkp->tag = TADDR;
01132 ioblkp->vtype = ios->type;
01133 ioblkp->vclass = CLVAR;
01134 ioblkp->vstg = STGINIT;
01135 ioblkp->memno = ++lastvarno;
01136 ioblkp->memoffset = ICON(0);
01137 ioblkp -> uname_tag = UNAM_IDENT;
01138 new_iob_data(ios,
01139 temp_name("io_", lastvarno, ioblkp->user.ident)); }
01140 else if(!(ioblkp = io_structs[iostmt1]))
01141 io_structs[iostmt1] = ioblkp =
01142 autovar(1, ios->type, ENULL, "");
01143
01144 ioset(TYIOINT, XERR, ICON(errbit));
01145 if(iostmt == IOREAD)
01146 ioset(TYIOINT, (intfile ? XIEND : XEND), ICON(endbit) );
01147
01148 if(intfile)
01149 {
01150 ioset(TYIOINT, XIRNUM, nump);
01151 ioset(TYIOINT, XIRLEN, cpexpr(unitp->vleng) );
01152 ioseta(XIUNIT, unitp);
01153 }
01154 else
01155 ioset(TYIOINT, XUNIT, (expptr) unitp);
01156
01157 if(recp)
01158 ioset(TYIOINT, /* intfile ? XIREC : */ XREC, (expptr) recp);
01159
01160 if(varfmt)
01161 ioseta( intfile ? XIFMT : XFMT , fmtp);
01162 else
01163 ioset(TYADDR, intfile ? XIFMT : XFMT, (expptr) fmtp);
01164
01165 ioroutine[0] = 's';
01166 ioroutine[1] = '_';
01167 ioroutine[2] = iostmt==IOREAD ? 'r' : 'w';
01168 ioroutine[3] = "ds"[sequential];
01169 ioroutine[4] = "ufln"[ioformatted];
01170 ioroutine[5] = "ei"[intfile];
01171 ioroutine[6] = '\0';
01172
01173 putiocall( call1(TYINT, ioroutine, cpexpr((expptr)ioblkp) ));
01174
01175 if(statstruct)
01176 {
01177 frexpr((expptr)ioblkp);
01178 statstruct = NO;
01179 ioblkp = 0; /* unnecessary */
01180 }
01181 }
|
Variable Documentation
|
|
Initial value: {
"alist",
"aerr",
"aunit"
}Definition at line 236 of file f2cdir/io.c. |
|
|
Definition at line 36 of file f2cdir/io.c. Referenced by putio(). |
|
|
Initial value: {
"cilist",
"cierr",
"ciunit",
"ciend",
"cifmt",
"cirec"
}Definition at line 201 of file f2cdir/io.c. |
|
|
Initial value: {
"cllist",
"cerr",
"cunit",
"csta"
}Definition at line 230 of file f2cdir/io.c. |
|
|
Definition at line 58 of file f2cdir/io.c. Referenced by endioctl(), and startrw(). |
|
|
Definition at line 59 of file f2cdir/io.c. Referenced by endioctl(), and startrw(). |
|
|
Initial value: {
"icilist",
"icierr",
"iciunit",
"iciend",
"icifmt",
"icirlen",
"icirnum"
}Definition at line 209 of file f2cdir/io.c. |
|
|
Initial value: {
"inlist",
"inerr",
"inunit",
"infile",
"infilen",
"inex",
"inopen",
"innum",
"innamed",
"inname",
"innamlen",
"inacc",
"inacclen",
"inseq",
"inseqlen",
"indir",
"indirlen",
"infmt",
"infmtlen",
"inform",
"informlen",
"inunf",
"inunflen",
"inrecl",
"innrec",
"inblank",
"inblanklen"
}Definition at line 241 of file f2cdir/io.c. |
|
|
Definition at line 36 of file f2cdir/io.c. Referenced by iosetip(), and set_externs(). |
|
|
Definition at line 271 of file f2cdir/io.c. Referenced by endioctl(), ioset(), and startrw(). |
|
|
Definition at line 52 of file f2cdir/io.c. |
|
|
Initial value: {
zork(cilist_names, TYCILIST),
zork(inlist_names, TYINLIST),
zork(olist_names, TYOLIST),
zork(cllist_names, TYCLLIST),
zork(alist_names, TYALIST),
zork(alist_names, TYALIST),
zork(alist_names, TYALIST),
zork(icilist_names,TYICILIST),
zork(icilist_names,TYICILIST)
}Definition at line 275 of file f2cdir/io.c. Referenced by endioctl(), and startrw(). |
|
|
Definition at line 51 of file f2cdir/io.c. |
|
|
Definition at line 65 of file f2cdir/io.c. Referenced by dofclose(), dofinquire(), dofmove(), dofopen(), endioctl(), ioset(), and startrw(). |
|
|
Referenced by ioclause(), iocname(), and iosetip(). |
|
|
Definition at line 761 of file f2cdir/io.c. Referenced by putio(), and typekludge(). |
|
|
Definition at line 56 of file f2cdir/io.c. Referenced by endio(), and endioctl(). |
|
|
Definition at line 57 of file f2cdir/io.c. Referenced by endio(), and endioctl(). |
|
|
Definition at line 62 of file f2cdir/io.c. Referenced by doio(), endio(), ioclause(), putio(), startioctl(), and startrw(). |
|
|
Definition at line 54 of file f2cdir/io.c. |
|
|
Definition at line 1287 of file f2cdir/io.c. |
|
|
Definition at line 60 of file f2cdir/io.c. Referenced by doio(), endioctl(), putiocall(), and startrw(). |
|
|
Initial value: {
"olist",
"oerr",
"ounit",
"ofnm",
"ofnmlen",
"osta",
"oacc",
"ofm",
"orl",
"oblnk"
}Definition at line 218 of file f2cdir/io.c. |
|
|
Definition at line 61 of file f2cdir/io.c. Referenced by endioctl(). |
|
|
Definition at line 64 of file f2cdir/io.c. |
|
|
Definition at line 63 of file f2cdir/io.c. |
|
|
Initial value: {
0, 1, 11, 2, 3, 14, 4, 5, 6, 7, 12, 13, 8, 9, 10, 15
}Definition at line 762 of file f2cdir/io.c. Referenced by putio(). |