TITLE COMCSS - COMMAND COMMON ROUTINES SUBTTL T. HASTINGS 8-15-65 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING ; IN COMMAND LINE (SIXBIT) ; CALL: MOVE TAC, BYTE POINTER TO FIRST CHAR.-1 ; PUSHJ PDP, CTEXT ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1 INTERNAL CTEXT, CTEXT1 T=BUFPNT ;TEMPORARY ACS T1=BUFWRD T2=UUO CTEXT1: MOVEI TAC1, 0 ;CHECK PREVIOUS BREAK CHAR. LDB T, TAC CAIN T, 15 ;RETURN IF CR. POPJ PDP, CTEXT: PUSHJ PDP, SKIPS ;SKIP LEADING SPACES, TABS MOVE T,[POINT 6,TAC1] MOVEI TAC1, 0 LDB T1, TAC JRST CTEX1 CTEX0: ILDB T1,TAC CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC POPJ PDP, ;NO. EXIT TRC T1,40 ;CONVERT TO SIXBIT IDPB T1,T ;YES, STORE AWAY CAME T,[POINT 6,TAC1,35] ;SIX CHARACTER YET JRST CTEX0 ;NO CTEX2: ILDB T1, TAC ;YES PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC POPJ PDP, ;NO, EXIT JRST CTEX2 ;SCAN FOR ALPHANUMERIC CHAR IN T1 CTEX: CAIL T1, "0" CAILE T1, "Z" ;LETTERS ARE LARGER THAN NOS. POPJ PDP, ;NEITHER CAILE T1, "9" CAIL T1, "A" AOS (PDP) ;LETTER OR NUMBER POPJ PDP, ;ROUTINE TO IGNORE LEADING SPACES AND TABS ;CALL: MOVE TAC, BYTE POINTER TO CHAR. ; PUSHJ PDP, SKIPS1 INTERNAL SKIPS1 SKIPS1: LDB T, TAC JRST SKIPSA ;ROUTINE TO IGNORE LEDING SPACES AND TABS ;CALL: MOVE TAC, BYTE POINTER TO CHAR.-1 ; PUSHJ PDP, SKIPS INTERNAL SKIPS SKIPS: ILDB T, TAC SKIPSA: CAIE T, " " CAIN T, 11 JRST SKIPS POPJ PDP, ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING ; PUSHJ PDP, COMERA INTERNAL COMERA COMERA: IBP TAC ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?" ;AND SET AS OUTPUT ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING ; PUSHJ PDP, COMERR INTERNAL COMERR EXTERNAL TTYBUF COMERR: MOVE DAT,TAC MOVEI T,TTYBUF(DEVDAT) ;IS THERE MORE THAN 3 WORDS I CAIGE T,-3(DAT) HRRI DAT,3(T) ;YES, TYPE ONLY 3 MOVEI T, "?" ;APPEND "?" DPB T, DAT JSP TAC,CONMES ASCIZ / MONITOR COMMAND ERROR / ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT ; PUSHJ PDP,CRLF INTERNAL CRLF CRLF: MOVEI TAC,[ASCII / /] ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER ; MOVEI TAC, ADDRESS OF ASCII MESSAGE` ; PUSHJ PDP, CONMES ; STRING TERMINATED BY NULL ; CONMES DOES NOT START TTY INTERNAL CONMES CONMES: PUSH PDP, TAC1 HRLI TAC, 440700 ;FORM BYTE POINTER CON0: ILDB TAC1, TAC JUMPE TAC1, CON1 IDPB TAC1, DAT JRST CON0 CON1: POP PDP, TAC1 POPJ PDP, ;ROUTINE TO PRINT "TO FEW ARGUMENTS" ;CALL: MOVE DAT,BYTE POINTER ; PUSHJ PDP,NOTENF INTERNAL NOTENF NOTENF: JSP TAC,CONMES ASCIZ /TOO FEW ARGUMENTS / ;ROUTINE TO INITIALIZE A JOB ;CALL: MOVE ITEM, JOB NUMBER ; PUSHJ PDP, JOBINI ; DEVDAT IS SETUP ON RETURN INTERNAL JOBINI,JOBZER EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT JOBINI: JUMPN ITEM,JOB0 ;HAS A JOB NUMBER BEED ASSIGNED? PUSHJ PDP,ASSJOB ;NO, THEN ASSIGN ONE. JRST CONMESS ;NONE LEFT JOB0: PUSHJ PDP,TTYATT ;ATTACH TTY JFCL ;ALREADY ATTACHED MOVSI TAC,JNA ;CLEAR JOB NO. ASSIGNED BIT ANDCAM TAC,JBTSTS(ITEM) ;TO FORCE MESSAGE MOVSI TAC,646471 ;SIXBIT /TTY/ MOVEM TAC, DEVLOG(DEVDAT) ;SET LOGICAL NAME MOVEI T, ASSCON ;SET ASSIGNED BY CONSOLE BIT IORM T, DEVMOD(DEVDAT) PUSHJ PDP, DEASTY ;DE-ASSIGNED ALL DEVICES EXCEPT TTY JUMPE JDAT,CPOPJ ;DOES JOB ALREDY HAVE CORE? ;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE ;RUN AS MONITOR JOB ;CALL: SAME AS JOBIN EXTERNAL IOKILL JOBZER: HRRI TAC1,JOB1 ;ADDRESS OF SUB. TO RELEASE DEV. JOBZR1: HRLI TAC1, ESTOP ;RETURN ADDRESS AFER IORELS JRST MONJOB ;GO SCHEDULE MONITOR JOB JOB1: PUSHJ PDP,IOKILL ;KILL ALL IO DEVICES MOVEI TAC,0 ;FLUSH ALL CORE SOS (PDP) ;CORE1 WILL SKIP RETURN JRST CORE1 ;ROUTINE TO KILL CURRENT JOB ;CALL PUSHJ PDP,JOBKIL INTERNAL JOBKIL EXTERNAL JBTSTS,TTYKIL JOBKIL: AOS (PDP) ;SUPRESS CR-LF AND JOB INIT. CHECK MOVEI TAC,1 PUSHJ PDP,DEASAL ;DEASSIGN ALL DEVICES JUMPE JDAT,JOBKA ;DOES JOB HAVE CORE? HRRI TAC1,JOBK2 ;YES,RELEAS DEVICE AND CLEAR JRST JOBZR1 JOBK2: PUSH PDP,DEVDAT ;SAVE DEVDAT FOR TTYKIL PUSHJ PDP,JOB1 ;FLUSH CORE AND RELEASE DEVICES POP PDP,DEVDAT JOBKA: MOVSI TAC,JERR ;CLEAR ALL BUT JOB ERROR BIT MOVEM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD JRST TTYKIL ;RETURN TTY TO VIRGIN STATE ;ROUTINE TO ASSIGN AN UNUSED JOB NUMBER ;CALL PUSHJ PDP,ASSJOB ; ERROR RETURN TAC DESTROYED ; OK RETURN ITEM SET, TAC AND TAC1 PRESERVED INTERNAL ASSJOB EXTERNAL MJOBN,JBTSTS,CPOPJ1 ASSJOB: MOVSI ITEM,MJOBN AOBJN ITEM,.+1 MOVSI T1,JNA TDNE T1,JBTSTS(ITEM) AOBJN ITEM,.-1 JUMPGE ITEM,ASSJB1 ANDI ITEM,-1 JRST CPOPJ1 ASSJB1: JSP TAC,CONMES ASCIZ /JOB CAPACITY EXCEEDED / ;ROUTINE TO DEASSIGN A DEVICE ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK ; MOVE ITEM, JOB NUMBER ; PUSHJ DPD, DEASG ; ERROR NOT PREVIOUSLY ASSIGNED ; OK RETURN WITH DEVICE DEASSIGNED INTERNAL DEASG EXTERNAL PJOBN, CPOPJ1 DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB? CAME T, ITEM POPJ PDP, ;NO. RETURN MOVSI T,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT ANDCAM T,DEVMOD(DEVDAT) MOVEI T, ASSCON ;YES, IS ASSIGNED BY CONSOLE BIT ON? TDNN T, DEVMOD(DEVDAT) POPJ PDP, ;NO ANDCAB T,DEVMOD(DEVDAT) ;YES, CLEAR BIT SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME TRNE T, ASSPRG ;IS ASSIGNED BY PROGRAM BIT ON? JRST CPOPJ1 ;YES MOVEI T,0 ;NO, CLEAR JOB NUMBER DPB T, PJOBN JRST CPOPJ1 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY ;CALL: MOVE ITEM, JOB NUMBER ; PUSHJ PDP, DEASTY INTERNAL DEASTY DEASTY: MOVSI TAC, 646471 ;SIXBIT /TTY/ ;FALL INTO DEASAL ;ROUTINE TO DEASSIGN ALL DEVICES EXECPT ONE ;CALL: MOVE ITEM, JOB NUMBER ; MOVE TAC, LOGICAL DEVICE NOT TO BE DEASSIGNED ; PUSHJ PDP, DEASAL INTERNAL DEASAL EXTERNAL DEVLST DEASAL: PUSH PDP,DEVDAT HLRZ DEVDAT,DEVLST ;SEARCH ALL DDBS DEA1: CAME TAC, DEVLOG(DEVDAT) ;IS THIS THE LOGICAL NAME PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT JFCL ;IGNORE IF CANT HLRZ DEVDAT, DEVSER(DEVDAT) JUMPN DEVDAT, DEA1 POP PDP,DEVDAT POPJ PDP, ;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER ; CALL: MOVE TAC1, DESIRED RADIX ; MOVE TAC, BYTE POINTER TO FIRST CHRACTER ; PUSHJ PDP, ANYRIN ; ERROR EXIT ;AC TAC1=0 IF NO NUMBER BEFORE FIRST NO ; NORMAL EXIT ;AC TAC1 CONTAINS NUMEBR ; SCAN STOPS ON FIRST ILLEGAL CHARACTER OR CR ; IGNORES SPACES, TABS, RUBOUTS INTERNAL OCTIN,ANYRIN,DECIN,DECIN1 EXTERNAL CPOPJ1, CPOPJ C=BUFPNT ;CHARACTER AC R=BUFWRD ;RADIX AC DECIN1: IBP TAC ;SKIP SEPARATION CHARACTER DECIN: MOVEI TAC1,12 ;DECIMAL INPUT JRST ANYRIN OCTIN: MOVEI TAC1, 10 ANYRIN: MOVE R, TAC1 MOVEI TAC1, 0 PUSHJ PDP, SKIPS1 ;SKIP LEADING SPACES, TABS LDB C, TAC CAIN C, 15 ;CHECK FOR INITIAL CR POPJ PDP, ;EXIT WITH 0 IN TAC1 OCT0: CAIE C,"-" ;DASH? CAIN C,15 ;CR? JRST CPOPJ1 ;YES, ONLY LEGAL TERMINATORS SUBI C,60 JUMPL C, OCTE ;ERROR IF NEGATIVE CAML C, R ;OR .GE. RADIX OCTE: AOJA TAC1,CPOPJ ;ERROR,INSURE TAC1 NON-ZERO IMUL TAC1, R ADD TAC1, C OCT1: ILDB C, TAC JRST OCT0 END,