1: /* TEMPORARY */
   2: #define TYIOINT TYLONG
   3: #define SZIOINT SZLONG
   4: 
   5: #include "defs"
   6: 
   7: 
   8: LOCAL char ioroutine[XL+1];
   9: 
  10: LOCAL int ioendlab;
  11: LOCAL int ioerrlab;
  12: LOCAL int endbit;
  13: LOCAL int jumplab;
  14: LOCAL int skiplab;
  15: LOCAL int ioformatted;
  16: 
  17: #define UNFORMATTED 0
  18: #define FORMATTED 1
  19: #define LISTDIRECTED 2
  20: 
  21: #define V(z)    ioc[z].iocval
  22: 
  23: #define IOALL 07777
  24: 
  25: LOCAL struct ioclist
  26:     {
  27:     char *iocname;
  28:     int iotype;
  29:     expptr iocval;
  30:     } ioc[ ] =
  31:     {
  32:         { "", 0 },
  33:         { "unit", IOALL },
  34:         { "fmt", M(IOREAD) | M(IOWRITE) },
  35:         { "err", IOALL },
  36:         { "end", M(IOREAD) },
  37:         { "iostat", IOALL },
  38:         { "rec", M(IOREAD) | M(IOWRITE) },
  39:         { "recl", M(IOOPEN) | M(IOINQUIRE) },
  40:         { "file", M(IOOPEN) | M(IOINQUIRE) },
  41:         { "status", M(IOOPEN) | M(IOCLOSE) },
  42:         { "access", M(IOOPEN) | M(IOINQUIRE) },
  43:         { "form", M(IOOPEN) | M(IOINQUIRE) },
  44:         { "blank", M(IOOPEN) | M(IOINQUIRE) },
  45:         { "exist", M(IOINQUIRE) },
  46:         { "opened", M(IOINQUIRE) },
  47:         { "number", M(IOINQUIRE) },
  48:         { "named", M(IOINQUIRE) },
  49:         { "name", M(IOINQUIRE) },
  50:         { "sequential", M(IOINQUIRE) },
  51:         { "direct", M(IOINQUIRE) },
  52:         { "formatted", M(IOINQUIRE) },
  53:         { "unformatted", M(IOINQUIRE) },
  54:         { "nextrec", M(IOINQUIRE) }
  55:     } ;
  56: 
  57: #define NIOS (sizeof(ioc)/sizeof(struct ioclist) - 1)
  58: #define MAXIO   SZFLAG + 10*SZIOINT + 15*SZADDR
  59: 
  60: #define IOSUNIT 1
  61: #define IOSFMT 2
  62: #define IOSERR 3
  63: #define IOSEND 4
  64: #define IOSIOSTAT 5
  65: #define IOSREC 6
  66: #define IOSRECL 7
  67: #define IOSFILE 8
  68: #define IOSSTATUS 9
  69: #define IOSACCESS 10
  70: #define IOSFORM 11
  71: #define IOSBLANK 12
  72: #define IOSEXIST 13
  73: #define IOSOPENEDED 14
  74: #define IOSNUMBER 15
  75: #define IOSNAMED 16
  76: #define IOSNAME 17
  77: #define IOSSEQUENTIAL 18
  78: #define IOSDIRECT 19
  79: #define IOSFORMATTED 20
  80: #define IOSUNFORMATTED 21
  81: #define IOSNEXTREC 22
  82: 
  83: #define IOSTP V(IOSIOSTAT)
  84: 
  85: 
  86: /* offsets in generated structures */
  87: 
  88: #define SZFLAG SZIOINT
  89: 
  90: #define XERR 0
  91: #define XUNIT   SZFLAG
  92: #define XEND    SZFLAG + SZIOINT
  93: #define XFMT    2*SZFLAG + SZIOINT
  94: #define XREC    2*SZFLAG + SZIOINT + SZADDR
  95: #define XRLEN   2*SZFLAG + 2*SZADDR
  96: #define XRNUM   2*SZFLAG + 2*SZADDR + SZIOINT
  97: 
  98: #define XIFMT   2*SZFLAG + SZADDR
  99: #define XIEND   SZFLAG + SZADDR
 100: #define XIUNIT  SZFLAG
 101: 
 102: #define XFNAME  SZFLAG + SZIOINT
 103: #define XFNAMELEN   SZFLAG + SZIOINT + SZADDR
 104: #define XSTATUS SZFLAG + 2*SZIOINT + SZADDR
 105: #define XACCESS SZFLAG + 2*SZIOINT + 2*SZADDR
 106: #define XFORMATTED  SZFLAG + 2*SZIOINT + 3*SZADDR
 107: #define XRECLEN SZFLAG + 2*SZIOINT + 4*SZADDR
 108: #define XBLANK  SZFLAG + 3*SZIOINT + 4*SZADDR
 109: 
 110: #define XCLSTATUS   SZFLAG + SZIOINT
 111: 
 112: #define XFILE   SZFLAG + SZIOINT
 113: #define XFILELEN    SZFLAG + SZIOINT + SZADDR
 114: #define XEXISTS SZFLAG + 2*SZIOINT + SZADDR
 115: #define XOPEN   SZFLAG + 2*SZIOINT + 2*SZADDR
 116: #define XNUMBER SZFLAG + 2*SZIOINT + 3*SZADDR
 117: #define XNAMED  SZFLAG + 2*SZIOINT + 4*SZADDR
 118: #define XNAME   SZFLAG + 2*SZIOINT + 5*SZADDR
 119: #define XNAMELEN    SZFLAG + 2*SZIOINT + 6*SZADDR
 120: #define XQACCESS    SZFLAG + 3*SZIOINT + 6*SZADDR
 121: #define XQACCLEN    SZFLAG + 3*SZIOINT + 7*SZADDR
 122: #define XSEQ    SZFLAG + 4*SZIOINT + 7*SZADDR
 123: #define XSEQLEN SZFLAG + 4*SZIOINT + 8*SZADDR
 124: #define XDIRECT SZFLAG + 5*SZIOINT + 8*SZADDR
 125: #define XDIRLEN SZFLAG + 5*SZIOINT + 9*SZADDR
 126: #define XFORM   SZFLAG + 6*SZIOINT + 9*SZADDR
 127: #define XFORMLEN    SZFLAG + 6*SZIOINT + 10*SZADDR
 128: #define XFMTED  SZFLAG + 7*SZIOINT + 10*SZADDR
 129: #define XFMTEDLEN   SZFLAG + 7*SZIOINT + 11*SZADDR
 130: #define XUNFMT  SZFLAG + 8*SZIOINT + 11*SZADDR
 131: #define XUNFMTLEN   SZFLAG + 8*SZIOINT + 12*SZADDR
 132: #define XQRECL  SZFLAG + 9*SZIOINT + 12*SZADDR
 133: #define XNEXTREC    SZFLAG + 9*SZIOINT + 13*SZADDR
 134: #define XQBLANK SZFLAG + 9*SZIOINT + 14*SZADDR
 135: #define XQBLANKLEN  SZFLAG + 9*SZIOINT + 15*SZADDR
 136: 
 137: fmtstmt(lp)
 138: register struct labelblock *lp;
 139: {
 140: if(lp == NULL)
 141:     {
 142:     execerr("unlabeled format statement" , 0);
 143:     return(-1);
 144:     }
 145: if(lp->labtype == LABUNKNOWN)
 146:     {
 147:     lp->labtype = LABFORMAT;
 148:     lp->labelno = newlabel();
 149:     }
 150: else if(lp->labtype != LABFORMAT)
 151:     {
 152:     execerr("bad format number", 0);
 153:     return(-1);
 154:     }
 155: return(lp->labelno);
 156: }
 157: 
 158: 
 159: 
 160: setfmt(lp)
 161: struct labelblock *lp;
 162: {
 163: ftnint n;
 164: char *s, *lexline();
 165: 
 166: s = lexline(&n);
 167: preven(ALILONG);
 168: prlabel(asmfile, lp->labelno);
 169: putstr(asmfile, s, n);
 170: flline();
 171: }
 172: 
 173: 
 174: 
 175: startioctl()
 176: {
 177: register int i;
 178: 
 179: inioctl = YES;
 180: nioctl = 0;
 181: ioerrlab = 0;
 182: ioformatted = UNFORMATTED;
 183: for(i = 1 ; i<=NIOS ; ++i)
 184:     V(i) = NULL;
 185: }
 186: 
 187: 
 188: 
 189: endioctl()
 190: {
 191: int i;
 192: expptr p;
 193: struct labelblock *mklabel();
 194: 
 195: inioctl = NO;
 196: if(ioblkp == NULL)
 197:     ioblkp = autovar( (MAXIO+SZIOINT-1)/SZIOINT , TYIOINT, NULL);
 198: 
 199: /* set up for error recovery */
 200: 
 201: ioerrlab = ioendlab = skiplab = jumplab = 0;
 202: 
 203: if(p = V(IOSEND))
 204:     if(ISICON(p))
 205:         ioendlab = mklabel(p->const.ci)->labelno;
 206:     else
 207:         err("bad end= clause");
 208: 
 209: if(p = V(IOSERR))
 210:     if(ISICON(p))
 211:         ioerrlab = mklabel(p->const.ci)->labelno;
 212:     else
 213:         err("bad err= clause");
 214: 
 215: if(IOSTP==NULL && ioerrlab!=0 && ioendlab!=0 && ioerrlab!=ioendlab)
 216:     IOSTP = mktemp(TYINT, NULL);
 217: 
 218: if(IOSTP != NULL)
 219:     if(IOSTP->tag!=TADDR || ! ISINT(IOSTP->vtype) )
 220:         {
 221:         err("iostat must be an integer variable");
 222:         frexpr(IOSTP);
 223:         IOSTP = NULL;
 224:         }
 225: 
 226: if(IOSTP)
 227:     {
 228:     if( (iostmt==IOREAD || iostmt==IOWRITE) &&
 229:         (ioerrlab!=ioendlab || ioerrlab==0) )
 230:         jumplab = skiplab = newlabel();
 231:     else
 232:         jumplab = ioerrlab;
 233:     }
 234: else
 235:     {
 236:     jumplab = ioerrlab;
 237:     if(ioendlab)
 238:         jumplab = ioendlab;
 239:     }
 240: 
 241: ioset(TYIOINT, XERR, ICON(IOSTP!=NULL || ioerrlab!=0) );
 242: endbit = IOSTP!=NULL || ioendlab!=0;    /* for use in startrw() */
 243: 
 244: switch(iostmt)
 245:     {
 246:     case IOOPEN:
 247:         dofopen();  break;
 248: 
 249:     case IOCLOSE:
 250:         dofclose();  break;
 251: 
 252:     case IOINQUIRE:
 253:         dofinquire();  break;
 254: 
 255:     case IOBACKSPACE:
 256:         dofmove("f_back"); break;
 257: 
 258:     case IOREWIND:
 259:         dofmove("f_rew");  break;
 260: 
 261:     case IOENDFILE:
 262:         dofmove("f_end");  break;
 263: 
 264:     case IOREAD:
 265:     case IOWRITE:
 266:         startrw();  break;
 267: 
 268:     default:
 269:         fatal1("impossible iostmt %d", iostmt);
 270:     }
 271: for(i = 1 ; i<=NIOS ; ++i)
 272:     if(i!=IOSIOSTAT || (iostmt!=IOREAD && iostmt!=IOWRITE) )
 273:         frexpr(V(i));
 274: }
 275: 
 276: 
 277: 
 278: iocname()
 279: {
 280: register int i;
 281: int found, mask;
 282: 
 283: found = 0;
 284: mask = M(iostmt);
 285: for(i = 1 ; i <= NIOS ; ++i)
 286:     if(toklen==strlen(ioc[i].iocname) && eqn(toklen, token, ioc[i].iocname))
 287:         if(ioc[i].iotype & mask)
 288:             return(i);
 289:         else    found = i;
 290: if(found)
 291:     err1("invalid control %s for statement", ioc[found].iocname);
 292: else
 293:     err1("unknown iocontrol %s", varstr(toklen, token) );
 294: return(IOSBAD);
 295: }
 296: 
 297: 
 298: ioclause(n, p)
 299: register int n;
 300: register expptr p;
 301: {
 302: struct ioclist *iocp;
 303: 
 304: ++nioctl;
 305: if(n == IOSBAD)
 306:     return;
 307: if(n == IOSPOSITIONAL)
 308:     {
 309:     if(nioctl > IOSFMT)
 310:         {
 311:         err("illegal positional iocontrol");
 312:         return;
 313:         }
 314:     n = nioctl;
 315:     }
 316: 
 317: if(p == NULL)
 318:     {
 319:     if(n == IOSUNIT)
 320:         p = (iostmt==IOREAD ? IOSTDIN : IOSTDOUT);
 321:     else if(n != IOSFMT)
 322:         {
 323:         err("illegal * iocontrol");
 324:         return;
 325:         }
 326:     }
 327: if(n == IOSFMT)
 328:     ioformatted = (p==NULL ? LISTDIRECTED : FORMATTED);
 329: 
 330: iocp = & ioc[n];
 331: if(iocp->iocval == NULL)
 332:     {
 333:     if(n!=IOSFMT && ( n!=IOSUNIT || (p!=NULL && p->vtype!=TYCHAR) ) )
 334:         p = fixtype(p);
 335:     iocp->iocval = p;
 336: }
 337: else
 338:     err1("iocontrol %s repeated", iocp->iocname);
 339: }
 340: 
 341: /* io list item */
 342: 
 343: doio(list)
 344: chainp list;
 345: {
 346: struct exprblock *call0();
 347: doiolist(list);
 348: ioroutine[0] = 'e';
 349: putiocall( call0(TYINT, ioroutine) );
 350: frexpr(IOSTP);
 351: }
 352: 
 353: 
 354: 
 355: 
 356: 
 357: LOCAL doiolist(p0)
 358: chainp p0;
 359: {
 360: chainp p;
 361: register tagptr q;
 362: register expptr qe;
 363: register struct nameblock *qn;
 364: struct addrblock *tp, *mkscalar();
 365: int range;
 366: 
 367: for (p = p0 ; p ; p = p->nextp)
 368:     {
 369:     q = p->datap;
 370:     if(q->tag == TIMPLDO)
 371:         {
 372:         exdo(range=newlabel(), q->varnp);
 373:         doiolist(q->datalist);
 374:         enddo(range);
 375:         free(q);
 376:         }
 377:     else    {
 378:         if(q->tag==TPRIM && q->argsp==NULL && q->namep->vdim!=NULL)
 379:             {
 380:             vardcl(qn = q->namep);
 381:             if(qn->vdim->nelt)
 382:                 putio( fixtype(cpexpr(qn->vdim->nelt)),
 383:                     mkscalar(qn) );
 384:             else
 385:                 err("attempt to i/o array of unknown size");
 386:             }
 387:         else if(q->tag==TPRIM && q->argsp==NULL && (qe = memversion(q->namep)) )
 388:             putio(ICON(1),qe);
 389:         else if( (qe = fixtype(cpexpr(q)))->tag==TADDR)
 390:             putio(ICON(1), qe);
 391:         else if(qe->vtype != TYERROR)
 392:             {
 393:             if(iostmt == IOWRITE)
 394:                 {
 395:                 tp = mktemp(qe->vtype, qe->vleng);
 396:                 puteq( cpexpr(tp), qe);
 397:                 putio(ICON(1), tp);
 398:                 }
 399:             else
 400:                 err("non-left side in READ list");
 401:             }
 402:         frexpr(q);
 403:         }
 404:     }
 405: frchain( &p0 );
 406: }
 407: 
 408: 
 409: 
 410: 
 411: 
 412: LOCAL putio(nelt, addr)
 413: expptr nelt;
 414: register expptr addr;
 415: {
 416: int type;
 417: register struct exprblock *q;
 418: struct exprblock *call2(), *call3();
 419: 
 420: type = addr->vtype;
 421: if(ioformatted!=LISTDIRECTED && ISCOMPLEX(type) )
 422:     {
 423:     nelt = mkexpr(OPSTAR, ICON(2), nelt);
 424:     type -= (TYCOMPLEX-TYREAL);
 425:     }
 426: 
 427: /* pass a length with every item.  for noncharacter data, fake one */
 428: if(type != TYCHAR)
 429:     {
 430:     if( ISCONST(addr) )
 431:         addr = putconst(addr);
 432:     addr->vtype = TYCHAR;
 433:     addr->vleng = ICON( typesize[type] );
 434:     }
 435: 
 436: nelt = fixtype( mkconv(TYLENG,nelt) );
 437: if(ioformatted == LISTDIRECTTED)
 438:     q = call3(TYINT, "do_lio", mkconv(TYLONG, ICON(type)), nelt, addr);
 439: else
 440:     q = call2(TYINT, (ioformatted==FORMATTED ? "do_fio" : "do_uio"),
 441:         nelt, addr);
 442: putiocall(q);
 443: }
 444: 
 445: 
 446: 
 447: 
 448: endio()
 449: {
 450: if(skiplab)
 451:     {
 452:     putlabel(skiplab);
 453:     if(ioendlab)
 454:         putif( mkexpr(OPGE, cpexpr(IOSTP), ICON(0)), ioendlab);
 455:     if(ioerrlab)
 456:         putif( mkexpr( ( (iostmt==IOREAD||iostmt==IOWRITE) ? OPLE : OPEQ),
 457:             cpexpr(IOSTP), ICON(0)) , ioerrlab);
 458:     }
 459: if(IOSTP)
 460:     frexpr(IOSTP);
 461: }
 462: 
 463: 
 464: 
 465: LOCAL putiocall(q)
 466: register struct exprblock *q;
 467: {
 468: if(IOSTP)
 469:     {
 470:     q->vtype = TYINT;
 471:     q = fixexpr( mkexpr(OPASSIGN, cpexpr(IOSTP), q));
 472:     }
 473: 
 474: if(jumplab)
 475:     putif( mkexpr(OPEQ, q, ICON(0) ), jumplab);
 476: else
 477:     putexpr(q);
 478: }
 479: 
 480: 
 481: startrw()
 482: {
 483: register expptr p;
 484: register struct nameblock *np;
 485: register struct addrblock *unitp, *nump;
 486: struct constblock *mkaddcon();
 487: int k, fmtoff;
 488: int intfile, sequential;
 489: 
 490: 
 491: sequential = YES;
 492: if(p = V(IOSREC))
 493:     if( ISINT(p->vtype) )
 494:         {
 495:         ioset(TYIOINT, XREC, cpexpr(p) );
 496:         sequential = NO;
 497:         }
 498:     else
 499:         err("bad REC= clause");
 500: 
 501: intfile = NO;
 502: if(p = V(IOSUNIT))
 503:     {
 504:     if( ISINT(p->vtype) )
 505:         ioset(TYIOINT, XUNIT, cpexpr(p) );
 506:     else if(p->vtype == TYCHAR)
 507:         {
 508:         intfile = YES;
 509:         if(p->tag==TPRIM && p->argsp==NULL && (np = p->namep)->vdim!=NULL)
 510:             {
 511:             vardcl(np);
 512:             if(np->vdim->nelt)
 513:                 nump = cpexpr(np->vdim->nelt);
 514:             else
 515:                 {
 516:                 err("attempt to use internal unit array of unknown size");
 517:                 nump = ICON(1);
 518:                 }
 519:             unitp = mkscalar(np);
 520:             }
 521:         else    {
 522:             nump = ICON(1);
 523:             unitp = fixtype(cpexpr(p));
 524:             }
 525:         ioset(TYIOINT, XRNUM, nump);
 526:         ioset(TYIOINT, XRLEN, cpexpr(unitp->vleng) );
 527:         ioset(TYADDR, XUNIT, addrof(unitp) );
 528:         }
 529:     }
 530: else
 531:     err("bad unit specifier");
 532: 
 533: if(iostmt == IOREAD)
 534:     ioset(TYIOINT, (intfile ? XIEND : XEND), ICON(endbit) );
 535: 
 536: fmtoff = (intfile ? XIFMT : XFMT);
 537: 
 538: if(p = V(IOSFMT))
 539:     {
 540:     if(p->tag==TPRIM && p->argsp==NULL)
 541:         {
 542:         vardcl(np = p->namep);
 543:         if(np->vdim)
 544:             {
 545:             ioset(TYADDR, fmtoff, addrof(mkscalar(np)) );
 546:             goto endfmt;
 547:             }
 548:         if( ISINT(np->vtype) )
 549:             {
 550:             ioset(TYADDR, fmtoff, p);
 551:             goto endfmt;
 552:             }
 553:         }
 554:     p = V(IOSFMT) = fixtype(p);
 555:     if(p->vtype == TYCHAR)
 556:         ioset(TYADDR, fmtoff, addrof(cpexpr(p)) );
 557:     else if( ISICON(p) )
 558:         {
 559:         if( (k = fmtstmt( mklabel(p->const.ci) )) > 0 )
 560:             ioset(TYADDR, fmtoff, mkaddcon(k) );
 561:         else
 562:             ioformatted = UNFORMATTED;
 563:         }
 564:     else    {
 565:         err("bad format descriptor");
 566:         ioformatted = UNFORMATTED;
 567:         }
 568:     }
 569: else
 570:     ioset(TYADDR, fmtoff, ICON(0) );
 571: 
 572: endfmt:
 573: 
 574: 
 575: ioroutine[0] = 's';
 576: ioroutine[1] = '_';
 577: ioroutine[2] = (iostmt==IOREAD ? 'r' : 'w');
 578: ioroutine[3] = (sequential ? 's' : 'd');
 579: ioroutine[4] = "ufl" [ioformatted];
 580: ioroutine[5] = (intfile ? 'i' : 'e');
 581: ioroutine[6] = '\0';
 582: putiocall( call1(TYINT, ioroutine, cpexpr(ioblkp) ));
 583: }
 584: 
 585: 
 586: 
 587: LOCAL dofopen()
 588: {
 589: register expptr p;
 590: 
 591: if( (p = V(IOSUNIT)) && ISINT(p->vtype) )
 592:     ioset(TYIOINT, XUNIT, cpexpr(p) );
 593: else
 594:     err("bad unit in open");
 595: if( (p = V(IOSFILE)) && p->vtype==TYCHAR)
 596:     {
 597:     ioset(TYIOINT, XFNAMELEN, cpexpr(p->vleng) );
 598:     iosetc(XFNAME, p);
 599:     }
 600: else
 601:     err("bad file in open");
 602: 
 603: if(p = V(IOSRECL))
 604:     if( ISINT(p->vtype) )
 605:         ioset(TYIOINT, XRECLEN, cpexpr(p) );
 606:     else
 607:         err("bad recl");
 608: else
 609:     ioset(TYIOINT, XRECLEN, ICON(0) );
 610: 
 611: iosetc(XSTATUS, V(IOSSTATUS));
 612: iosetc(XACCESS, V(IOSACCESS));
 613: iosetc(XFORMATTED, V(IOSFORM));
 614: iosetc(XBLANK, V(IOSBLANK));
 615: 
 616: putiocall( call1(TYINT, "f_open", cpexpr(ioblkp) ));
 617: }
 618: 
 619: 
 620: LOCAL dofclose()
 621: {
 622: register expptr p;
 623: 
 624: if( (p = V(IOSUNIT)) && ISINT(p->vtype) )
 625:     {
 626:     ioset(TYIOINT, XUNIT, cpexpr(p) );
 627:     iosetc(XCLSTATUS, V(IOSSTATUS));
 628:     putiocall( call1(TYINT, "f_clos", cpexpr(ioblkp)) );
 629:     }
 630: else
 631:     err("bad unit in close statement");
 632: }
 633: 
 634: 
 635: LOCAL dofinquire()
 636: {
 637: register expptr p;
 638: if(p = V(IOSUNIT))
 639:     {
 640:     if( V(IOSFILE) )
 641:         err("inquire by unit or by file, not both");
 642:     ioset(TYIOINT, XUNIT, cpexpr(p) );
 643:     }
 644: else if( ! V(IOSFILE) )
 645:     err("must inquire by unit or by file");
 646: iosetlc(IOSFILE, XFILE, XFILELEN);
 647: iosetip(IOSEXISTS, XEXISTS);
 648: iosetip(IOSOPENED, XOPEN);
 649: iosetip(IOSNUMBER, XNUMBER);
 650: iosetip(IOSNAMED, XNAMED);
 651: iosetlc(IOSNAME, XNAME, XNAMELEN);
 652: iosetlc(IOSACCESS, XQACCESS, XQACCLEN);
 653: iosetlc(IOSSEQUENTIAL, XSEQ, XSEQLEN);
 654: iosetlc(IOSDIRECT, XDIRECT, XDIRLEN);
 655: iosetlc(IOSFORM, XFORM, XFORMLEN);
 656: iosetlc(IOSFORMATTED, XFMTED, XFMTEDLEN);
 657: iosetlc(IOSUNFORMATTED, XUNFMT, XUNFMTLEN);
 658: iosetip(IOSRECL, XQRECL);
 659: iosetip(IOSNEXTREC, XNEXTREC);
 660: 
 661: putiocall( call1(TYINT,  "f_inqu", cpexpr(ioblkp) ));
 662: }
 663: 
 664: 
 665: 
 666: LOCAL dofmove(subname)
 667: char *subname;
 668: {
 669: register expptr p;
 670: 
 671: if( (p = V(IOSUNIT)) && ISINT(p->vtype) )
 672:     {
 673:     ioset(TYIOINT, XUNIT, cpexpr(p) );
 674:     putiocall( call1(TYINT, subname, cpexpr(ioblkp) ));
 675:     }
 676: else
 677:     err("bad unit in move statement");
 678: }
 679: 
 680: 
 681: 
 682: LOCAL ioset(type, offset, p)
 683: int type, offset;
 684: expptr p;
 685: {
 686: register struct addrblock *q;
 687: 
 688: q = cpexpr(ioblkp);
 689: q->vtype = type;
 690: q->memoffset = fixtype( mkexpr(OPPLUS, q->memoffset, ICON(offset)) );
 691: puteq(q, p);
 692: }
 693: 
 694: 
 695: 
 696: 
 697: LOCAL iosetc(offset, p)
 698: int offset;
 699: register expptr p;
 700: {
 701: if(p == NULL)
 702:     ioset(TYADDR, offset, ICON(0) );
 703: else if(p->vtype == TYCHAR)
 704:     ioset(TYADDR, offset, addrof(cpexpr(p) ));
 705: else
 706:     err("non-character control clause");
 707: }
 708: 
 709: 
 710: 
 711: LOCAL iosetip(i, offset)
 712: int i, offset;
 713: {
 714: register expptr p;
 715: 
 716: if(p = V(i))
 717:     if(p->tag==TADDR && ONEOF(p->vtype, M(TYLONG)|M(TYLOGICAL)) )
 718:         ioset(TYADDR, offset, addrof(cpexpr(p)) );
 719:     else
 720:         err1("impossible inquire parameter %s", ioc[i].iocname);
 721: else
 722:     ioset(TYADDR, offset, ICON(0) );
 723: }
 724: 
 725: 
 726: 
 727: LOCAL iosetlc(i, offp, offl)
 728: int i, offp, offl;
 729: {
 730: register expptr p;
 731: if( (p = V(i)) && p->vtype==TYCHAR)
 732:     ioset(TYIOINT, offl, cpexpr(p->vleng) );
 733: iosetc(offp, p);
 734: }

