|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6452 (0x1934)
Notes: pts_type(SC)
Names: »TNDPAY.SC«
└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
└─⟦this⟧ »PTSDEMO/TNDPAY.SC«
IDENT TNDPAY REL=9.2 VER=ND 80-004-14 UPD 3 80-04-14 / BORO TND BLOCKED TEST CHANGED & TND RELEASED AFTER REPORT UPD 2 80-02-07 / BORO REPEAT LAST DISPENSE UPD 1 80-02-05 / BORO ADD SEPARATE DELIVER FUNCTION * * NAME: TNDPAY * * PURPOSE: DISPENSE MONEY IN MAX SIZE BUNDLES WHEN TND * OPEN-NORMALLY USED FOR BANK TRANSACTIONS * * CALL: PERF TNDPAY,AMT,TND,TNDWB1,TNDWB2,TNDWB3,TNDWD1,TNDWS1,TNDBUF * RET 0 UNABLE TO PAY * RET 2 PART PAID,CASS. EMPTY OR ERROR * RET 4 TOTAL REQUESTED AMOUNT PAID * * PARAMETERS: * IN: TND-TND DATA SET, INDICATING TELLER TO PAY * TNDWB1 BIN WORK REGISTER * TNDWB2 " * TNDWB3 " * TNDWD1 BCD WORK REGISTER, MINIMUM 7 CHAR PLUS SIGN CHAR * TNDWS1 STRG WORK REGISTER, MINIMUM 5 CHAR * TNDBUF STRG I/O BUFFER, MINIMUM 40 CHAR * OUT: AMT-BCD ELEMENT, UPDATED BY ADDING THE AMOUNT DELIVERED * * VARIABLES * IN: TNDREG(X)-BCD ARRAY, EACH ELEMENT REPRESENTING A CASSETTE * AND CONTAINING NUMBER OF NOTES TO DELIVER * TNDBAD * TNDRCF * TNDREPA * TNDOPF * TNDBLK * CASMAX * MAXOUT * SCRATCH TNDWB1 * TNDWB2 * TNDWD1 * DELAMT * TNDWB3 * TNDST * NDDATA1(KW2,X) * CASEMP * PAYOK * DDUM DEMODD PDIV ENTRY TNDPAY EXPROC IOTND TND I/O SUBROUTINE EXPROC TNDREM CALC. AMT LEFT IN CASSETTE EXPROC NDERR REPORT TO APPL CASSETTE EMPTY EJECT TNDPAY PROC AMT, C TND, C TNDWB1, C TNDWB2, C TNDWB3, C TNDWD1, C TNDWS1, C TNDBUF PBCD AMT PDSET TND PBIN TNDWB1 PBIN TNDWB2 PBIN TNDWB3 PBCD TNDWD1 PSTRG TNDWS1 PSTRG TNDBUF TBT TNDBAD,TNDP00 RET. IF TND BAD TBT TNDRCF,TNDP00 RET. IF REJECT CASS FULL TBT TNDBLK,TNDP00 RET. IF TNDADM FUNC. RUNNING TBT TNDOPF,TNDP10 RET. IF CLOSED TNDP00 RET TND BLOCKED FROM DISPENSE * * DISPENSING ALLOWED, INITIALIZE * TNDP10 CLEAR PAYOK CLEAR CASEMP * * SET UP FOR DISPENSE * TNDP20 MOVE TNDWB3,MAXOUT MOVE DELAMT,KW0 MOVE TNDWB1,KW0 * * TEST IF LOOPED THROUGH CASSETTES * TNDP25 ADD TNDWB1,KW1 CBG TNDWB1,CASMAX,TNDP45 MOVE NDDATA1(KW2,TNDWB1),KW0 * * TEST IF DISPENSE REQUESTED FOR THIS CASSETTE * SUB TNDREG(TNDWB1),='0' BZ TNDP25 * * TEST IF DISPENSE ALLOWED FROPM THIS CASSETTE SUB NDDATA2(KW2,TNDWB1),='0' BNZ TNDP30 SET CASEMP B TNDP25 * * DETERMINE NOTES TO DISPENSE FROM THIS CASSETTE, THIS TIME * TNDP30 MOVE NDDATA1(KW2,TNDWB1),TNDWB3 MOVE TNDWB2,TNDREG(TNDWB1) CBG TNDWB2,TNDWB3,TNDP35 BRANCH IF TOO MUCH MOVE NDDATA1(KW2,TNDWB1),TNDREG(TNDWB1) * * TEST IF ENOUGH LEFT IN CASSETTE * TNDP35 PERF TNDREM,TNDWB1,TNDWD1 CALC. NOTES LEFT IN CASS. SUB TNDWD1,NDDATA1(KW2,TNDWB1) BNN TNDP40 ADD NDDATA1(KW2,TNDWB1),TNDWD1 SUB OVERFLOW BP TNDP40 STILL SOME LEFT MOVE NDDATA2(KW2,TNDWB1),KW0 BLOCK CASSETTE PERF NDERR,KW6 TELL APPL. ABOUT EMPTY CASS. SET CASEMP B TNDP25 NEXT CASSETTE * * UPDATE NO. OF NOTES LEFT TO DISPENSE, THIS TIME * TNDP40 MOVE TNDWB2,NDDATA1(KW2,TNDWB1) SUB TNDWB3,TNDWB2 * * CALCULATE AMOUNT FROM NUMBER OF NOTES MOVE TNDWD1,NOTES(TNDWB1) MUL TNDWD1,NDDATA1(KW2,TNDWB1) ADD DELAMT,TNDWD1 B TNDP25 EJECT * * TEST IF ANYTHING TO DISPENSE * TNDP45 CBE TNDWB3,MAXOUT,TNDP50 * * DISPENSE, IF CASSETTE EMPTY, TRY AGAIN WITHOUT THAT CASSETTE * PERF IOTND,KW3, C TND, C TNDWB1, C TNDWB2, C TNDWB3, C TNDWD1, C TNDWS1, C TNDBUF * BRANCH ON RETURN STATUS: * TND ERROR, TND BLOCKED, CASSETTE EMPTY IB TNDST,TNDPER,TNDPER,TNDP20 * DISPENSE SUCCESSFUL, DELIVER NOTES PERF IOTND,KW4, C TND, C TNDWB1, C TNDWB2, C TNDWB3, C TNDWD1, C TNDWS1, C TNDBUF * BRANCH ON RETURN STATUS: * TND ERROR, TND BLOCKED, POWER FAIL BETWEEN DISPENSE & DELIVER IB TNDST,TNDPER,TNDPER ADD AMT,DELAMT SET PAYOK B TNDP20 EJECT * *DELIVERED WHAT WE COULD, DETACH TND, TEST IF ANYTHING PAID * TNDP50 * * REPORT ANY CASSETTES THAT ARE EMPTY BUT NOT REPORTED * BY "IOTND" BECAUSE DISPENSE WAS SUCCESSFUL * MOVE TNDWB1,KW0 CASSETTE INDEX TNDP52 ADD TNDWB1,KW1 NEXT CASSETTE CBG TNDWB1,CASMAX,TNDP53 BRANCH IF DONE SUB NDDATA2(KW2,TNDWB1),='0' BZ TNDP52 ALREADY REPORTED EMPTY? PERF TNDREM,TNDWB1,TNDWD1 GET AMOUNT REMAINING SUB TNDWD1,=D'0' AMOUNT REMAINING BP TNDP52 NOT EMPTY MOVE NDDATA2(KW2,TNDWB1),KW0 FLAG CASSETTE AS EMPTY PERF NDERR,KW6 REPORT TO APPLICATIONS B TNDP52 NEXT CASSETTE TNDP53 TBT PAYOK,TNDP55 RET * * PAID SOMETHING * TNDP55 TBT CASEMP,TNDPER1 * * PAID ALL * RET 4 EJECT * * ERROR TEST IF ANYTHING PAID * TNDPER TBT PAYOK,TNDPER1 RET * * ERROR BUT PAID PART * TNDPER1 RET 2 PEND END