Doxygen Source Code Documentation
pread.c File Reference
#include "defs.h"Go to the source code of this file.
Defines | |
| #define | P_space 1 |
| #define | P_anum 2 |
| #define | P_delim 3 |
| #define | P_slash 4 |
| #define | TGULP 100 |
| #define | checklogical(n) |
Functions | |
| void | trealloc (Void) |
| void | badchar (int c) |
| void | bad_type (Void) |
| void | badflag (char *tname, char *option) |
| void | detected (char *msg) |
| void | checkreal (int k) |
| void | Pnotboth (Extsym *e) |
| int | numread (register FILE *pf, int *n) |
| void argverify | Argdcl ((int, Extsym *)) |
| void Pbadret | Argdcl ((int ftype, Extsym *p)) |
| int | readref (register FILE *pf, Extsym *e, int ftype) |
| int | comlen (register FILE *pf) |
| int | Ptoken (FILE *pf, int canend) |
| int | Pftype (Void) |
| void | wanted (int i, char *what) |
| int | Ptype (FILE *pf) |
| char * | trimunder (Void) |
| void | Pbadmsg (char *msg, Extsym *p) |
| void | Pbadret (int ftype, Extsym *p) |
| void | argverify (int ftype, Extsym *p) |
| void | newarg (int ftype, Extsym *p) |
| int | Pfile (char *fname) |
| void | read_Pfiles (char **ffiles) |
Variables | |
| char | Ptok [128] |
| char | Pct [Table_size] |
| char * | Pfname |
| long | Plineno |
| int | Pbad |
| int * | tfirst |
| int * | tlast |
| int * | tnext |
| int | tmax |
Define Documentation
|
|
|
|
|
Definition at line 33 of file pread.c. Referenced by comlen(), Pfile(), Ptoken(), Ptype(), and wanted(). |
|
|
|
|
|
|
|
|
|
|
|
Definition at line 37 of file pread.c. Referenced by trealloc(). |
Function Documentation
|
|
|
|
|
|
|
||||||||||||
|
Definition at line 755 of file pread.c. References Extsym::arginfo, Argtype(), Argtypes::atypes, Argtypes::changes, Extsym::extype, i, Argtypes::nargs, Pbadmsg(), Pbadret(), tfirst, tnext, Atype::type, and type_fixup(). Referenced by Pfile(), and readref().
00757 {
00758 Argtypes *at;
00759 register Atype *aty;
00760 int i, j, k;
00761 register int *t, *te;
00762 char buf1[32], buf2[32];
00763
00764 at = p->arginfo;
00765 if (at->nargs < 0)
00766 return;
00767 if (p->extype != ftype) {
00768 Pbadret(ftype, p);
00769 return;
00770 }
00771 t = tfirst;
00772 te = tnext;
00773 i = te - t;
00774 if (at->nargs != i) {
00775 j = at->nargs;
00776 Pbadmsg("differing numbers of arguments",p);
00777 fprintf(stderr, "here %d, previously %d\n",
00778 i, j);
00779 return;
00780 }
00781 for(aty = at->atypes; t < te; t++, aty++) {
00782 if (*t == aty->type)
00783 continue;
00784 j = aty->type;
00785 k = *t;
00786 if (k >= 300 || k == j)
00787 continue;
00788 if (j >= 300) {
00789 if (k >= 200) {
00790 if (k == TYUNKNOWN + 200)
00791 continue;
00792 if (j % 100 != k - 200
00793 && k != TYSUBR + 200
00794 && j != TYUNKNOWN + 300
00795 && !type_fixup(at,aty,k))
00796 goto badtypes;
00797 }
00798 else if (j % 100 % TYSUBR != k % TYSUBR
00799 && !type_fixup(at,aty,k))
00800 goto badtypes;
00801 }
00802 else if (k < 200 || j < 200)
00803 goto badtypes;
00804 else if (k == TYUNKNOWN+200)
00805 continue;
00806 else if (j != TYUNKNOWN+200)
00807 {
00808 badtypes:
00809 Pbadmsg("differing calling sequences",p);
00810 i = t - tfirst + 1;
00811 fprintf(stderr,
00812 "arg %d: here %s, prevously %s\n",
00813 i, Argtype(k,buf1), Argtype(j,buf2));
00814 return;
00815 }
00816 /* We've subsequently learned the right type,
00817 as in the call on zoo below...
00818
00819 subroutine foo(x, zap)
00820 external zap
00821 call goo(zap)
00822 x = zap(3)
00823 call zoo(zap)
00824 end
00825 */
00826 aty->type = k;
00827 at->changes = 1;
00828 }
00829 }
|
|
|
Definition at line 69 of file pread.c. References Pfname, Plineno, and Ptok. Referenced by Pftype(), and Ptype().
|
|
|
Definition at line 59 of file pread.c. References c, Pfname, and Plineno. Referenced by Pfile(), Ptoken(), and Ptype().
|
|
||||||||||||
|
Definition at line 83 of file pread.c. References Pbad, Pfname, and Plineno. Referenced by checkreal().
|
|
|
Definition at line 151 of file pread.c. References badflag(), and detected(). Referenced by Pftype().
00153 {
00154 static int warned = 0;
00155 static int seen[2] = {0,0};
00156
00157 seen[k] = 1;
00158 if (seen[1-k]) {
00159 if (warned < 2)
00160 detected("Illegal mixture of -R and -!R ");
00161 warned = 2;
00162 return;
00163 }
00164 if (k == forcedouble || warned)
00165 return;
00166 warned = 1;
00167 badflag("REAL return", k ? "!R" : "R");
00168 }
|
|
|
Definition at line 297 of file pread.c. References c, cbuf, Extsym::extstg, L, Extsym::maxleng, mkext1(), P_anum, Pct, Pfname, Plineno, Pnotboth(), readref(), STGCOMMON, STGUNKNOWN, and ungetc(). Referenced by Ptoken().
00299 {
00300 register int c;
00301 register char *s, *se;
00302 char buf[128], cbuf[128];
00303 int refread;
00304 long L;
00305 Extsym *e;
00306
00307 if ((c = getc(pf)) == EOF)
00308 return 1;
00309 if (c == ' ') {
00310 refread = 0;
00311 s = "comlen ";
00312 }
00313 else if (c == ':') {
00314 refread = 1;
00315 s = "ref: ";
00316 }
00317 else {
00318 ret0:
00319 if (c == '*')
00320 ungetc(c,pf);
00321 return 0;
00322 }
00323 while(*s) {
00324 if ((c = getc(pf)) == EOF)
00325 return 1;
00326 if (c != *s++)
00327 goto ret0;
00328 }
00329 s = buf;
00330 se = buf + sizeof(buf) - 1;
00331 for(;;) {
00332 if ((c = getc(pf)) == EOF)
00333 return 1;
00334 if (c == ' ')
00335 break;
00336 if (s >= se || Pct[c] != P_anum)
00337 goto ret0;
00338 *s++ = c;
00339 }
00340 *s-- = 0;
00341 if (s <= buf || *s != '_')
00342 return 0;
00343 strcpy(cbuf,buf);
00344 *s-- = 0;
00345 if (*s == '_') {
00346 *s-- = 0;
00347 if (s <= buf)
00348 return 0;
00349 }
00350 for(L = 0;;) {
00351 if ((c = getc(pf)) == EOF)
00352 return 1;
00353 if (c == ' ')
00354 break;
00355 if (c < '0' && c > '9')
00356 goto ret0;
00357 L = 10*L + c - '0';
00358 }
00359 if (!L && !refread)
00360 return 0;
00361 e = mkext1(buf, cbuf);
00362 if (refread)
00363 return readref(pf, e, (int)L);
00364 if (e->extstg == STGUNKNOWN) {
00365 e->extstg = STGCOMMON;
00366 e->maxleng = L;
00367 }
00368 else if (e->extstg != STGCOMMON)
00369 Pnotboth(e);
00370 else if (e->maxleng != L) {
00371 fprintf(stderr,
00372 "incompatible lengths for common block %s (line %ld of %s)\n",
00373 buf, Plineno, Pfname);
00374 if (e->maxleng < L)
00375 e->maxleng = L;
00376 }
00377 return 0;
00378 }
|
|
|
Definition at line 96 of file pread.c. References Pbad, Pfname, and Plineno. Referenced by checkreal().
|
|
||||||||||||
|
Definition at line 837 of file pread.c. References Extsym::arginfo, Argtypes::atypes, Argtypes::changes, Atype::cp, Argtypes::defined, Argtypes::dnargs, Extsym::exproto, Extsym::extstg, Extsym::extype, gmem(), i, Argtypes::nargs, Pnotboth(), STGCOMMON, STGEXT, tfirst, tnext, and Atype::type. Referenced by Pfile().
00839 {
00840 Argtypes *at;
00841 register Atype *aty;
00842 register int *t, *te;
00843 int i, k;
00844
00845 if (p->extstg == STGCOMMON) {
00846 Pnotboth(p);
00847 return;
00848 }
00849 p->extstg = STGEXT;
00850 p->extype = ftype;
00851 p->exproto = 1;
00852 t = tfirst;
00853 te = tnext;
00854 i = te - t;
00855 k = sizeof(Argtypes) + (i-1)*sizeof(Atype);
00856 at = p->arginfo = (Argtypes *)gmem(k,1);
00857 at->dnargs = at->nargs = i;
00858 at->defined = at->changes = 0;
00859 for(aty = at->atypes; t < te; aty++) {
00860 aty->type = *t++;
00861 aty->cp = 0;
00862 }
00863 }
|
|
||||||||||||
|
Definition at line 193 of file pread.c. References c. Referenced by readref().
00195 {
00196 register int c, k;
00197
00198 if ((c = getc(pf)) < '0' || c > '9')
00199 return c;
00200 k = c - '0';
00201 for(;;) {
00202 if ((c = getc(pf)) == ' ') {
00203 *n = k;
00204 return c;
00205 }
00206 if (c < '0' || c > '9')
00207 break;
00208 k = 10*k + c - '0';
00209 }
00210 return c;
00211 }
|
|
||||||||||||
|
Definition at line 723 of file pread.c. References Extsym::arginfo, Extsym::fextname, Argtypes::nargs, Pbad, Pfname, and Plineno. Referenced by argverify(), and Pbadret().
|
|
||||||||||||
|
Definition at line 738 of file pread.c. References Argtype(), Extsym::extype, and Pbadmsg(). Referenced by argverify(), and readref().
|
|
|
Definition at line 870 of file pread.c. References Extsym::arginfo, argverify(), badchar(), Argtypes::defined, i, mkext1(), Argtypes::nargs, newarg(), P_anum, P_delim, P_slash, P_space, Pct, Pfname, Pftype(), Plineno, Ptok, Ptoken(), Ptype(), tfirst, tlast, tnext, trealloc(), trimunder(), and wanted(). Referenced by read_Pfiles().
00872 {
00873 char *s;
00874 int ftype, i;
00875 FILE *pf;
00876 Extsym *p;
00877
00878 for(s = fname; *s; s++);
00879 if (s - fname < 2
00880 || s[-2] != '.'
00881 || (s[-1] != 'P' && s[-1] != 'p'))
00882 return 0;
00883
00884 if (!(pf = fopen(fname, textread))) {
00885 fprintf(stderr, "can't open %s\n", fname);
00886 exit(2);
00887 }
00888 Pfname = fname;
00889 Plineno = 1;
00890 if (!Pct[' ']) {
00891 for(s = " \t\n\r\v\f"; *s; s++)
00892 Pct[*s] = P_space;
00893 for(s = "*,();"; *s; s++)
00894 Pct[*s] = P_delim;
00895 for(i = '0'; i <= '9'; i++)
00896 Pct[i] = P_anum;
00897 for(s = "abcdefghijklmnopqrstuvwxyz"; i = *s; s++)
00898 Pct[i] = Pct[i+'A'-'a'] = P_anum;
00899 Pct['_'] = P_anum;
00900 Pct['/'] = P_slash;
00901 }
00902
00903 for(;;) {
00904 if (!(i = Ptoken(pf,1)))
00905 break;
00906 if (i != P_anum
00907 || !strcmp(Ptok, "extern") && (i = Ptoken(pf,0)) != P_anum)
00908 badchar(i);
00909 ftype = Pftype();
00910 getname:
00911 if ((i = Ptoken(pf,0)) != P_anum)
00912 badchar(i);
00913 p = mkext1(trimunder(), Ptok);
00914
00915 if ((i = Ptoken(pf,0)) != '(')
00916 badchar(i);
00917 tnext = tfirst;
00918 while(i = Ptype(pf)) {
00919 if (tnext >= tlast)
00920 trealloc();
00921 *tnext++ = i;
00922 }
00923 if (p->arginfo) {
00924 argverify(ftype, p);
00925 if (p->arginfo->nargs < 0)
00926 newarg(ftype, p);
00927 }
00928 else
00929 newarg(ftype, p);
00930 p->arginfo->defined = 1;
00931 i = Ptoken(pf,0);
00932 switch(i) {
00933 case ';':
00934 break;
00935 case ',':
00936 goto getname;
00937 default:
00938 wanted(i, "\";\" or \",\"");
00939 }
00940 }
00941 fclose(pf);
00942 return 1;
00943 }
|
|
|
Definition at line 463 of file pread.c. References bad_type(), checklogical, checkreal(), Ptok, and TYQUAD. Referenced by Pfile().
00464 {
00465 switch(Ptok[0]) {
00466 case 'C':
00467 if (!strcmp(Ptok+1, "_f"))
00468 return TYCOMPLEX;
00469 break;
00470 case 'E':
00471 if (!strcmp(Ptok+1, "_f")) {
00472 /* TYREAL under forcedouble */
00473 checkreal(1);
00474 return TYREAL;
00475 }
00476 break;
00477 case 'H':
00478 if (!strcmp(Ptok+1, "_f"))
00479 return TYCHAR;
00480 break;
00481 case 'Z':
00482 if (!strcmp(Ptok+1, "_f"))
00483 return TYDCOMPLEX;
00484 break;
00485 case 'd':
00486 if (!strcmp(Ptok+1, "oublereal"))
00487 return TYDREAL;
00488 break;
00489 case 'i':
00490 if (!strcmp(Ptok+1, "nt"))
00491 return TYSUBR;
00492 if (!strcmp(Ptok+1, "nteger"))
00493 return TYLONG;
00494 if (!strcmp(Ptok+1, "nteger1"))
00495 return TYINT1;
00496 break;
00497 case 'l':
00498 if (!strcmp(Ptok+1, "ogical")) {
00499 checklogical(1);
00500 return TYLOGICAL;
00501 }
00502 if (!strcmp(Ptok+1, "ogical1"))
00503 return TYLOGICAL1;
00504 #ifdef TYQUAD
00505 if (!strcmp(Ptok+1, "ongint"))
00506 return TYQUAD;
00507 #endif
00508 break;
00509 case 'r':
00510 if (!strcmp(Ptok+1, "eal")) {
00511 checkreal(0);
00512 return TYREAL;
00513 }
00514 break;
00515 case 's':
00516 if (!strcmp(Ptok+1, "hortint"))
00517 return TYSHORT;
00518 if (!strcmp(Ptok+1, "hortlogical")) {
00519 checklogical(0);
00520 return TYLOGICAL2;
00521 }
00522 break;
00523 }
00524 bad_type();
00525 /* NOT REACHED */
00526 return 0;
00527 }
|
|
|
Definition at line 175 of file pread.c. References Pbad, Pfname, and Plineno. Referenced by comlen(), newarg(), and readref().
|
|
||||||||||||
|
Definition at line 386 of file pread.c. References badchar(), c, comlen(), P_anum, P_delim, P_slash, P_space, Pct, Pfname, Plineno, Ptok, top, and ungetc(). Referenced by Pfile(), and Ptype().
00388 {
00389 register int c;
00390 register char *s, *se;
00391
00392 top:
00393 for(;;) {
00394 c = getc(pf);
00395 if (c == EOF) {
00396 if (canend)
00397 return 0;
00398 goto badeof;
00399 }
00400 if (Pct[c] != P_space)
00401 break;
00402 if (c == '\n')
00403 Plineno++;
00404 }
00405 switch(Pct[c]) {
00406 case P_anum:
00407 if (c == '_')
00408 badchar(c);
00409 s = Ptok;
00410 se = s + sizeof(Ptok) - 1;
00411 do {
00412 if (s < se)
00413 *s++ = c;
00414 if ((c = getc(pf)) == EOF) {
00415 badeof:
00416 fprintf(stderr,
00417 "unexpected end of file in %s\n",
00418 Pfname);
00419 exit(2);
00420 }
00421 }
00422 while(Pct[c] == P_anum);
00423 ungetc(c,pf);
00424 *s = 0;
00425 return P_anum;
00426
00427 case P_delim:
00428 return c;
00429
00430 case P_slash:
00431 if ((c = getc(pf)) != '*') {
00432 if (c == EOF)
00433 goto badeof;
00434 badchar('/');
00435 }
00436 if (canend && comlen(pf))
00437 goto badeof;
00438 for(;;) {
00439 while((c = getc(pf)) != '*') {
00440 if (c == EOF)
00441 goto badeof;
00442 if (c == '\n')
00443 Plineno++;
00444 }
00445 slashseek:
00446 switch(getc(pf)) {
00447 case '/':
00448 goto top;
00449 case EOF:
00450 goto badeof;
00451 case '*':
00452 goto slashseek;
00453 }
00454 }
00455 default:
00456 badchar(c);
00457 }
00458 /* NOT REACHED */
00459 return 0;
00460 }
|
|
|
Definition at line 552 of file pread.c. References bad_type(), badchar(), checklogical, i, P_anum, Ptok, Ptoken(), tfirst, tnext, TYFTNLEN, TYQUAD, ungetc(), and wanted(). Referenced by Pfile().
00554 {
00555 int i, rv;
00556
00557 i = Ptoken(pf,0);
00558 if (i == ')')
00559 return 0;
00560 if (i != P_anum)
00561 badchar(i);
00562
00563 rv = 0;
00564 switch(Ptok[0]) {
00565 case 'C':
00566 if (!strcmp(Ptok+1, "_fp"))
00567 rv = TYCOMPLEX+200;
00568 break;
00569 case 'D':
00570 if (!strcmp(Ptok+1, "_fp"))
00571 rv = TYDREAL+200;
00572 break;
00573 case 'E':
00574 case 'R':
00575 if (!strcmp(Ptok+1, "_fp"))
00576 rv = TYREAL+200;
00577 break;
00578 case 'H':
00579 if (!strcmp(Ptok+1, "_fp"))
00580 rv = TYCHAR+200;
00581 break;
00582 case 'I':
00583 if (!strcmp(Ptok+1, "_fp"))
00584 rv = TYLONG+200;
00585 else if (!strcmp(Ptok+1, "1_fp"))
00586 rv = TYINT1+200;
00587 #ifdef TYQUAD
00588 else if (!strcmp(Ptok+1, "8_fp"))
00589 rv = TYQUAD+200;
00590 #endif
00591 break;
00592 case 'J':
00593 if (!strcmp(Ptok+1, "_fp"))
00594 rv = TYSHORT+200;
00595 break;
00596 case 'K':
00597 checklogical(0);
00598 goto Logical;
00599 case 'L':
00600 checklogical(1);
00601 Logical:
00602 if (!strcmp(Ptok+1, "_fp"))
00603 rv = TYLOGICAL+200;
00604 else if (!strcmp(Ptok+1, "1_fp"))
00605 rv = TYLOGICAL1+200;
00606 else if (!strcmp(Ptok+1, "2_fp"))
00607 rv = TYLOGICAL2+200;
00608 break;
00609 case 'S':
00610 if (!strcmp(Ptok+1, "_fp"))
00611 rv = TYSUBR+200;
00612 break;
00613 case 'U':
00614 if (!strcmp(Ptok+1, "_fp"))
00615 rv = TYUNKNOWN+300;
00616 break;
00617 case 'Z':
00618 if (!strcmp(Ptok+1, "_fp"))
00619 rv = TYDCOMPLEX+200;
00620 break;
00621 case 'c':
00622 if (!strcmp(Ptok+1, "har"))
00623 rv = TYCHAR;
00624 else if (!strcmp(Ptok+1, "omplex"))
00625 rv = TYCOMPLEX;
00626 break;
00627 case 'd':
00628 if (!strcmp(Ptok+1, "oublereal"))
00629 rv = TYDREAL;
00630 else if (!strcmp(Ptok+1, "oublecomplex"))
00631 rv = TYDCOMPLEX;
00632 break;
00633 case 'f':
00634 if (!strcmp(Ptok+1, "tnlen"))
00635 rv = TYFTNLEN+100;
00636 break;
00637 case 'i':
00638 if (!strncmp(Ptok+1, "nteger", 6)) {
00639 if (!Ptok[7])
00640 rv = TYLONG;
00641 else if (Ptok[7] == '1' && !Ptok[8])
00642 rv = TYINT1;
00643 }
00644 break;
00645 case 'l':
00646 if (!strncmp(Ptok+1, "ogical", 6)) {
00647 if (!Ptok[7]) {
00648 checklogical(1);
00649 rv = TYLOGICAL;
00650 }
00651 else if (Ptok[7] == '1' && !Ptok[8])
00652 rv = TYLOGICAL1;
00653 }
00654 #ifdef TYQUAD
00655 else if (!strcmp(Ptok+1,"ongint"))
00656 rv = TYQUAD;
00657 #endif
00658 break;
00659 case 'r':
00660 if (!strcmp(Ptok+1, "eal"))
00661 rv = TYREAL;
00662 break;
00663 case 's':
00664 if (!strcmp(Ptok+1, "hortint"))
00665 rv = TYSHORT;
00666 else if (!strcmp(Ptok+1, "hortlogical")) {
00667 checklogical(0);
00668 rv = TYLOGICAL2;
00669 }
00670 break;
00671 case 'v':
00672 if (tnext == tfirst && !strcmp(Ptok+1, "oid")) {
00673 if ((i = Ptoken(pf,0)) != /*(*/ ')')
00674 wanted(i, /*(*/ "\")\"");
00675 return 0;
00676 }
00677 }
00678 if (!rv)
00679 bad_type();
00680 if (rv < 100 && (i = Ptoken(pf,0)) != '*')
00681 wanted(i, "\"*\"");
00682 if ((i = Ptoken(pf,0)) == P_anum)
00683 i = Ptoken(pf,0); /* skip variable name */
00684 switch(i) {
00685 case ')':
00686 ungetc(i,pf);
00687 break;
00688 case ',':
00689 break;
00690 default:
00691 wanted(i, "\",\" or \")\"");
00692 }
00693 return rv;
00694 }
|
|
|
Definition at line 950 of file pread.c. References Extsym::arginfo, Argtypes::changes, Extsym::extstg, free, Argtypes::nargs, Pfile(), retcode, STGEXT, tfirst, tlast, tmax, and tnext. Referenced by main().
00952 {
00953 char **f1files, **f1files0, *s;
00954 int k;
00955 register Extsym *e, *ee;
00956 register Argtypes *at;
00957 extern int retcode;
00958
00959 f1files0 = f1files = ffiles;
00960 while(s = *ffiles++)
00961 if (!Pfile(s))
00962 *f1files++ = s;
00963 if (Pbad)
00964 retcode = 8;
00965 if (tfirst) {
00966 free((char *)tfirst);
00967 /* following should be unnecessary, as we won't be back here */
00968 tfirst = tnext = tlast = 0;
00969 tmax = 0;
00970 }
00971 *f1files = 0;
00972 if (f1files == f1files0)
00973 f1files[1] = 0;
00974
00975 k = 0;
00976 ee = nextext;
00977 for (e = extsymtab; e < ee; e++)
00978 if (e->extstg == STGEXT
00979 && (at = e->arginfo)) {
00980 if (at->nargs < 0 || at->changes)
00981 k++;
00982 at->changes = 2;
00983 }
00984 if (k) {
00985 fprintf(diagfile,
00986 "%d prototype%s updated while reading prototypes.\n", k,
00987 k > 1 ? "s" : "");
00988 }
00989 fflush(diagfile);
00990 }
|
|
||||||||||||||||
|
Definition at line 223 of file pread.c. References a, Extsym::arginfo, argverify(), Argtypes::atypes, c, Argtypes::changes, Atype::cp, Argtypes::dnargs, Extsym::extstg, Extsym::extype, gmem(), i, Argtypes::nargs, numread(), Pbadret(), Pnotboth(), STGEXT, STGUNKNOWN, tfirst, tlast, tnext, trealloc(), TYFTNLEN, and Atype::type. Referenced by comlen().
00225 {
00226 register int c, *t;
00227 int i, nargs, type;
00228 Argtypes *at;
00229 Atype *a, *ae;
00230
00231 if (ftype > TYSUBR)
00232 return 0;
00233 if ((c = numread(pf, &nargs)) != ' ') {
00234 if (c != ':')
00235 return c == EOF;
00236 /* just a typed external */
00237 if (e->extstg == STGUNKNOWN) {
00238 at = 0;
00239 goto justsym;
00240 }
00241 if (e->extstg == STGEXT) {
00242 if (e->extype != ftype)
00243 Pbadret(ftype, e);
00244 }
00245 else
00246 Pnotboth(e);
00247 return 0;
00248 }
00249
00250 tnext = tfirst;
00251 for(i = 0; i < nargs; i++) {
00252 if ((c = numread(pf, &type)) != ' '
00253 || type >= 500
00254 || type != TYFTNLEN + 100 && type % 100 > TYSUBR)
00255 return c == EOF;
00256 if (tnext >= tlast)
00257 trealloc();
00258 *tnext++ = type;
00259 }
00260
00261 if (e->extstg == STGUNKNOWN) {
00262 save_at:
00263 at = (Argtypes *)
00264 gmem(sizeof(Argtypes) + (nargs-1)*sizeof(Atype), 1);
00265 at->dnargs = at->nargs = nargs;
00266 at->changes = 0;
00267 t = tfirst;
00268 a = at->atypes;
00269 for(ae = a + nargs; a < ae; a++) {
00270 a->type = *t++;
00271 a->cp = 0;
00272 }
00273 justsym:
00274 e->extstg = STGEXT;
00275 e->extype = ftype;
00276 e->arginfo = at;
00277 }
00278 else if (e->extstg != STGEXT) {
00279 Pnotboth(e);
00280 }
00281 else if (!e->arginfo) {
00282 if (e->extype != ftype)
00283 Pbadret(ftype, e);
00284 else
00285 goto save_at;
00286 }
00287 else
00288 argverify(ftype, e);
00289 return 0;
00290 }
|
|
|
Definition at line 40 of file pread.c. References realloc, tfirst, TGULP, tlast, tmax, and tnext. Referenced by Pfile(), and readref().
|
|
|
Definition at line 697 of file pread.c. References Pfname, Plineno, and Ptok. Referenced by Pfile().
00698 {
00699 register char *s;
00700 register int n;
00701 static char buf[128];
00702
00703 s = Ptok + strlen(Ptok) - 1;
00704 if (*s != '_') {
00705 fprintf(stderr,
00706 "warning: %s does not end in _ (line %ld of %s)\n",
00707 Ptok, Plineno, Pfname);
00708 return Ptok;
00709 }
00710 if (s[-1] == '_')
00711 s--;
00712 strncpy(buf, Ptok, n = s - Ptok);
00713 buf[n] = 0;
00714 return buf;
00715 }
|
|
||||||||||||
|
Definition at line 535 of file pread.c. References i, P_anum, Pfname, Plineno, and Ptok. Referenced by Pfile(), and Ptype().
|
Variable Documentation
|
|
Definition at line 29 of file pread.c. Referenced by badflag(), detected(), Pbadmsg(), and Pnotboth(). |
|
|
|
|
|
Definition at line 27 of file pread.c. Referenced by bad_type(), badchar(), badflag(), comlen(), detected(), Pbadmsg(), Pfile(), Pnotboth(), Ptoken(), trimunder(), and wanted(). |
|
|
Definition at line 28 of file pread.c. Referenced by bad_type(), badchar(), badflag(), comlen(), detected(), Pbadmsg(), Pfile(), Pnotboth(), Ptoken(), trimunder(), and wanted(). |
|
|
Definition at line 26 of file pread.c. Referenced by bad_type(), Pfile(), Pftype(), Ptoken(), Ptype(), trimunder(), and wanted(). |
|
|
Definition at line 30 of file pread.c. Referenced by argverify(), newarg(), Pfile(), Ptype(), read_Pfiles(), readref(), and trealloc(). |
|
|
Definition at line 30 of file pread.c. Referenced by Pfile(), read_Pfiles(), readref(), and trealloc(). |
|
|
Definition at line 30 of file pread.c. Referenced by read_Pfiles(), and trealloc(). |
|
|
Definition at line 30 of file pread.c. Referenced by argverify(), newarg(), Pfile(), Ptype(), read_Pfiles(), readref(), and trealloc(). |