Defined functions

dofclose defined in line 620; used 1 times
dofinquire defined in line 635; used 1 times
dofmove defined in line 666; used 3 times
dofopen defined in line 587; used 1 times
doio defined in line 343; never used
doiolist defined in line 357; used 2 times
endio defined in line 448; never used
endioctl defined in line 189; never used
fmtstmt defined in line 137; used 1 times
ioclause defined in line 298; never used
iocname defined in line 278; used 6 times
ioset defined in line 682; used 24 times
iosetc defined in line 697; used 7 times
iosetip defined in line 711; used 6 times
iosetlc defined in line 727; used 8 times
putio defined in line 412; used 4 times
putiocall defined in line 465; used 7 times
setfmt defined in line 160; never used
startioctl defined in line 175; never used
startrw defined in line 481; used 1 times

Defined variables

endbit defined in line 12; used 2 times
ioc defined in line 30; used 8 times
ioendlab defined in line 10; used 10 times
ioerrlab defined in line 11; used 12 times
ioformatted defined in line 15; used 8 times
ioroutine defined in line 8; used 10 times
jumplab defined in line 13; used 7 times
skiplab defined in line 14; used 4 times

Defined struct's

ioclist defined in line 25; used 2 times
  • in line 302(2)

Defined macros

FORMATTED defined in line 18; used 2 times
IOALL defined in line 23; used 3 times
IOSACCESS defined in line 69; used 2 times
IOSBLANK defined in line 71; used 1 times
IOSDIRECT defined in line 78; used 1 times
IOSEND defined in line 63; used 1 times
IOSERR defined in line 62; used 1 times
IOSEXIST defined in line 72; never used
IOSFILE defined in line 67; used 4 times
IOSFMT defined in line 61; used 6 times
IOSFORM defined in line 70; used 2 times
IOSFORMATTED defined in line 79; used 1 times
IOSIOSTAT defined in line 64; used 2 times
IOSNAME defined in line 76; used 1 times
IOSNAMED defined in line 75; used 1 times
IOSNEXTREC defined in line 81; used 1 times
IOSNUMBER defined in line 74; used 1 times
IOSOPENEDED defined in line 73; never used
IOSREC defined in line 65; used 1 times
IOSRECL defined in line 66; used 2 times
IOSSEQUENTIAL defined in line 77; used 1 times
IOSSTATUS defined in line 68; used 2 times
IOSTP defined in line 83; used 17 times
IOSUNFORMATTED defined in line 80; used 1 times
IOSUNIT defined in line 60; used 7 times
LISTDIRECTED defined in line 19; used 2 times
MAXIO defined in line 58; used 1 times
NIOS defined in line 57; used 3 times
SZFLAG defined in line 88; used 42 times
SZIOINT defined in line 3; used 40 times
TYIOINT defined in line 2; used 15 times
UNFORMATTED defined in line 17; used 3 times
V defined in line 21; used 24 times
XACCESS defined in line 105; used 1 times
XBLANK defined in line 108; used 1 times
XCLSTATUS defined in line 110; used 1 times
XDIRECT defined in line 124; used 1 times
XDIRLEN defined in line 125; used 1 times
XEND defined in line 92; used 1 times
XERR defined in line 90; used 1 times
XEXISTS defined in line 114; used 1 times
XFILE defined in line 112; used 1 times
XFILELEN defined in line 113; used 1 times
XFMT defined in line 93; used 1 times
XFMTED defined in line 128; used 1 times
XFMTEDLEN defined in line 129; used 1 times
XFNAME defined in line 102; used 1 times
XFNAMELEN defined in line 103; used 1 times
XFORM defined in line 126; used 1 times
XFORMATTED defined in line 106; used 1 times
XFORMLEN defined in line 127; used 1 times
XIEND defined in line 99; used 1 times
XIFMT defined in line 98; used 1 times
XIUNIT defined in line 100; never used
XNAME defined in line 118; used 1 times
XNAMED defined in line 117; used 1 times
XNAMELEN defined in line 119; used 1 times
XNEXTREC defined in line 133; used 1 times
XNUMBER defined in line 116; used 1 times
XOPEN defined in line 115; used 1 times
XQACCESS defined in line 120; used 1 times
XQACCLEN defined in line 121; used 1 times
XQBLANK defined in line 134; never used
XQBLANKLEN defined in line 135; never used
XQRECL defined in line 132; used 1 times
XREC defined in line 94; used 1 times
XRECLEN defined in line 107; used 2 times
XRLEN defined in line 95; used 1 times
XRNUM defined in line 96; used 1 times
XSEQ defined in line 122; used 1 times
XSEQLEN defined in line 123; used 1 times
XSTATUS defined in line 104; used 1 times
XUNFMT defined in line 130; used 1 times
XUNFMTLEN defined in line 131; used 1 times
XUNIT defined in line 91; used 6 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2155
Valid CSS Valid XHTML 1.0 Strict