;<134-TENEX>HOSTS.MAC;52 3-SEP-75 09:40:02 EDIT BY CALVIN ; INCREASED SIZE OF NHSTN & NHOSTS ;<133-TENEX>HOSTS.MAC;51 1-JAN-75 08:56:31 EDIT BY TOMLINSON ; FIX EOF FIX ;<133-TENEX>HOSTS.MAC;50 31-DEC-74 10:29:37 EDIT BY TOMLINSON ; TURN OFF EOF PSI CHANNEL WHILE READING FILE ;HOSTS.MAC;49 22-JUN-74 12:37:42 EDIT BY TOMLINSON ;HOSTS.MAC;48 20-JUN-74 13:11:59 EDIT BY TOMLINSON ; ADDED "NEW" KEEYWORD TO INDICATE NEW PROTOCOL HOSTS ;HOSTS.MAC;47 4-JUN-74 15:33:34 EDIT BY CLEMENTS ;HOSTS.MAC;46 31-MAR-74 12:41:29 EDIT BY CLEMENTS ;HOSTS.MAC;45 30-MAR-74 18:12:22 EDIT BY CLEMENTS ;HOSTS.MAC;44 28-MAR-74 18:20:15 EDIT BY TOMLINSON ;HOSTS.MAC;43 28-MAR-74 14:13:04 EDIT BY TOMLINSON ; SETUP GETAB TABLES WITH COUNTS SEARCH PROLOG,STENEX TITLE HOSTS SUBTTL BUILD HOST NAME TABLES FROM FILE USE SWAPPC INTERN HSTINI,NHOSTS,NHSTN EXTERN GTBNHN,GTBHST EXTERN NWPBT,BITS EXTERN MSPACS,MRPACS,FPTA,SKPRET ; BITS AND FIELD VALUES FOR B0-8 OF HOSTN TABLE SERVER==400000 USER==200000 NICKNAME==100000 TENEX==1000 ITS==2000 DEC==3000 TIP==4000 MTIP==5000 ELF==6000 ANTS==7000 MULTICS==10000 NHOSTS==400 NHSTN==600 MNHSTS==-NHOSTS NGS(HOSTN,NHOSTS) NGS(HSTNAM,NHSTN) NGS(MHOSTS,1) HSTINI: PUSH P,7 PUSH P,6 PUSH P,5 MOVEI 1,400000 RCM ; GET CHANNELS THAT ARE ON PUSH P,1 ; REMEMBER THEM MOVEI 1,400000 MOVSI 2,(1B10) DIC ; TURN OFF EOF CHANNEL MOVSI 1,(1B2+1B17) HRROI 2,[ASCIZ \HOST-NAME/DESCRIPTOR-FILE.TXT\] GTJFN JRST HSTINF ; FAIL PUSH P,1 MOVE 2,[7B5+1B19] OPENF JRST [ POP P,1 RLJFN JFCL JRST HSTINF] ; FAIL SETZM HSTNAM ; CLEAR OLD STUFF IN TABLE MOVSI 4,HSTNAM ; (TELNET FAILS IF THIS ISN'T DONE HRRI 4,HSTNAM+1 ; AND IT LOOKS NEATER TO HAVE WHOLE BLT 4,HSTNAM+NHSTN-1 ; WORD OF NULL AFTER EACH NAME) SETZM NWPBT ; ALSO CLEAR NEW PROTOCOL BIT TABLE MOVSI 4,NWPBT HRRI 4,NWPBT+1 BLT 4,NWPBT+^D<<256+35>/36>-1 MOVEI 4,HOSTN MOVEI 5,HSTNAM LUP0: PUSHJ P,GCH JRST DONE MOVEM 3,7 ; SAVE IN CASE THIS IS ALINE CAIN 2,12 JRST LUP0 CAIGE 4,HOSTN+NHOSTS CAIL 5,HSTNAM+NHSTN JRST FULL BKJFN JFCL RFPTR JFCL PUSH P,2 MOVEI 3,10 NIN JRST [ HRLI 6,[ASCIZ /BAD NUMBER/] POP P,3 JRST SYNERR] POP P,3 CAILE 2,0 CAILE 2,377 JRST [ HRLI 6,[ASCIZ /HOST NUMBER OUT OF RANGE/] JRST SYNERR] HRLZM 2,0(4) ; STORE HOST NUMBER BKJFN JFCL LUP4: PUSHJ P,GCH JRST PEOF CAIE 2,"," JRST [ HRLI 6,[ASCIZ /MISSING COMMA AFTER HOST NUMBER/] JRST SYNERR] MOVE 6,5 ; TEMP FOR BYTE POINTER SUBI 6,HSTNAM ; MAKE RELATIVE POINTER HRRM 6,0(4) ; STORE IN RH OF HOSTN MOVE 6,5 ; TEMP POINTER AGAIN HRLI 6,440700 ; 7 BIT LEFT JUSTIFIED LUP1: PUSHJ P,GCH ; READ NEXT CHARACTER JRST PEOF CAIE 2,12 ; TERMINATE ON END OF LINE CAIN 2,"," SETZ 2, ; OR COMMA IBP 6 HRRZ 1,6 ; WHERE ARE WE GOING TO PUT THIS? CAIL 1,HSTNAM+NHSTN ; OFF END OF TABLE? JRST FULL ; YES, SAY FULL DPB 2,6 ; STORE THE BYTE JUMPN 2,LUP1 ; LOOP IF NOT THE END MOVE 1,0(P) BKJFN ; GET THE TERMINATOR AGAIN JFCL LUP2: PUSHJ P,GCH JRST PEOF LUP2A: CAIN 2,12 JRST LUP2X ; DONE IF END OF LINE CAIE 2,"," ; SCAN UNTIL COMMA FOUND JRST LUP2 LUP3: PUSHJ P,GCH ; GET FIRST LETTER OF WORD JRST PEOF CAIN 2,"," JRST LUP2A ; JUMP IF NULL WORD CAIN 2,12 JRST LUP2X ; DONE IF END OF LINE GWORD: SETZ 1, ; PUT VALUE OF WORD HERE CAIN 2,"A" MOVSI 1,ANTS CAIN 2,"D" MOVSI 1,DEC CAIN 2,"E" MOVSI 1,ELF CAIN 2,"I" MOVSI 1,ITS CAIN 2,"M" JRST [ PUSHJ P,GCH JRST PEOF CAIN 2,"U" MOVSI 1,MULTICS CAIN 2,"T" MOVSI 1,MTIP JRST ELUP3] CAIN 2,"N" JRST [ PUSHJ P,GCH JRST PEOF CAIN 2,"E" JRST SETNWP CAIN 2,"I" MOVSI 1,NICKNAME JRST ELUP3] CAIN 2,"S" MOVSI 1,SERVER CAIN 2,"T" JRST [ PUSHJ P,GCH JRST PEOF CAIN 2,"E" MOVSI 1,TENEX CAIN 2,"I" MOVSI 1,TIP JRST ELUP3] CAIN 2,"U" MOVSI 1,USER ELUP3: HRLI 6,[ASCIZ /UNRECOGNIZED FLAG NAME/] JUMPE 1,SYNERR ; JUMP IF NO MATCH FOUND MOVSI 2,(17B8) HRLI 6,[ASCIZ /MULTIPLE SYSTEM TYPE SPECIFICATION/] TDNE 2,0(4) ; ALREADY HAVE A SYSTEM TYPE? TDNN 2,1 ; YES AND IS THIS TRYING TO SET IT? SKIPA JRST SYNERR ; YES. ERROR IORM 1,0(4) ; ACCUMULATE BITS JRST LUP2 ; AND SKIP TO COMMA/EOL LUP2X: MOVEI 5,1(6) ; START NEXT STRING IN NEXT WORD AOJA 4,LUP0 ; STEP TO NEXT HOSTN SLOT AND LOOP SETNWP: LDB 1,[POINT 8,0(4),17] ; GET HOST NUMBER IDIVI 1,^D36 MOVE 2,BITS(2) IORM 2,NWPBT(1) JRST LUP2 PEOF: MOVE 1,0(P) RFPTR JFCL MOVE 3,2 HRLI 6,[ASCIZ /PREMATURE END OF FILE/] SYNERR: HLRO 1,6 PSOUT HRROI 1,[ASCIZ / IN HOST DESCRIPTOR FILE /] PSOUT MOVE 2,7 MOVE 1,0(P) SFPTR ; SET BACK TO BEGINNING OF LINE JFCL SETO 7, PERLP: MOVE 1,0(P) RFPTR JFCL CAME 2,3 JRST PERLP1 MOVEI 1,101 RFPOS HRRZ 7,2 PERLP1: MOVE 1,0(P) PUSHJ P,GCH1 MOVEI 2,12 CAIN 2,12 JRST PERLPX MOVE 1,2 PBOUT JRST PERLP PERLPX: HRROI 1,[ASCIZ / /] PSOUT JUMPLE 7,PMRK MOVEI 1,40 PBOUT SOJG 7,.-1 PMRK: MOVEI 1,"^" PBOUT HRROI 1,[ASCIZ / /] PSOUT JRST LUP0 FULL: HRROI 1,[ASCIZ /HOST TABLES FULL BEFORE END OF FILE /] PSOUT JRST DONE DONE: PUSH P,5 MOVE 2,4 SUBI 2,HOSTN MOVNM 2,MHOSTS ; SAVE FOR CVHST, ... MOVEI 1,GTBHST CALL SETGTB POP P,2 SUBI 2,HSTNAM MOVEI 1,GTBNHN CALL SETGTB POP P,1 CLOSF JFCL AOS -4(P) ; SUCCESS RETURN HSTINF: POP P,2 ; GET CHANNELS THAT WERE ON BEFORE MOVEI 1,400000 AIC ; TURN THEM BACK ON POP P,5 POP P,6 POP P,7 POPJ P, SETGTB: PUSH P,2 PUSH P,1 CALL FPTA PUSH P,1 CALL MRPACS HRLZ 2,1 PUSH P,2 TLO 2,40000 MOVE 1,-1(P) CALL MSPACS MOVE 2,-3(P) HRLM 2,@-2(P) POP P,2 POP P,1 CALL MSPACS POP P,1 POP P,2 POPJ P, GCH: MOVE 1,-1(P) RFPTR JFCL MOVEM 2,3 GCH2: PUSHJ P,GCH1 POPJ P, CAIN 2,";" JRST GCHSMC CAIE 2,11 CAIN 2,40 JRST GCH2 GCHX: CAIN 2,37 MOVEI 2,12 AOS 0(P) POPJ P, GCH1: BIN CAIE 2,15 CAIN 2,14 JRST GCH1 JUMPN 2,SKPRET GCHNUL: GTSTS TLNE 2,1000 POPJ P, JRST GCH1 GCHSMC: BIN CAIE 2,37 CAIN 2,12 JRST GCHX JUMPN 2,GCHSMC GTSTS TLNN 2,1000 JRST GCHSMC POPJ P, END