/ / / / / / / / / / /COPYRIGHT (C) 1978,1979 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / /VERSION=1 / .TITLE SUBROUTINE UQUES /THIS ROUTINE GENERATES THE USER VERSUS SYSTEM QUESTION /NUMBER, AND MAINTAINS TQUES. IT INSERTS THE NUMBER IN /THE HEADER OF THE RECORD. A CHECK IS MADE FOR I TYPE /AND N TYPE RECORDS AND NO ACTION IS TAKEN IF EITHER I /OR N. R RECORDS ARE ALSO IGNORED. .RSECT UQUES .ENTRY UQ .EXTERNAL OVRPTR,QUES,CFLAG,UNPAC,UNP1,PCKPTR,EQUES,RECLOC,EANS,ANSPTR .EXTERNAL PCK,TABLE1,TYPE,QUEPTR,TOVER,MAIN12,UNPACK,IQUES,CLOC .EXTERNAL NUMPTR,TNUM,ENUM,TASCI,EASCI,ASCPTR,TTYPTR UQ, 0 CLA TAD (CIF CDF) RDF CDF .FLD DCA UQ20 /SETUP FOR RETURN CDF TABLE1 TAD RECLOC TAD OVRPTR DCA UQ60 /CALCULATE DISPLACEMENT INTO TOVER OF /RECORD AND STORE AHEAD AS PARAMETER FOR /UNPACK CALL CDF .FLD CIF UNP1 JMS I UQ1 UQ60, TOVER-1 /SOURCE BUFFER UNPACK-1 /TARGET BUFFER 4 /NUMBER OS/8 FORMAT WORDS TO UNPACK /UNPACK THE SYSTEM QUESTION NUMBER CDF TABLE1 TAD CFLAG SZA /CHECK IF CFLAG IS SET JMP UQ4 /IF CFLAG IS SET, GO FIND SYSTEM /QUESTION NUMBER ENTRY IN TQUES /AND DELETE ANY SEQUENTIAL /ENTRIES UQX, TAD OVRPTR TAD RECLOC DCA 10 /POINT TO THE RECORD OVERLAY /AREA TAD TYPE CIA DCA UQ2 /GET MINUS TYPE AND STORE TAD UQ2 TAD (311 SNA JMP UQ30 /IS IT AN I TYPE? TAD (322-311) SNA JMP UQ40 /IS IT AN R TYPE? TAD (316-322) SNA JMP UQ30 /IS IT A N TYPE? TAD (324-316) SNA JMP UQ30 /T TYPE SUBROUTINE REQUESTED? CLA TAD IQUES SZA JMP UQ50 /IF QUESTION IS BEING REPEATED DUE TO /? USER RESPONSE, DO NOT INCREMENT USER /QUESTION NUMBER TAD CFLAG SNA JMP UQY CLA DCA CFLAG JMP UQ7 /DONT INCREMENT USER NUMBER DURING CHANGE UQY, CLA /STANDARD QUESTION TYPE. ASSIGN USER NUMBER ISZ UNITS TAD UNITS TAD (-272 SMA JMP UQ5 /INCREMENT UNITS COUNTER AND /CHECK FOR OVERFLOW UQ50, CLA DCA IQUES /RESET ? FLAG UQ7, CLA CDF TABLE1 TAD HUND DCA I 10 TAD TENS DCA I 10 TAD 10 DCA 11 /SAVE CURRENT POINTER TO TOVER TAD I 10 AND (7400 /PRESERVE PART WORD OF SCRIPT TAD UNITS DCA I 11 /PUT THE USER QUESTION NUMBER /IN THE SCRIPT. TAD TTYPTR DCA 10 ISZ 10 /POINT TO TTTY+1 TAD HUND DCA I 10 TAD TENS DCA I 10 TAD UNITS DCA I 10 /MOVE DECIMAL ASCII NUMBER TO TTY BUFFER TAD (3 JMS DEC /GO CONVERT TO BINARY TAD QUEPTR DCA 10 /POINT IN TQUES TO DISPLACEMENT /QUESTION NUMBER TAD QUES DCA I 10 /PUT SYSTEM QUESTION NUMBER /THERE UQ20, 0 JMP I UQ UQ1,UNP1 /LINK TO UNPACK ROUTINE UQ2,0 UNITS, 260 /0 TENS, 260 /0 HUND, 260 /0 UQ6, 0 /USER QUESTION NUMBER PAGE UQ40, CLA /HERE FOR REMARK RECORD TYPE. /ASSIGN ZERO USER QUESTION NUMBER DCA I 10 DCA I 10 /INSERT TWO ZEROS AT HEAD OF RECORD TAD 10 DCA 11 /SAVE AUTOINDEX TO CURRENT LOCATION TAD I 10 AND (7400 /NULL OUT LAST SYSTEM NUMBER CHARACTER /PRESERVE FIRST HALF OF SCRIPT CHARACTER DCA I 11 /STORE FOR OUTPUT JMP UQ20 /RETURN NORMAL PATH FOR TTY OUTPUT UQ5, CLA CDF .FLD TAD (260 /ZERO UNITS DCA UNITS ISZ TENS /INCREMENT TENS TAD TENS TAD (-272 /CHECK FOR OVERFLOW (OCTAL NUMBER) SPA JMP UQ7 /RETURN TO ROUTINE CLA TAD (260 /ZERO TENS DCA TENS ISZ HUND /INCREMENT HUNDREDS JMP UQ7 /RETURN TO ROUTINE UQ4, CLA /HERE WHEN CFLAG IS SET /CHANGE QUESTION HAS OCCURRED AND /TIME TO ZERO USER QUESTION /TABLE BEYOND THIS POINT /IN THE BUILD JMP UQQ /GO UPDATE ASCPTR, NUMPTR TO IGNORE /PREVIOUS ANSWERS PRIOR TO # FUNCTION UQQ21, TAD QUEPTR TAD CLOC DCA 10 /POINT TO USER QUESTION NUMBER /WHICH IS ALREADY CHANGED BY /GETREC ISZ 10 /GO BEYOND CURRENT QUESTION UQ10, CLA DCA I 10 TAD 10 IAC CIA TAD UQ11 /UQ11 CONTAINS POINTER TO END /OF TQUES TABLE. SMA JMP UQ10 /CONTINUE ZEROING TIL END /OF TABLE CLA TAD CLOC CDF .FLD HUND1, TAD (-144 SPA JMP TENS1 ISZ HUND2 SNA JMP REA /NUMBER IS EVEN MULTIPLE OF 64 JMP HUND1 /GET NO. OF HUNDREDS TO FORM NEW USER /QUESTION NUMBER TENS1, TAD (144 TENS3, TAD (-12 SPA JMP UNIT1 ISZ TENS2 SNA JMP REA JMP TENS3 /GET NUMBER OF TENS UNIT1, TAD (12 DCA UNIT2 /REMAINDER IS UNITS REA, TAD HUND2 TAD (260 DCA HUND /FOR NEW ASCII NUMBER FOR HUNDREDS TAD TENS2 TAD (260 DCA TENS /FORM TENS ASCII CHARACTER TAD UNIT2 TAD (260 DCA UNITS /FORM UNITS ASCII NUMBER DCA HUND2 DCA TENS2 DCA UNIT2 /ZERO TALLY FOR NEXT PASS CDF TABLE1 TAD OVRPTR TAD RECLOC DCA 10 /10 POINTS AT NEW RECORD LOCATION JMP UQX UQ30, CDF .FLD TAD UQ20 /HERE WHEN RECORD IS NOT OUTPUTTED TO TTY DCA .+1 0 JMP I UQ31 UQ31,MAIN12 /MAIN12 ENTRY AVOIDS TTY OUTPUT UQ11, EQUES /POINTER TO END OF TQUES TABLE UQ46,EANS /POINTER TO END OF TANS TABLE UQ47,0 /SAVE AREA FOR USER QUESTION NUMBER HUND2,0 TENS2,0 UNIT2,0 DEC, 0 /HERE TO CONVERT DECIMAL ASCII TO BINARY CIA DCA DEC10 /STORE NUMBER OF PASSES CDF TABLE1 TAD TTYPTR IAC DCA 10 /POINT TO TTY BUFFER DEC2, DCA DECNUM TAD DECNUM CLL RTL /CURRENT RESULT X 4 TAD DECNUM /NUMBER X 5 CLL RAL TAD I 10 /ADD NEXT CHARACTER TAD (-260 /STRIP BASE ISZ DEC10 JMP DEC2 /CONTINUE JMP I DEC /AC CONTAINS ANSWER DECNUM,0 /PARTIAL RESULT STORAGE DEC10,0 /COUNTER FOR NUMBER OF PASSES PAGE UQQ, 0 TAD CLOC TAD QUEPTR DCA 10 /POINT TO NEW CURRENT ENTRY IN TQUES UQQ2, TAD I 10 SNA JMP UQQ3 /ZERO MEANS ALL SEQUENTIAL ENTRIES AFTER /CURRENT HAVE BEEN ZEROED TAD ANSPTR DCA 11 TAD 11 DCA 12 /SET TWO AUTOINDEX REG TO POINT TO ANSWER /TO BE ZEROED TAD I 11 TAD (-3 /IS ANSWER A YES/NO TYPE? SMA JMS NUMASC /NO. SEARCH FOR NEW CURRENT POINTER TO /TNUM OR TASCI UQQ1, CLA DCA I 12 /ZERO ENTRY IN TANS JMP UQQ2 /CONTINUE TIL ALL ENTRIES HAVE BEEN ZEROED UQQ3, CLA DCA AFLG DCA NFLG JMP UQQ21 NUMASC, 0 TAD (3 DCA UQQ7 TAD TNUM1 CIA TAD UQQ7 SPA JMP UQQ20 /IS POINTER GREATER THAN TNUM? TAD TNUM1 /YES, REFORM POINTER CIA TAD ENUM1 SPA JMP UQQ20 /IS POINTER LESS THAN ENUM? CLA /YES, MAKE THIS THE NEW POINTER IF FIRST TAD NFLG SZA /IS IT FIRST? JMP UQQ40 /NO GET OUT ISZ NFLG TAD UQQ7 DCA NUMPTR JMP UQQ40 /SET NEW TNUM POINTER AND RETURN UQQ20, CLA /NOT TNUM POINTER, TRY FOR TASCI TAD TASC1 CIA TAD UQQ7 SPA JMP UQQ40 /POINTER GREATER THAN TASCI? TAD TASC1 CIA TAD EASC1 SPA JMP UQQ40 /POINTER LESS THAN EASCI? CLA /YES, SET AS NEW ASCPTR IF FIRST TAD AFLG SZA /FIRST? JMP UQQ40 /NO,GET OUT ISZ AFLG TAD UQQ7 DCA ASCPTR /SET AS NEW POINTER UQQ40, CLA JMP I NUMASC AFLG,0 NFLG,0 TNUM1, TNUM-1 /NUMBER TABLE START ENUM1, ENUM-1 /NUMBER TABLE END TASC1, TASCI-1 /ASCII TABLE START EASC1, EASCI-1 /ASCII TABLE END UQQ7, 0 /CURRENT ANSWER POINTER