- FILE *fp;
-
- if (M[ am+FSTAT ] != UNKNOWN) /* first close file if opened */
- if (fclose(MF(am+FFILE))) errsignal(RTEIOERR);
- switch ((int) M[ am+FTYPE ])
- {
- case TEXTF : /* open text file for reading */
- fp = fopen(MN(am+FNAME), "r");
- M[ am+FSTAT ] = READING;
- break;
-
- case CHARF : /* open binary file for reading */
- case INTF :
- case REALF :
- fp = fopen(MN(am+FNAME), BINARYREAD);
- M[ am+FSTAT ] = READING;
+ word t1;
+
+ /* generate file object */
+ request((word) APFILE, &t1, am);
+ virt->addr = t1;
+ virt->mark = M[t1 + 1];
+ M[*am + PROTNUM] = FILEOBJECT;
+ M[*am + FSTAT] = UNKNOWN;
+ M[*am + FTEMP] = lbool(ftemp);
+ M[*am + FTYPE] = ftyp;
+ MN(*am + FNAME) = fnam;
+}
+
+/* Prepare file for reading */
+void reset(word am)
+{
+ FILE *fp;
+
+ /* first close file if opened */
+ if (M[am + FSTAT] != UNKNOWN)
+ if (fclose(MF(am + FFILE)))
+ errsignal(RTEIOERR);
+
+ switch ((int) M[am + FTYPE]) {
+ /* open text file for reading */
+ case TEXTF:
+ fp = fopen(MN(am + FNAME), "r");
+ M[am + FSTAT] = READING;