Trailing-Edge
-
PDP-10 Archives
-
decuslib10-03
-
43,50306/tbin.iml
There are 2 other files named tbin.iml in the archive. Click here to see a list.
CALL ME !OBIN.!;
#FILE: TBIN.I10#
SUBR !OBIN.!(Q,IO,CH,LST) IS (
!OL.!, !IL.! ARE COMMON, 2 LONG;
!OC.!, !IC.!, !PSW.!, !RSW.! ARE COMMON, 1 LONG;
BBF IS 512 LONG;
FI IS 20 LONG;
FN IS 5 LONG;
UC IS 4 LONG;
Q=0 => (IO=> FN_'PI' ELSE FN_'PO';
(FN[I+1]_0) FOR I TO 3)
ELSE (W_[Q]; (FN[I]_[W+I]) FOR I TO 4);
(FN AND 377B)=0=>FN[1]_0;
(CH_!FCH.!(FN,I)) GE 0=>(E_LOC(BBF)+(CH LS 7); GO TO SLS);
I<0=>(IER('ATTEMPT TO OPEN MORE THAN 4 FILES.'); FINI(0));
CH_I; I_CH*5; HCH_CH+14B; UC[CH]_1+IO; CH>NC=>NC_CH;
(FI[I+J]_FN[J]) FOR J TO 4;
INIT(HCH,14,DEV);
DEV_'DSK'; DEV[1]_0;
E_LOC(BBF)+(CH LS 7); !PTE.![CH]_010700000177B+E;
!LC.![CH]_!FL.![CH]_0; !FM.![CH]_1;
IO => (W_LOOKUP(HCH,FN,FN[2],FN[3],FN[4]);
W=>(IER('FILE NOT FOUND: '); GO TO ERF);
!PTR.![CH]_!PTE.![CH])
ELSE (W_ENTER(HCH,FN,FN[2],FN[3],FN[4]);
W=>(IER('CANNOT CREATE FILE: ');
ERF: OUTSTR(FN); FN[2]=>(OUTSTR('.'); OUTSTR(FN[2]));
FN[3]=>(OUTSTR('['); OUTSTR(!OAS.!(FN[3])); OUTSTR(',');
OUTSTR(!OAS.!(FN[4])); OUTSTR(']'));
FINI(0));
!PTR.![CH]_010677777777B+E);
SLS: UC[CH]=3 => LST_E ELSE LST_777577777777B+E;
0);
SUBR !DEV.!(D,IO) IS (
D='TTY:'=>(IO=>!IC.!_-2 ELSE !OC.!_-1;
I_-(IO+1);
!LC.![I]_!FL.![I]_0; !FM.![I]_1;
RETURN 0);
DEV[1]_((376B AND DEV_D)=>D[1] ELSE 0));
DEV: DATA('DSK',0);
REMOTE (DATA(0,0); !PTR.!: DATA(0,0,0,0);
DATA(0,0); !PTE.!: DATA(0,0,0,0);
DATA(0,0); !LC.!: DATA(0,0,0,0);
DATA(0,0); !FL.!: DATA(0,0,0,0);
DATA(0,0); !FM.!: DATA(0,0,0,0));
!PTR.!, !PTE.!, !LC.!,!FL.!, !FM.! ARE COMMON;
SUBR FINI(Z) IS (
Z=0=>GO TO ALL; Z=-1=>GO TO ALL;
FN_Z; (FN[I]_[[14R+I-1]]) FOR I IN 2,1,4;
FN[1]_[[14R]+1];
(FN AND 377B)=0=>FN[1]_0;
FN[2]='UFD'=>(FN AND 600000000000B)=0=>FN[1]_0;
!CLS.!(FN);
0R_0; DATA(267716000004B);
ALL: (UC[I]=1 => !PDO.!(I);
UC[I]=3 => !TYP.!(!PTR.![I],LOC(BBF)+(I LS 7));
UC[I]=>(UC[I]_0; CLOSE(I+14B))) FOR I TO NC;
NC_-1; Z=0=>(RELEA(I+14B) FOR I TO NC; CALLI(12B,1));
!PSW.!_!RSW.!_0;
0);
SUBR !CLS.!(NM) IS (
(I_!FCH.!(NM,M)) GE 0 => (
J_I*5; (FI[J+K]_0) FOR K TO 4; NC=I=>NC_NC-1;
UC[I]=1 => (SC_!OC.!; SL_!OL.!; !PDO.!(I); !OC.!_SC; !OL.!_SL);
UC[I]=3 => !TYP.!(!PTR.![I],LOC(BBF)+(I LS 7));
UC[I]_0; CLOSE(I+14B));
0);
SUBR !FCH.!(NM,FC) IS (
C_-1;
LB: C_C+1;
C LE NC => (I_C*5; (FI[I+J] NE NM[J]=>GO TO LB) FOR J TO 4)
ELSE (C_-1; (UC[J]=0=>(FC_J; GO TO RTFC)) FOR J TO 3;
FC_-1);
RTFC: C);
NC: DATA(777777777777B);
SUBR !PDO.!(I) IS (
E_!PTE.![I]-128;
!OL.!_E-011100000000B; !OC.!_I;
PAD: !PTR.![!OC.!] NE E=>(!POUT.!(0); GO TO PAD);
0);
#PGM TO DUMMY UP FILE REFERENCES IN NEW IMP#
SUBR !FBLK.!(Q) IS (
BLK IS 5 LONG;
BLK_[!PADR.!(Q)]; BLK[1]_0;
BLK AND 377B=>BLK AND 774000000000B=>BLK[1]_[1+!PADR.!(Q)];
BLK[I+1]_[!PADR.!(Q+I)] FOR I IN 1,1,3;
Q_Q+3; I_LOC(BLK);
LOC(I));
SUBR !OAS.!(N) IS (
RTV_I_0; P_BYTEP RTV<7,36>; M_N;
TA1:FI[I]_(M AND 7)+60B; (I_I+1)<4=>((M_M RS 3)=>GO TO TA1);
<+P>_FI[L] FOR L FROM I-1;
RTV);
SUBR ITYPE(NM) IS (
FN_NM; FN[2]_FN[3]_FN[4]_0; FN AND 377B=>FN[1]_NM[1] ELSE FN[1]_0;
(I_!FCH.!(FN,J)) GE 0=>(UC[I] NE 3=>(IER('ITYPE FILENAME ALREADY IN USE: ');
OUTSTR(FN));
GO TO RTNI);
J<0 => (IER('CHANNEL NOT AVAILABLE FOR TYPING FILE: ');
OUTSTR(FN); GO TO RTNI);
K_J*5; (FI[K+I]_FN[I]) FOR I TO 4; J>NC=>NC_J;
UC[J]_3; !LC.![J]_!FL.![J]_0; !FM.![J]_1; E_LOC(BBF)+(J LS 7);
!PTE.![J]_010700000017B+E; !PTR.![J]_440700000000B+E;
RTNI: 0);
SUBR !PADR.!(Q) IS (8R_Q; DATA(201430000000B); 8R);
SUBR IER(MES) IS (
OUTCHR(15B); OUTCHR(12B); OUTSTR('?? ERROR IN IMP RUN-TIME I/O:');
OUTCHR(15B); OUTCHR(12B); OUTSTR('?? '); OUTSTR(MES);
0) %%%