ASMB,R,Q,C HED TABLE BUILDING ROUTINES * * NAME: T.BTE * SOURCE: 92076-18023 * RELOC: PART OF 92076-16002 * PGMR: B.J.L. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT PACKARD COMPANY. * * **************************************************************** * NAM T.BTE,8 92076-1X023 REV. 2040 800731 92076-16002 * SUP * * * * THE FOLLOWING ROUTINE BUILDS THE INDIVIDUAL TABLE * ENTRIES FOR RTETG. EACH TIME IT IS CALLED, IT PARSES * THE COMMAND LINE AND BUILDS AN ENTRY IN THE BRANCH * TABLE, MNEMONIC TABLE, AND ENTRY POINT NAME TABLE. * * CALLING SEQUENCE: * * COMMAND LINE IN T.COM (IN MAIN) * COMMAND LINE LENGTH IN T.LEN (IN MAIN) * T.MAD POINTS AT MNTBL SEGMENT * T.BAD POINTS AT BRTBL * T.EAD POINTS AT ENTRY POINT BUFFER * T.ERN = 0 * JSB T.BTE * RETURN ERROR CODE (T.ERN) UPDATED AND ADDRESS * POINTERS POINT TO NEXT ENTRY POSITION * T.SUB WILL BE FILLED IN * * * * FORMAT OF T.SUB IS AS FOLLOWS: * * * +-----------------------------------------------+ * !15!14!13!12!11!10! 9! 8! 7! 6! 5! 4! 3! 2! 1! 0! * +-----------------------------------------------+ * \LOADR OPTN/\ PAGE SIZE /\ SUBROUTINE CT / * * ENT T.BTE * EXT EXEC SYSTEM CALLS EXT .DRCT GET DIRECT ADDRESS SUBROUTINE EXT T.COM COMMAND BUFFER (IN MAIN) EXT T.LEN COMMAND BUFFER LENGTH (IN MAIN) EXT T.IDL ID LETTER CODE (IN MAIN) EXT T.MAD MNEMONIC TABLE ADDRESS (IN MAIN) EXT T.BAD BRANCH TABLE ADDRESS (IN MAIN) EXT T.EAD ENTRY POINT ADDRESS (IN MAIN) EXT T.ERN ERROR NUMBER (IN MAIN) EXT T.FIL FILE NAME ADDRESS (IN MAIN) EXT T.PRI PRIORITY FOR OVERLAYS (IN MAIN) EXT T.SEC SECURITY CODE FOR OVERLAYS (IN MAIN) EXT T.CRF CARTRIDGE # FOR OVERLAYS (IN MAIN) EXT T.SUB SUBROUTINE COUNT AND SIZE BUFFER EXT T.CON CONTROL WORD FOR OUTPUT (IN MAIN) * * T.BTE NOP JSB .DRCT SET UP POINTERS INTO THE DEF T.COM COMMAND BUFFER FOR T.GCR CLE,ELA STA T.ADR LDA T.LEN ALS CMA STA T.CNT JSB .DRCT SET UP POINTER TO DEF T.SUB SUBROUTINE COUNT BUFFER. STA SUNUM LDA T.BAD SET UP POINTERS INTO THE STA BR1 BRANCH AND MNEMONIC TABLE INA ENTRIES TO BE BUILT. STA BR2 INA STA BR3 INA STA BR4 LDA T.MAD STA MN1 INA STA MN2 STA SNAME LDA T.EAD STA EN1 STA ENAME STA EPNAM JSB .DRCT DEF T.FIL STA FNAME CLB STB A,I STB EN1,I STB BR3,I INITIALIZE TO-FROM WORD STB BR4,I INITIALIZE REAL-INTEGER WORD STB PRCNT INITIALIZE PARAMETER COUNT. STB FOUND CLEAR PARAMETER SEEN SWITCH. STB FNAME,I **********************REMOVED 800728********************* * LDB D3 SET DEFAULT TO BACKGROUND * STB LDOPT * LDA OVNUM IF FIRST * ADA SUNUM SUBRUTINE IN * LDA 0,I IN OVERLAY THEN ZERO SIZE * AND B77 * SZA,RSS * STA SIZE **********************800728***************************** LDA AMASK SET DEFAULT STA BR2,I TO 'ARRAY' LDA B50 STA T.DLM SET DELIMITER TO "(" JSB T.GCR GET FIRST CHARACTER. JMP ERR4 ERROR - NOT ENOUGH PARAMETERS. JSB LNAME GET NAME( SNAME BSS 1 DEC -7 MAX OF 6 CHARS + "(" JMP ERR2 INVALID NAME STA SAVE SAVE DELIMITER CHARACTER. JSB CHRCK ANY PARAMETER DESCRIPTIONS? JMP T.B10 NO. NOP LDB TEMP1 STORE "(" WITH NAME. JSB SBYTE ISZ TEMP1 JSB NMLEN CALCULATE NAME LENGTH. SPECS LDA PRCNT HAVE WE FOUND 15 PARAMETER CPA D15 SPECIFICATION? JMP ERR5 YES - ERROR. CLB SET UP TO GET ATTRIBUTES STB FNDIR FOR A PARAMETER. STB FNDA CLEAR FLAGS INDICATING STB FNDV ATTRIBUTES SEEN. STB SAVE GTAT1 JSB T.GCR GET A CHARACTER. JMP ERR6 ILLEGAL FORMAT. CPA B54 COMMA? RSS YES. CPA B51 RIGHT PARENTHESIS? RSS YES. JMP GTAT3 ORDINARY CHARACTER. LDB SAVE HAD WE FOUND ANY SZB,RSS ATTRIBUTES? JMP ERR5 NO - ILLEGAL PARAMETER SPECIFICATION. JMP GTAT2 YES - FINISHED WITH THIS SPEC. GTAT3 CLB HAVE A PARAMETER SPEC. CHARACTER. CPA ACHAR WHAT HAVE WE GOT? JMP AC "A" CPA ICHAR JMP I "I" CPA VCHAR JMP V "V" CPA RCHAR JMP R "R" JMP ERR5 ILLEGAL PARAMETER SPECIFICATION. * I INB SET UP PARAMETER BIT. R LDA FNDIR SEEN AN I OR SZA R SPEC? JMP ERR5 YES - ILLEGAL PARAMETER SPEC. INA INDICATE SPECIFICATION STA FNDIR FOUND. LDA BR4,I ROTATE PARAMETER BIT INTO RRR 1 THE CONVERSION WORD. STA BR4,I GTATT ISZ SAVE COUNT THE SPEC. CHARACTER. JMP GTAT1 GO LOOK FOR MORE. * GTAT2 ISZ PRCNT COUNT THE PARAMETER. STA SAVE SAVE BREAK CHARACTER. LDB FNDIR MAKE SURE BITS ARE SZB ROTATED PROPERLY ON JMP GTAT5 BRANCH TABLE WORDS LDA BR4,I REPRESENTING SPECIFICATION RRR 1 LETTERS NOT FOUND STA BR4,I DESCRIBING THIS PARAMETER. GTAT5 LDB FNDA SZB JMP GTAT6 LDA BR2,I RRR 1 STA BR2,I GTAT6 LDB FNDV SZB JMP GTAT7 LDA BR3,I RRR 1 STA BR3,I GTAT7 LDA SAVE GET BACK THE BREAK CHAR. CPA B51 AT THE END OF THE SPECS.? JMP GTAT4 YES. JMP SPECS KEEP LOOKING. * GTAT4 LDA PRCNT FINISHED WITH SPECS. SZA,RSS DID WE FIND ANYTHING? JMP ERR5 ERROR - ILLEGAL PARAMETER SPECIFICATION. JMP T.B11 CONTINUE WITH OTHER PARAMETERS. * V CPA FNDV ALREADY SEEN THIS CHARACTER? JMP ERR5 YES - ILLEGAL PARAMETER SPECIFICATION. STA FNDV INDICATE THIS CHARACTER SEEN. INB SET UP PARAMETER BIT LDA BR3,I AND ROTATE IT RRR 1 TO PROPER POSITION STA BR3,I IN "TO-FROM" WORD. JMP GTATT GO LOOK FOR MORE. * AC CPA FNDA ALREADY SEEN THIS CHARACTER? JMP ERR5 YES - ILLEGAL PARAMETER SPECIFICATION. STA FNDA INDICATE THIS CHARACTER SEEN. INB SET UP PARAMETER BIT LDA BR2,I AND ROTATE IT TO RRR 1 PROPER POSITION IN STA BR2,I VARIABLE TYPE WORD. JMP GTATT * ERR9 ISZ T.ERN BAD FILE NAME ERR8 ISZ T.ERN BAD ENTRY POINT NAME ERR7 ISZ T.ERN TABLE OVERFLOW. ERR6 ISZ T.ERN ILLEGAL FORMAT T.ERN. ERR5 ISZ T.ERN ILLEGAL PARAMETER SPECIFICATION. ERR4 ISZ T.ERN NOT ENOUGH PARAMETERS. ERR3 ISZ T.ERN ENTRY POINT NAME TOO LARGE. ERR2 ISZ T.ERN NAME TOO LARGE. ERR1 ISZ T.ERN TOO MANY PARAMETERS. JMP T.BTE,I GO REPORT THE BAD NEWS. * NMLEN NOP SUBROUTINE TO CALCULATE LDA MN2 THE LENGTH OF A CMA,INA SUBROUTINE NAME INCLUDING LDB TEMP1 THE "(" IF PRESENT AND CLE,ERB STORE THE RESULT. ADA 1 LDB TEMP1 ALS SLB INA STA MN1,I JMP NMLEN,I * T.B10 JSB NMLEN NO PARAMETER SPECIFICATIONS JMP T.BT2 TO BREAK UP. * * A EQU 0 AMASK OCT 77777 SUNUM BSS 1 BR1 BSS 1 BR2 BSS 1 BR3 BSS 1 BR4 BSS 1 MN1 BSS 1 MN2 BSS 1 EN1 BSS 1 PRCNT BSS 1 CHAR BSS 3 *800729** SAVE BSS 1 FOUND BSS 1 FNDIR BSS 1 FNDA BSS 1 FNDV BSS 1 FULL OCT 177 B77 OCT 77 B50 OCT 50 B51 OCT 51 B100 OCT 100 M101 OCT 177677 M133 OCT 177645 B200 OCT 200 EQ OCT 75 ICHAR OCT 111 VCHAR OCT 126 RCHAR OCT 122 ACHAR OCT 101 D2 DEC 2 D15 DEC 15 D32 DEC 32 M32 DEC -32 D64 DEC 64 * * PROT NOP LDA PRCNT CMA ROTATE PARAMETER DESCRIPTOR T.BT5 INA,SZA,RSS WORDS TO THEIR JMP T.BT4 CORRECT POSITIONS. RBL JMP T.BT5 T.BT4 JMP PROT,I * T.B11 LDA PRCNT STORE PARAMETER COUNT ALF IN MNEMONIC TABLE WORD. IOR MN1,I STA MN1,I LDA T.CNT SSA,RSS JMP ERR4 NOT ENOUGH PARAMETERS. JSB T.GCR GET NEXT CHARACTER. JMP ERR4 NOT ENOUGH PARAMETERS. STA SAVE SAVE DELIMITER. LDB BR2,I JSB PROT STB BR2,I LDB BR3,I JSB PROT STB BR3,I LDB BR4,I JSB PROT STB BR4,I * T.BT2 LDB EQ SET DELIMITER TO "=" STB T.DLM T.BT1 LDA SAVE CPA D10 ANY MORE PARAMETERS? JMP T.B12 NO - CHECK FOR MINIMUM. LDB FOUND DO WE HAVE ALL CPB FULL POSSIBLE PARAMETERS? JMP ERR1 YES - TOO MANY PARAMETERS. CPA B54 RSS JMP ERR6 JSB T.GCR GET NEXT CHARACTER. JMP T.B12 JSB LNAME GET THE KEYWORD. DEF CHAR DEC -5 JMP ERR6 ILLEGAL FORMAT. STA SAVE * * MATCH THE KEYWORD AND JUMP TO CORRECT ROUTINE. * LDB KEYWD MATCH THE KEYWORD. T.BT3 INB LDA B,I SZA,RSS JMP ERR6 NO MATCH - ERROR. CPA CHAR JMP T.BT6 ADB D2 JMP T.BT3 T.BT6 INB LDA B,I INB CPA CHAR+1 CCE,RSS JMP T.BT3 ELB,RBR JMP B,I * KEYWD DEF * ASC 2,OV OVERLAY NUMBER SPEC DEF OVLAY ASC 2,SZ RTEIII LOADR SIZE SPEC DEF OSIZE ASC 2,INTG INTEGER FUNCTION DEF INTEG ASC 2,REAL REAL FUNCTION DEF REAL ASC 2,ENT ENTRY POINT SPEC DEF EPNT ASC 2,FIL FILE NAME SPEC DEF FILNM ASC 2,BT BACGROUND TEMPRORARY DEF BCKGD ASC 2,BP BACKGROUND PERMANENT DEF BCKGD GOTO TEMPRORARY SETTING ASC 2,BG GENERAL BACKGROUND FOR L DEF BCKGD ASC 2,FT FOREGROUND PERMANENT DEF REALT ASC 2,FP FOREGROUND TEMPORARY DEF REALT ASC 2,RT GENERAL REAL TIME FOR L DEF REALT ASC 2,SS SUBSYTEM GLOBAL COMMON DEF SSPRM ASC 2,VL VARIABLE LENGTH PARAMETER LIST DEF VLPRM ZERO DEC 0 END OF TABLE *READDED 800115* * * * THE FOLLOWING SUBROUTINE CHECKS TO SEE WHETHER A * GIVEN PARAMETER HAS ALREADY BEEN SEEN AND RESETS * FOUND TO INDICATE PARAMETER RECOGNIZED. * * CALLING SEQUENCE: * LDB BIT POSITION IN FOUND * JSB PRCHK * PRCHK NOP LDA FOUND XOR B STA FOUND AND B SZA,RSS JMP ERR6 JMP PRCHK,I * * SETUP LOADER OPTIONS IF SPECIFIED * * LDOPT CONTAINS VALUE FOR TYPE OF PROGRAM LOAD IN TRANSFER FILE * * LDOPT = 0 OLD REAL TIME PERMANENT * LDOPT = 1 ALL REAL TIME * LDOPT = 2 OLD BACKGROUND PERMANENT * LDOPT = 3 ALL BACKGROUND * LDOPT = LDOPT+10B WILL CAUSE THE LOADED PROGRAM TO REFERENCE SSGA * * EXAMPLE: 13 OCTAL WOULD BE BACKGROUND TEMP WITH SSGA * ************************CHANGED 800728********************* * * THE FOLLOWING CODE WAS CHANGED TO REFLECT REMOVAL OF * TRANSFER FILE. * *SSPRM LDA D8 SSGA SPECIFIED * ADA LDOPT * STA LDOPT SSPRM LDB B200 HAVE WE SEEN THIS PARAMETER JSB PRCHK BEFORE JMP T.BT1 GO TO NEXT PARAMETER * *FRPRM CLA REAL TIME PERMANENT * RSS REALT NOP REAL TIME TEMPORARY * RSS *BKPRM LDA D2 BACKGROUND PERMANENT * RSS *BCKGD LDA D3 BACKGROUND TEMPORARY * ADA LDOPT SET LOADR OPTIONS * STA LDOPT BCKGD LDB D32 HAVE WE SEEN JSB PRCHK THIS PARAMETER BEFORE? JMP T.BT1 GO TO NEXT PARAMETER * * SET VARIABLE LENGTH PARAMETER LIST FLAG * VLPRM LDB B100 JSB PRCHK LDA MN1,I GET PARAMETER COUNT IOR BIT14 WORD AND STA MN1,I SET VARIABLE LENGTH FLAG JMP T.BT1 AND LOOK FOR MORE * * GET OVERLAY SIZE * OSIZE LDB D2 HAVE WE ALREADY JSB PRCHK SEEN THIS PARAMETER? OSIZ1 JSB T.GCR SEARCH FOR , JMP ERR6 NO MORE CHAR. ERROR CPA B54 COMMA? RSS YES, SAVE DELIMITER JMP OSIZ1 NO, GO FOR MORE STA SAVE JMP T.BT1 * LDA SAVE * CPA EQ * RSS * JMP ERR6 * JSB T.GTN * JMP ERR6 NO NUMBER - ERROR. * STA SAVE SAVE DELIMITER. * STB SIZE SAVE PAGE SIZE. * ADB M1 CHECK BOUNDS. * SSB PAGE SIZE SHOULD BE * JMP ERR6 GREATER THAN ZERO * ADB M32 AND LESS THAN OR * SSB,RSS EQUAL TO 32. * JMP ERR6 * JMP T.BT1 LOOK FOR MORE. * * GET OVERLAY NUMBER. * M1 DEC -1 SIZE NOP SAVE FOR OVERLAY SIZE OVNUM BSS 1 SAVE FOR OVERLAY NUMBERS. LDOPT BSS 1 LOADR OPTION BIT14 OCT 40000 * OVLAY CLB,INB HAVE WE ALREADY JSB PRCHK SEEN THIS KEYWORD? LDA SAVE GET DELIMITER. CPA EQ RSS JMP ERR6 JSB T.GTN GET THE NUMBER. JMP ERR6 STA SAVE SAVE DELIMITER. SSB CHECK BOUNDS. JMP ERR6 OUT OF BOUNDS. STB TEMP SAVE OVERLAY NUMBER. *800128* ADB M32 SSB,RSS JMP ERR6 ERROR - OUT OF BOUNDS. ***************************ADDED 800128********************************* LDB TEMP CHECK FOR CHANGE IN OV# CMB,INB ADB OVNUM SSB IF -, OK LARGER # JMP OVLA1 SZB,RSS IF 0, SAME VALUE JMP OVLA1 LDA D30 OV# IS SMALLER THEN CURRENT STA T.ERN REPORT ERROR AND ABORT JMP T.BTE,I OVLA1 LDB TEMP STB OVNUM *****************************800128************************************ STB A BLF SAVE IT IN PROPER POSITION. RBL,RBL ADA SUNUM ASSIGN A SUBROUTINE # STA CHAR AND KEEP TRACK OF IT. LDA CHAR,I ISZ CHAR,I AND B77 CPA D64 CHECK BOUNDS. *800128* JMP ERR7 TABLE OVERFLOW - TOO MANY XOR B SUBROUTINES IN OVERLAY. LDB T.IDL MERGE IN CODE BLF,BLF FOR ID LETTER. BLF,RBR XOR B STA BR1,I SAVE BRANCH TABLE ENTRY. JMP T.BT1 LOOK FOR MORE. * D30 DEC 30 *800128* TEMP NOP *800128* * * HAVE AN INTEGER VALUED FUNCTION * INTEG CLB,CCE LDB BR4,I ELB,RBR HAVE AN INTEGER-VALUED STB BR4,I FUNCTION. * * HAVE A REAL VALUED FUNCTION. * REAL LDB D4 SEEN THIS PARAMETER JSB PRCHK ALREADY? LDA MN1,I SET FUNCTION BIT CCE ON MNEMONIC TABLE ENTRY. ELA,RAR STA MN1,I JMP T.BT1 LOOK FOR MORE. * * HAVE AN ENTRY POINT NAME * D8 DEC 8 D16 DEC 16 * EPNT LDB D8 SEEN THIS PARAMETERS JSB PRCHK ALREADY? LDA SAVE CPA EQ RSS JMP ERR6 JSB T.GCR JMP ERR6 JSB LNAME GET ENTRY POINT NAME ENAME BSS 1 AND PUT INTO TABLE. DEC -6 JMP ERR3 ENTRY POINT NAME TOO LARGE. STA SAVE SAVE DELIMITER. *************************ADDED 800322******************************* LDA LENT1 CHECK FOR ACTUAL LENGTH ADA M6 OF NOT >5 SSA,RSS IF NEG. OK JMP ERR3 ELSE ERROR JMP T.BT1 * M6 DEC -6 * ****************************800322********************************** * * GET FILE NAME * FILNM LDB D16 SEEN THIS PARAMETER JSB PRCHK ALREADY? LDA SAVE CPA EQ RSS JMP ERR6 JSB T.GCR JMP ERR6 JSB T.NAM GET THE FILE NAME. FNAME BSS 1 **********************ADDED 791024*********************************** CPA .11 TOO MANY CHARS IN NAME? JMP ERR6 YES, ERROR *****************************791024********************************** STA SAVE SAVE DELIMITER. JMP T.BT1 * * FILE NAME AND ENTRY POINT NAME CHECK. * * CALLING SEQUENCE: * LDA ADDRESS OF NAME * LDB SWITCH (0 = FILE NAME, 1 = ENTRY POINT) * JSB NMCHK * RETURN LOSEBIG * RETURN+1 OK * NMCHK NOP ERB LDB T.CNT SAVE COUNT AND ADDRESS STB NMC1 USED BY T.GCR. LDB T.ADR STB NMC2 LDB FNM1 SEZ GET PROPER TABLE LDB ENT1 OF CHARACTERS. STB NMC3 LDB M7 SEZ INB GET PROPER COUNT STB T.CNT OF MAX. CHARS. ELB STB NMSAV CLE,ELA STA T.ADR JSB T.GCR GET FIRST CHARACTER. JMP NMCHK,I NULL - ERROR. NMCH1 LDB NMC3,I CHECK VALIDITY OF FIRST CHARACTER. ISZ NMC3 IS IT IN ANY LEGAL RANGE? SZB,RSS END OF CHARACTER TABLE? JMP NMCHK,I BAD NAME - ERROR RETURN. JSB RANGE CHARACTER IN THIS RANGE? JMP NMCH1 NO - CHECK NEXT RANGE. NMCH2 LDA NMSAV ENTRY POINT OR FILE NAME? LDB FNMR GET PROPER CHAR. TABLE SZA FOR REMAINING CHARACTERS. LDB ENTR STB NMC3 JSB T.GCR GET NEXT CHARACTER. JMP NMCH3 ALL DONE CHECKING. NMCH4 LDB NMC3,I ISZ NMC3 SZB,RSS JMP NMCHK,I JSB RANGE IS CHARACTER IN THIS RANGE? JMP NMCH4 NO - CHECK NEXT RANGE. JMP NMCH2 YES - CHECK NEXT CHARACTER. * NMCH3 LDA NMC1 RESTORE COUNT AND STA T.CNT ADDRESS FOR T.GCR. LDA NMC2 STA T.ADR ISZ NMCHK NORMAL EXIT. JMP NMCHK,I * NMC1 BSS 1 NMC2 BSS 1 NMC3 BSS 1 NMSAV BSS 1 * FNFC ASC 1,!* FIRST CHARACTER TABLE ASC 1,./ FOR FILE NAMES. ASC 1,;_ DEC 0 FNRC ASC 1,!& REMAINING CHARACTER SET ASC 1,.9 FOR FILE NAMES. ASC 1,;_ DEC 0 EPFC ASC 1,!& ASC 1,./ ASC 1,>_ DEC 0 EPRC ASC 1,!& ASC 1,._ DEC 0 * ENT1 DEF EPFC ENTR DEF EPRC FNM1 DEF FNFC FNMR DEF FNRC * * THE FOLLOWING SUBROUTINE CHECKS WHETHER A * CHARACTER IS IN THE GIVEN RANGE. UPON RETURN * THE A REGISTER IS THE SAME AS ON ENTRY. * * CALLING SEQUENCE: * LDA CHARACTER * LDB RANGE VALUE * JSB RANGE * RETURN NOT IN RANGE * RETURN+1 IN RANGE * RANGE NOP STA RANG1 CLA LSR 8 ALF,ALF STB RANG2 CMB,INB ADB RANG1 SSB JMP RANGE,I CMA STA B ADB RANG1 LDA RANG1 SSB ISZ RANGE JMP RANGE,I * RANG1 BSS 1 RANG2 BSS 1 * T.B12 LDA FOUND HAVE NECESSARY SLA,RSS PARAMETERS? JMP ERR4 NO - NOT ENOUGH. * LDA MN2 SET UP TO DEFAULT THE CLE,ELA ENTRY POINT NAME, IF STA T.ADR NECESSARY. SET POINTERS LDA MN1,I FOR T.GCR. AND B7 NAME WILL BE PADDED WITH CMA BLANKS BY LNAME. STA T.CNT LDA EN1,I BYPASS DEFAULT SET IF SZA ENTRY POINT ALREADY SET. JMP T.BT8 * LDA B50 STA T.DLM SET UP FOR LNAME. JSB T.GCR GET FIRST CHARACTER OF NAME. NOP JSB LNAME IF WE NEED TO DEFAULT EPNAM BSS 1 THE ENTRY POINT NAME, M7 DEC -7 GO AHEAD AND DO SO. NOP T.BT8 LDA ENAME CHECK VALIDITY OF CLB,INB ENTRY POINT NAME. JSB NMCHK MAKE THE CHECK. JMP ERR8 BAD ENTRY POINT NAME. LDA FNAME CHECK VALIDITY OF FILE NAME. LDB A,I DO NOT CHECK A "NO-NAME." SZB,RSS JMP T.BT0 CLB JSB NMCHK DO THE CHECK. JMP ERR9 BAD FILE NAME. T.BT0 LDA EN1 INCREMENT COUNTERS AND ADA D3 PASS BACK NEW ADDRESSES STA T.EAD TO THE MAIN. LDA BR4 INA STA T.BAD LDA MN1,I AND B7 INA ARS ADA MN2 STA T.MAD LDB OVNUM INDEX TO OVERLAY ADB SUNUM POSITION AND PICK STB SAVE UP THE ENTRY. LDA SAVE,I ISOLATE THE SIZE RRR 6 ATTRIBUTE ALREADY AND B77 STORED. SZA,RSS OLD SIZE ZERO? JMP T.BT9 YES! * DO WE HAVE A DUPLICATE DEFINITION LDB SIZE IS NEW SIZE ZERO? SZB,RSS JMP T.BT9 YES! CMB,INB ADB A SZB,RSS JMP T.BT9 SSB HAVE DUPLICATE DEFINITION. LDA SIZE TAKE LARGER OF TWO STA SIZE VALUES. JSB EXEC PRINT WARNING MESSAGE DEF T.BT9 TO TELL USER OF DEF D2 DUPLICATE DEFINITION. DEF T.CON DEF WARN DEF WARNL T.BT9 LDA SAVE,I AND B77 PUT SIZE INTO THE LDB SIZE PROPER PLACE IN BLF THE TABLE. RBL,RBL XOR B LDB LDOPT PUT LOADR OPTIONS BLF,BLF INTO BLF PLACE XOR B STA SAVE,I JMP T.BTE,I * B7 OCT 7 WARNL DEC 20 LENGTH OF WARNING. WARN ASC 20, * WARNING * DUPLICATE SIZE DEFINITION SKP * * * THE FOLLOWING ROUTINE PARSES THE FIRST COMMAND * LINE TO RTETG. * * CALLING SEQUENCE * * COMMAND LINE IN T.COM * LENGTH OF LINE IN T.LEN * T.MAD POINTS TO FIRST FILE NAME BUFFER * JSB T.GFI * * ENT T.GFI EXT NAMR,.SBT * * ADDED CALLS TO NAMR, .SBT 791025 * * * T.GFI NOP LDA D80 PUT IN DEFAULTS STA T.PRI FOR PRIORITY, CLA SECURITY CODE, STA T.SEC STA T.CRF AND CARTRIDGE #. JSB .DRCT SET UP FOR T.GCR. DEF T.COM GET BUFFER ADDRESS. CLE,ELA SET UP POINTER. STA T.ADR LDA T.LEN SET UP CHARACTER LENGTH. ALS CMA STA T.CNT LDA T.MAD STA NWFIL LDA M2 SET UP TO GET *800728** STA SAVE THREE FILE NAMES. T.GF1 CPA D10 END OF BUFFER? JMP ERRO4 YES - NOT ENOUGH PARAMETERS. JSB T.GCR GET NEXT CHARACTER. JMP ERRO4 NONE - ERROR. CPA D10 END OF BUFFER? JMP ERRO4 YES - ERROR. JSB T.NAM GET A FILE NAME, NWFIL BSS 1 SECURITY CODE, AND CRN# ************************ADDED 791024******************************* CPA D10 WAS THERE AN EOL? JMP ERRO4 YES, ERROR CPA .11 TOO MANY CHARS? JMP ERRO6 ILLEGAL FORMAT ******************************791024****************************** LDB NWFIL ADB D5 SET UP FOR STB NWFIL NEXT FILE NAME. ISZ SAVE JMP T.GF1 CPA D10 JMP ERRO4 JSB T.GCR ANY MORE INPUT? JMP ERRO4 NO - NOT ENOUGH PARAMETERS? ***********************ADDED 800728******************************* LDB M1 SET INDICATOR FOR 1ST TIME THRU STB CHCKR IN CASE TRFL NAME WAS THERE GOAGN JSB LNAME GET ID LETTER. ************************800728************************************ DEF CHAR DEC -5 JMP ERRCK TOO LONG - ERROR. *800728** STA SAVE SAVE DELIMITER CHAR. ****************************ADDED 800322******************************* LDB LENT1 CHECK ACTUAL LENGTH ADB M5 FOR >4 SSB,RSS IF NEG. OK JMP ERRCK ELSE ERROR *800728** ********************************800322********************************* LDB CHAR CPB ID CLA,RSS JMP ERRCK *800728** LDB CHAR+1 LSR 8 ALF,ALF CPB EQ RSS JMP ERRCK *800728** **************************ADDED 800731******************************** STA T.IDL HOLD ORIGINAL CHAR. ADA M133 MAKE SURE ISN'T > ALPHA Z SSA,RSS POS. MEANS > JMP ERRO6 YES, IT IS SO ERROR LDA T.IDL NO, MAKE SURE ISN'T < ALPHA A ADA M101 SSA NEG. MEANS < JMP ERRO6 YES, IS < A LDA T.IDL NO, SO GO ON ********************************800731******************************** AND B37 STA T.IDL SAVE ID LETTER. ADA N33 CHECK BOUNDS. SSA,RSS JMP ERRO6 TOO LARGE - ERROR. LDA T.CNT CHECK CHARACTER COUNT. SZA,RSS ANY MORE INPUT? JMP T.GFI,I THEN WE'RE DONE. JSB T.GTN GET NEXT PARAMETER. JMP T.GF2 SZB,RSS NOT SUPPLIED OR ZERO? JMP T.GF3 THEN BYPASS - PARM. IS DEFAULTED. STB T.PRI SAVE PRIORITY. ADB M10K CHECK BOUNDS. SSB,RSS JMP ERRO6 TOO LARGE - ERROR. CCB ADB T.PRI SSB JMP ERRO6 TOO SMALL - ERROR. T.GF3 CPA D10 JMP T.GFI,I ALL DONE. CLB ZERO OUT FLAG FOR CRN# REF. REMOVED*800128* STB FCRN T.GF2 CPA B54 IS THIS NEXT CHAR. A COMMA? ADDED *800128* RSS YES JMP ERRO6 NO, ERROR ****************************ADDED 791025******************************** JSB T.GCR GET NEXT CHAR. JMP ERRO6 WAS EOL, ERROR CPA B54 IS THIS A COMMA (NO SC THEN) JMP T.GF4 YES, CRN# THEN? JSB STBYT DUMMY IN SC SO CAN USE NAMR FOR PARSE STB T.SEC STORE SECURITY CODE. CPA D10 ANY MORE CHARS.? JMP T.GFI,I ALL DONE. T.GF4 CPA B54 IS THIS A COMMA? RSS YES, CRN# JMP ERRO6 NO, ERROR JSB T.GCR GET NEXT CHAR. JMP ERRO6 EOL, ERROR ISZ FCRN INDICATE CRN REF. JSB STBYT GO PARSE CRN# STB T.CRF STORE CARTRIDGE #. CPA D10 JMP T.GFI,I * CLA,INA,RSS TOO MANY PARAMETERS. ERRO4 LDA D4 NOT ENOUGH PARAMETERS. ERRET STA T.ERN JMP T.GFI,I REPORT THE BAD NEWS. ERRO6 LDA D6 ILLEGAL FORMAT. JMP ERRET ****************************ALTERED 800730************************** ERRCK LDB CHCKR CHECK FOR 1ST TIME THRU SZB,RSS JMP ERRO6 NO, SECOND TIME THEN TRUE ERROR CLB STB CHCKR YES, SET FOR SECOND TIME THRU LDA T.CNT CHECK CHARACTER COUNT SZA,RSS ANY MORE INPUT? JMP ERRO4 NO, NO T ENOUGH PARMS. *800731* LDB SAVE WAS A COMMA REACHED CPB B54 JMP ERRC2 YES, THEN GO GET "ID" ERRC1 JSB T.GCR NO,GO GET NEXT CHAR UNTIL COMMA JMP ERRO4 EOL REACHED SO ERROR *800731* CPA B54 IS IT A COMMA YET? JMP ERRC2 YES, SO GO GET "ID" JMP ERRC1 NO, TRY AGAIN ERRC2 JSB T.GCR GET THE NEXT CHAR FOR LNAME JMP ERRO4 NO MORE? THEN ERROR *800731* JMP GOAGN YES, GET "ID" ******************************800730******************************* CHCKR NOP *************************800728************************************* M5 DEC -5 M2 DEC -2 **800729** * ********************************ADDED 791026************************ * * THIS ROUTINE WILL PACK TOGETHER THE CHARS. PASSED FOR SECURITY * CODE OR CRN#. TO UTILIZE NAMR'S PARSING CAPABILITIES * A DUMMY NAME WITH A : IS PATCHED ONTO THE FRONT * OF THE PACKED SECURITY CODE. IF THE FLAG, FCRN, IS 1 WHICH MEANS * THAT THE NEXT STRING TO BE PARSED IS FOR A CRN# REF, * A DUMMY NAME WITH 2 : IS PATCHED ONTO THE FRONT OF THE PACKED * WORDS. * * UPON ENTRY A= CURRENT CHAR ALREADY CHECKED FOR EOL OR COMMA. * * UPON EXIT, B= THE PARSED SECURITY CODE OR CRN# DEPENDING ON * FCRN. * A= CURRENT CHAR BE IT A EOL OR COMMA * * STBYT NOP CLB,INB SET 1 INTO STSRC STB STSRC THE CHAR POSITION IN STRING LDB D4 RESTORE THE LENGTH WORD STB STLEN LDB FCRN CHECK FOR SC OR CRN# SZB,RSS JMP STBY1 THIS IS A SC LDB STBF1 SETUP FOR NAMR'S SOURCE BUFFER STB STBUF LDB DEST2 THIS A CRN# JMP STBY2 GO PACK STBY1 LDB STBFR SETUP FOR NAMR'S SOURCE BUFFER STB STBUF LDB DEST1 STBY2 JSB .SBT ISZ STLEN STB STSTO JSB T.GCR GET NEXT CHAR. JMP STBY9 GO PARSE CPA B54 IS THIS A COMMA? JMP STBY3 YES, GO PARSE LDB STSTO JMP STBY2 GO GET MORE STBY9 LDA D10 EOL SENSED STBY3 STA STTEM SAVE CURRENT CHAR JSB NAMR DEF STBY4 DEF BYBUF RESULTING BUFFER DEF STBUF,I SOURCE BUFFER DEF STLEN DEF STSRC CHAR POSITION IN STRING STBY4 LDB FCRN SC OR CRN# SZB,RSS JMP STBY5 GET SC IN B FOR RETURN LDB BYBU2,I GET CRN# IN B FOR RETURN RSS STBY5 LDB BYBU1,I SC IN B LDA STTEM RESTORE A WITH CURRENT CHAR JMP STBYT,I * STSTO NOP STTEM NOP BYBUF BSS 10 BYBU1 DEF BYBUF+4 *SC IN NAMR'S BUFFER BYBU2 DEF BYBUF+5 *CRN# IN NAMR'S BUFFER STLEN OCT 4 THIS MUST START AT 4 FOR DUMMY FRONT END STSRC NOP STBUF NOP FCRN NOP * * THE FOLLOWING LABELS MUST STAY IN THIS ORDER * STBFR DEF *+1 ASC 2,DUM: DESBF BSS 10 STBF1 DEF *+1 ASC 2,DU:: DESBR BSS 10 DEST1 DBL DESBF DEST2 DBL DESBR ************************791026************************************* D4 DEC 4 D5 DEC 5 D6 DEC 6 M3 DEC -3 B37 OCT 37 N33 OCT -33 ID ASC 1,ID M10K DEC -10000 D80 DEC 80 SKP * * * CHARACTER PUSHING ROUTINES BY J.T.S. * MODIFIED BY B.J.L. * * * * SUBROUTINE TO DECODE NAME PRAMS * CALLING SEQUENCE * JSB T.NAM * DEF NAME * RETURN A =11 IF ILLEGAL LENGTH OF FILE NAME * =10 IF EOL IS REACHED * =A COMMA * * * NAME, NAME+1, NAME+2 = FILE NAME * NAME+3 = SECURITY CODE * NAME+4 = LOGICAL UNIT * * ENT T.NAM * * T.NAM NOP LDB T.NAM,I GET NAME BUFFER ADDR CLE,SSB,RSS AND STRIP OFF INDIRECTS JMP *+4 ELB,RBR LDB B,I JMP *-4 STB NAMA AND SAVE IT IN NAME PTR ISZ T.NAM INC. FOR RETURN *********************ADDED 791024*********************************** CLB CLEAR CHAR. COUNT AND RESET THE STARTING STB LENTH CHAR. POINTER FOR NAMR STB HERE **800311** LDB .1 STB ISTRC LDB M3 SET UP WORD COUNTER STB DUM3 LDB DEST SET UP SOURCE BUFFER TOP JSB .SBT TO BE PARSED BY NAMR ISZ LENTH INCREMENT CHAR. COUNT STB STORE JSB T.GCR GET THE NEXT CHARACTER JMP MOST EOL!! DONE CPA B72 IS THIS A ":" JMP CHLN YES, SEE IF TOO MANY CHARS. CPA B54 IF COMMA, GO PARSE AND RETURN JMP DONE RETURN TOP1 LDB STORE GO GET MORE JMP TOP *****************CHANGED 800311**************************** CHLN LDB HERE CHECK TO SEE IF FIRST TIME (SECURITY SZB CODE) THRU HERE. JMP TOP1 YES ISZ HERE INDICATE HERE ONCE LDB LENTH CHECK FOR >6 CHARS. **************************800311*************************** ADB M7 SSB IF >6 WILL BE POS. NO-NO!! JMP TOP1 CONTINUE SEARCH ***************************CHANGED 800322************************* CHLN1 LDA .11 INDICATE ILLEGAL FORMAT ERROR JMP T.NAM,I RETURN MOST LDB HERE CHECK TO SEE IF LENGTH AS BEEN SZB TESTED JMP MOST1 YES, GO ON LDB LENTH NO, CHECK LENGTH ADB M7 SSB,RSS IF NEG. OK JMP CHLN1 ELSE ERROR MOST1 LDA D10 INDICATE EOL REACHED. ****************************800322******************************** DONE STA T.NA1 SAVE THE CHAR * JSB NAMR PARSE THE NAME DEF REPT DEF BUFR RESULTING BUFFER DEF NAMBF SOURCE BUFFER DEF LENTH # OF CHARS TO BE PARSED DEF ISTRC CHAR. POSITION IN STRING * * DUE TO THE REQUIREMENT OF NAMR'S RESULTING BUFFER BEING * OF SIZE OF 10 WORDS, THE NAME MUST BE MOVED TO THE OLD * NAME BUFFER IN BASIC FOR CONVERSION EASE. * * REPT LDA DUM1 GET ADDRESS TO RESULTING BUFFER STA POINT REPT1 LDA POINT,I PICK UP RESULTING BUFFER STA NAMA,I MOVE TO NAME IN MAIN WITH ISZ POINT SECURITY CODE AND CRN# ISZ NAMA BEHIND THE 3-WORD NAME ISZ DUM3 SINCE WORD 4 IS TYPE WORD ONLY JMP REPT1 MOVE IN 1ST 3 WORDS ISZ POINT INCREMENT TO SECURITY CODE LDA POINT,I STA NAMA,I ISZ POINT INCREMENT TO CRN# ISZ NAMA LDA POINT,I STA NAMA,I LDA T.NA1 RESTORE LAST CHAR. JMP T.NAM,I * T.NA1 NOP NAMA BSS 1 BUFR BSS 10 DUM1 DEF BUFR POINT NOP HERE NOP ISTRC NOP LENTH NOP STORE NOP DUM3 NOP DEST DBL NAMBF NAMBF BSS 14 .1 DEC 1 D10 DEC 10 .11 DEC 11 *****************************791024********************************* * ADB D3 SET UP * STB SC SECURITY CODE PTR * INB SET UP * STB LU LOGICAL UNIT PTR * STA TEMP2 SAVE CURRENT CHAR * CLA GET A ZERO * STA SC,I AND CLEAR SC AND LU * STA LU,I * LDA B72 SET DELIMITER TO ":" * STA T.DLM * LDA TEMP2 RECALL CURRENT CHAR * JSB LNAME GET NAME...A REG 0,IGNORE SPACES *NAMA DEF 0 BUFFER WHERE TO PUT NAME * DEC -7 MAX LENGTH + 1 * SPC 2 * AT THIS POINT WE HAVE MOVED THE NAME IN * SPC 1 * JMP T.NAM,I * JSB CHRCK CHECK FOR END OF LINE * JMP NRET YES...TERMINATE ROUTINE * JSB T.GTN GET NUMBER * RSS NOT NUMERIC * JMP NMDCD NUMERIC SAVE SC CODE * JSB CHRCK CHECK FOR DELEM. * JMP T.NAM,I END OF LINE * JMP NMDCE NO SECURITY CODE * ALF,ALF SHIFT TO HIGH ORDER * STA SC,I SAVE TOP HALF SC,IURITY CODE * JSB T.GCR GET NEXT CHAR * LDA D10 * STA 1 SAVE CHAR * JSB CHRCK TERMINATOR * NOP EOF...SET FOR SPACE * LDA BLANK GET A SPACE * IOR SC,I OR IN BOTTOM HALF OF SC,IURITY WORD * STA SC,I SAVE COMPLETE SECURITY CODE * LDA 1 GET CHARACTER AGAIN * JSB CHRCK ARE WE DONE? * JMP NRET YES...RETURN * JMP NMDCF YES...GO PROCESS LU * JSB T.GCR GET ANOTHER CHARACTER * LDA D10 EOF! * RSS NO...CHECK NEXT CHAR...MUST BE A ":" *NMDCD STB SC,I SAVE NUMERIC SECUITY CODE *NMDCE JSB CHRCK CHECK FOR TERMINATOR * JMP NRET DONE * RSS CONTINUE...GOT A : * JMP T.NAM,I INVALID FILE NAME * SPC 2 * WE NOW HAVE PROCESSED THE NAME AND SECURITY CODE * NOW WE ARE GOING TO PROCESS LU * SPC 1 *NMDCF JSB T.GTN GET NUMBER * JMP T.NAM,I NOT A NUMBER * STB LU,I SAVE LU,I VALU,IE *NRET ISZ T.NAM NORMAL RETURN. * JMP T.NAM,I * D3 DEC 3 D43 DEC 43 B72 OCT 72 SKP * * * SUBROUTINE TO GET A FLOATING POINT NUMBER * CONVERT IT, AND RETURN IT IN THE B REG * CALLING SEQUENCE * JSB T.GTN * UNABLE TO CONVERT RETURN * CONVERTED RETURN * B REG=NUMBER, A REG = NEXT CHAR * * ENT T.GTN * * T.GTN NOP JSB T.GCR GET NEXT CHAR LDA D10 CPA D10 EOF? JMP T.GTN,I YES, RETURN CLB,CLE CLEAR E AND B REG STB TEMP1 CLEAR OUT SUM WORD STB TEMP2 CLEAR OUT DIGIT RECIEVED WORD CPA D43 IS IT A "+" CCE SET E=READ ANOTHER CHAR CPA D45 IS IT A "-" CCB,CCE SET B=-1, SET E=READ ANOTHER CHAR STB SIGN SAVE SIGN SEZ,RSS READ ANOTHER CHAR? JMP *+3 NO! GTNMA JSB T.GCR YES LDA D10 EOF! JSB DIGCK GO SEE IF DIGIT IS NUMERIC JMP GTNMB NOT NUMERIC...DONE CONVERSION LDA TEMP1 GET PARTICAL SUM IN A REG STB TEMP1 DIGCK RETURN NUMBER IN BOTH A AND B REG MPY D10 MULTIPLY PARTICAL SUM BY 10 ADA TEMP1 AND IN NEXT DIGIT STA TEMP1 SAVE NEW SUM ISZ TEMP2 SET FOR RECIEVED A DIGIT JMP GTNMA GET NEXT DIGIT SPC 1 GTNMB LDB TEMP2 DID WE GET ANY DIGITS? SZB,RSS JMP T.GTN,I NO LDB SIGN GET SIGN CLE,ERB IF NEGATIVE, SET E REG LDB TEMP1 GET BINARY VALUE SEZ NEGATIVE VALUE? CMB,INB YES...NEGATE RESULT ISZ T.GTN GET DIGIT RETURN JMP T.GTN,I RETURN * SIGN BSS 1 D45 DEC 45 N72 OCT -72 B EQU 1 SKP * * * SUBROUTINE TO CHECK IF A CHARACTER IS * A NUMERIC DIGIT. * * CALLING SEQUENCE: * * LDA CHAR * JSB DIGCK * NOT NUMERIC RETURN A=CHAR * NUMERIC RETURN A=CHAR, B=DIGIT * * DIGCK NOP STA B ADB N72 SSB,RSS JMP DIGCK,I ADB D10 SSB,RSS ISZ DIGCK JMP DIGCK,I * * SPC 2 * * SUBROUTINE TO CHECK IF A CHARACTER IN THE A REG * ISEITHER AN END OF LINE "D10" OR A : "B72" * CALLING SEQUENCE * JSB CHRCK * END OF LINE RETURN * COLEN RETURN * NEITHER RETURN * A REG CONTAINS THE CHARACTER * B AND E REG NOT CHANGED * CHRCK NOP CPA D10 IS IT END OF LINE? JMP CHRCK,I YES...EOL RETURN CPA B54 IS IT A ","? JMP CHRCK,I YES...TREAT AS A EOL ISZ CHRCK CPA T.DLM IS IT A ":" JMP CHRCK,I ":" RETURN ISZ CHRCK JMP CHRCK,I NO DELM RETURN * T.DLM BSS 1 B54 OCT 54 SKP * * ROUTINE TO MOVE NAME INTO NAME BUFFER * CALLING SEQUENCE * JSB LNAME * DEF BUFFER ADDRESS WHERE TO STORE NAME * DEC -MAX # OF CHARACTERS +1 * RETURN ERROR * RETURN+1 A REG = DELIMITER CHAR * LNAME NOP STA TEMP5 SAVE CURRENT CHAR ***************************ADDED 800322**************************** CLA STA LENT1 ***************************800322********************************** LDB LNAME,I GET ADDRESS OF NAME BUFFER ISZ LNAME GET TO NEXT PARM CLE,ELB CONVERT TO BYTE ADDRESS STB TEMP1 SAVE BYTE ADDRESS CLE,ERB GET BACK ACTUAL ADDRESS LDA LNAME,I GET MAX LENGTH +1 SLA INA ARS GET MAX LENGTH IN WORDS STA TEMP2 SAVE FOR DOWN COUNTER LDA SPACE STUFF BLANKS INTO THE LN1 STA 1,I NAME BUFFER FOR THE INB ISZ TEMP2 MAXIMUM LENGTH. JMP LN1 LDA LNAME,I STA TEMP2 ISZ LNAME LDA TEMP5 GET CURRENT CHAR LMDCD ISZ LENT1 GET CHAR COUNT, 1ST CHAR *800322* JSB CHRCK CHECK FOR DELIMETER NOP JMP LNRE1 HIT ONE *800322* LDB TEMP1 GT BYTE ADDRESS JSB SBYTE SAVE CHARACTER JSB T.GCR GET NEXT CHARACTER LDA D10 CPA D10 EOF? JMP LNRET YES, RETURN! ISZ TEMP1 GET NEXT CHAR ADDRESS ISZ TEMP2 OUT OF ROOM? JMP LMDCD NO..CONTINUE JMP LNAME,I INVALID FILE NAME SPC 2 *********************************ADDED 800322************************** LNRE1 LDB LENT1 IF DELIM FOUND DECREMENT COUNTER ADB M1 STB LENT1 ********************************800322********************************* LNRET ISZ LNAME JMP LNAME,I * SPACE ASC 1, LENT1 NOP *800322* * SPC 3 * * SUBROUTINE TO STORE A BYTE * CALLING SEQUENCE * JSB SYBTE * A REG CONTAINS BYTE * B REG CONTAINS BYTE ADDRESS * SBYTE NOP AND B377 MASK ALL BUT LOWER 8 BITS STA TEMP7 SAVE IN TEMP LOCATION CLE,ERB CHANGE FROM BYTE TO WORD ADD LDA 1,I GET WORD SEZ,RSS RIGHT OR LEFT HALF ALF,ALF LEFT AND HIMSK MASK ALL BUT UPPER 8 BITS IOR TEMP7 OR IN NEW BYTE SEZ,RSS LEFT OR RIGHT ALF,ALF LEFT STA 1,I STORE WORD BACK ELB,CLE GET BYTE ADDRESS AGAIN JMP SBYTE,I RETURN * B377 OCT 377 HIMSK OCT 177400 SPC 2 TEMP1 BSS 1 TEMP2 BSS 1 TEMP5 BSS 1 TEMP7 BSS 1 * * * SUBROUTINE TO GET CHARACTER FROM INPUT BUFFER * * CALLING SEQUENCE: * * T.CNT CONTAINS - (CHARACTER COUNT + 1) * T.ADR CONTAINS ADDRESS SHIFTED LEFT ONE BIT * JSB T.GCR * END OF LINE RETURN * NORMAL RETURN * ENT T.GCR ENT T.ADR ENT T.CNT * T.GCR NOP ISZ T.CNT ANY CHARACTERS LEFT? RSS JMP T.GCR,I NO, END-OF-LINE EXIT. LDB T.ADR LOAD BUFFER ADDRESS. ISZ T.ADR UPDATE FOR NEXT TIME. CLE,ERB SET CHARACTER FLAG. LDA 1,I LOAD CURRENT BUFFER WORD. SEZ,RSS FIRST CHARACTER? ALF,ALF YES, POSITION IT. AND B177 MASK EXTRANEOUS BITS. SZA,RSS END OF LINE? JMP T.GCR,I YES IF ZERO. CPA BLANK BLANK? JMP T.GCR+1 YES,FETCH NEXT CHARACTER. ISZ T.GCR UPDATE RETURN ADDRESS. JMP T.GCR,I EXIT. * BLANK OCT 40 B177 OCT 177 T.CNT BSS 1 T.ADR BSS 1 * END