FTN,Q,C SUBROUTINE NUMB(IBUF,IRBUF,IFLG,IERFG),09580-16072 REV.2001 791015 C------------------------------------------------------------------- C C RELOC. 09580-16072 C SOURCE 09580-18072 C C C. LEATH REV.A 770504 C C HP 92425A TEST SYSTEM SOFTWARE IS THE PROPRIETARY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND C DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C C------------------------------------------------------------------- DIMENSION IBUF(40) DIMENSION IRBUF(10) DIMENSION INBUF(2) EQUIVALENCE(INBUF,AFLT) DATA IPLUS,MINUS/53B,55B/ DATA IDPT,IEXP/27000B,42400B/ C C SUBROUTINE # 9 FOR DBUG C C THIS SUBROUTINE IS RESPONSIBLE FOR ANALYSING A C NUMERIC FIELD, DETERMINING WHETHER THE NUMBER C IS OCTAL, INTEGER OR FLOATING POINT. THE STRING C PROCESSING ROUTINES UTILIZED IN THIS ROUTINE C ARE: C C INTV: ASCII TO INTEGER OR OCTAL C A2F: ASCII TO FLOATING POINT C AN ILLEGAL NUMERIC IS INDICATED TO THE HIGHER C UP ROUTINES BY "IERFG"= -8 C CC*****#1 ASCERTAIN WHETHER A + OR - IS 1ST CHARACTER C 10 CALL DBUG(9,10,IBUF) IFLG = 2 I=1 ICHR = 0 NIN = 0 CALL SCAN(IBUF,IRBUF,NIN,Q) ITST = (IAND(IRBUF(2),177400B))/400B IF(ITST.NE.IPLUS.AND.ITST.NE.MINUS)GO TO 405 CALL SCAN(IBUF,IRBUF,NIN,Q) 405 I= I+1 C CC*****#2 NOW SEE IS NUMBER IS FLOATING PT C IFLT1 = IAND(IRBUF(I),177400B) IFLT2 = IAND(IRBUF(I),177B)*400B IF(IFLT1.EQ.IDPT.OR.IFLT2.EQ.IDPT)GO TO 460 IF(IFLT1.EQ.IEXP.OR.IFLT2.EQ.IEXP)GO TO 460 ICHR = ICHR +2 IF(ICHR.LT.IRBUF(1))GO TO 405 C CC******3 INTEGER OR OCTAL C IRBUF(2) = INTV(IRBUF,IFL) IF(IFL.EQ.-1)GO TO 800 IRBUF(1) = 1 IF(ITST.EQ.MINUS)IRBUF(2) = -IRBUF(2) RETURN C CC******4 FLOATING POINT C 460 IFLT = A2F(IRBUF,1,IRBUF(1),INBUF(1)) IF(IFLT.LT.0)GO TO 800 IF(ITST.EQ.MINUS)AFLT = -AFLT DO 475 I = 1,2 475 IRBUF(I+1) = INBUF(I) IRBUF(1) = 2 RETURN 800 IERFG= -8 RETURN END SUBROUTINE CNTR(ITOKN,IERFG,IND) C C SUBROUTINE # 11 FOR DBUG C DIMENSION ICNT(128) DATA MSK1,MSK2/177400B,377B/ C C THIS SUBROUTINE KEEPS TRACK OF THE UNIT NUMBERS C AND DEVICE TYPE NUMBERS AND REPORTS ANY DUPLICATES C IN IERFG. C C THE PARAMETERS IN THE CALLING SEQUENCE HAVE THE FOLLOWING C MEANINGS: C ITOKN = THE UNIT OR DEVICE TYPE NUMBER C IERFG = ERROR FLAG WHERE: -14 = DUPLICATE DEVICE TYPE C -15 = DUPLICATE UNIT NUMBER C IND = BRANCHING INDICATOR C WHERE IND = 1 MEANS TO CHECK FOR DUPLICATE UNIT #S C " = 2 " " CHECK FOR DUPLICATE DEVICE TYPE NUMBERS C C ICNT IS THE BUFFER CONTAINING THE BOOKEEPING INFOR- C MATION WITH EACH WORD LOOKING LIKE : C ----------------------------------- C !IDTN (BITS 8-15) ! UNIT # BITS 0-7! C ------------------------------------ C C 10 CALL DBUG(11,10,IND) GO TO(200,100),IND C C NEW RECORD - FIRST CLEAR UNIT COLUMN C 100 DO 120 I= 1,128 120 ICNT(I) = IAND(ICNT(I),MSK1) C C CHECK FOR DUPLICATE IDTN C IDCHK = ITOKN * 400B DO 140 I = 1,128 ICHK = IAND(ICNT(I),MSK1) IF(ICHK.EQ.IDCHK)GO TO 150 IF(ICHK.EQ.0)GO TO 145 140 CONTINUE 145 ICNT(I) = IDCHK RETURN 150 IERFG = -14 RETURN C C CHECK FOR DUPLICATE UNIT# C 200 DO 240 I=1,128 IUCHK = IAND(ICNT(I),MSK2) IF(IUCHK.EQ.ITOKN)GO TO 250 IF(IUCHK.EQ.0)GO TO 245 240 CONTINUE 245 ICNT(I) = IOR(ITOKN,ICNT(I)) RETURN 250 IERFG = -15 RETURN END END$