DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦269852edd⟧

    Length: 17238 (0x4356)
    Notes: pts_type(SC)
    Names: »SUBS.SC«

Derivation

└─⟦cd4bbebb4⟧ Bits:30009680 Philips computer tape "600221"
    └─⟦this⟧ »BEBATM/SUBS.SC« 

PTS(SC)

 IDENT SUBS 830809 NJ 

************************************************************************
*     THIS ROUTINE CONTAINS VARIOUS SUBROUTINES USED WITHIN 
*     THE ATM DEMO PACKAGE T A B S I M. 
************************************************************************

 DDUM DDIV
 PDIV 
 ENTRY LOADER 
 ENTRY TABINT 
 ENTRY SETKL
 ENTRY SEDLER 
 ENTRY BUNT 
 ENTRY LUK


 EXPROC SCRIBE,PFRMT
 EXPROC KBINP 
 EXPROC DLLATM
 EXPROC OPEN
 EXPROC CLOSE 
 EXPROC READ
 EXPROC OPRCMD

 EJECT
LOADER PROC 
* 
* THIS ROUTINE DOWNLINELOADS THE STATES, SCREENS ETC TO THE ATM.
* THE INPUT IS TO RESIDE ON A FLOPPY FILE, CREATED BY THE ATM-
* CONFIGURATOR. INPUT TO THE CONFIGURATOR IS CREATED BY THE 
* NORMAL EDITOR.
* 
LOA010
 MOVE VARIOUS,=C'SPECIFY DLL-FILE (IF NOT "MASTER")... '
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BOK LOA020 
 PERF SCRIBE,WRONG INPUT ERROR
 B LOA010 TRY AGAIN 
LOA020
 MOVE INFO,=C' '
 PERF SCRIBE,INF
 CBNE INDEX,COB1,LOA010 NOT <ENTER> 
 SUB LENGTH,COB1 THROW AWAY ENTER-KEY 
 BNZ LOA025  NOT DEFAULT
 MOVE BUFIN,=C'MASTER ' 
 MOVE LENGTH,COB6 
LOA025
 COPY DSFTABLE(COB1),COB0,COB8,INFO,COB0
 COPY DSFTABLE(COB1),COB0,LENGTH,BUFIN,COB0 CHANGE FILENAME 
 COPY DSFTABLE(COB1),COB8,COB6,VOLUME,COB0
 CLEAR EOF
 PERF OPEN,COB1,WKB1 OPEN SOURCEFILE
 BOK LOA030 
 MOVE VARIOUS,=C'ASSIGNERROR '
 PERF SCRIBE,VARIUS 
 B LOA990 EXIT
* 
LOA030			FILE IS NOW OPENED 
 MOVE WKSTR7,=C'2' TAKE ATM OUT OF SERVICE
 PERF OPRCMD SEND, + RCV SOLL.STAT
 BNOK LOA030 TRY AGAIN
 MOVE VARIOUS,=C'* DOWNLINELOAD IN PROGRESS * ' 
 PERF SCRIBE,VARIUS 
 SET DLL INDICATE DLL IN PROGRESS 
 MOVE WKSTG2,=X'4131201B3142331C1C1C31001C' HEADER
 MOVE PNT4,COB0 READ 1. LOGICAL PART
 MOVE RECNO,COB0
 MOVE DISPL,COB0
 MOVE FDLBUF,=C' '
* 
 PERF RDNEXT READ FIRST RECORD
 BNOK LOA960
 PERF RDNEXT READ 2. RECORD 
 BNOK LOA960
 PERF RDNEXT READ 3. RECORD 
 BNOK LOA960
* 
LOA070			PNT4 POINTS TO MODIFIER
 SET MODIFLG INDICATE WE HAVE A MODIFIER
 XCOPY BIN5,COB0,COB2,FDLBUF,PNT4 MOVE MODIFIER 
 ADD PNT4,COB2
LOA080			PNT4 POINTS TO RECORDNBR 
 XCOPY BIN6,COB0,COB2,FDLBUF,PNT4 MOVE RECORDNBR
 ADD PNT4,COB2
 XCOPY TLEN,COB0,COB2,FDLBUF,PNT4 MOVE TLEN 
 ADD PNT4,COB2 POINT TO DATA
 SUB TLEN,COB4 DISREGARD RECNO+TLEN JUST NOW
 MOVE BUFIN,=X'00' CLEAR BUFFER 
 XCOPY BUFIN,COB0,TLEN,FDLBUF,PNT4
* 'TLEN' CONTAINS DATATLEN IN 'BUFIN' 
* 'BIN5' CONTAINS MODIFIER
* 'BIN6' CONTAINS RECORDNUMBER (NOT USED) 
 MOVE LENGTH,TLEN 
 MOVE WKBCD1,BIN5 MOVE MODIFIER 
 EDIT WKSTG1,MODIF AND EDIT IT
 COPY WKSTG2,COB11,COB1,WKSTG1,COB0 MOVE IT INTO HEADER 
 PERF DLLATM DOWNLINELOAD IT
 BNOK LOA970 EXIT IF ERROR
 ADD TLEN,COB4 RECNO+ACT.TLEN 
 TBF MODIFLG,LOA100 MODIFIER TO BE DELETED? 
 CLEAR MODIFLG IF SO, CLEAR FLAG
 ADD TLEN,COB2 AND DELETE 2 MORE
 SUB PNT4,COB2

LOA100
 DLETE FDLBUF,COB0,TLEN 
 SUB PNT4,COB4
 SUB DISPL,TLEN 
 XCOPY BIN7,COB0,COB2,FDLBUF,PNT4 1.WORD OF NEXT RECORD 
LOA105
 CBNL DISPL,=W'255',LOA120 TIME FOR ANOTHER READ? 
 TBT EOF,LOA120 
 PERF RDNEXT READ NEXT RECORD 
 BNOK LOA960
 B LOA105 EXTRA READ MIGHT BE NECESSARY 

LOA120
 CBL BIN7,=W'256',LOA080 SAME SUBFILE? (:256) 
 BG LOA940 SOME POINTER IS OVERWRITTEN
 ADD PNT4,COB2 POINT TO NEW MODIFIER
 XCOPY BIN7,COB0,COB2,FDLBUF,PNT4 AND COPY IT 
 CBNE BIN7,=X'000A',LOA070 FINISHED IF MODIFIER="*A"
 MOVE VARIOUS,=C'DOWNLINE LOAD CONCLUDED CORRECTLY. ' 
 PERF SCRIBE,VARIUS 
 MOVE WKB1,COB1 
 PERF CLOSE,WKB1
 CLEAR DLL
 CMP COB0,COB0
 RET

LOA940
 MOVE VARIOUS,=C'DATA ERROR ON DISK ' INVALID RECORDNR
 PERF SCRIBE,VARIUS 
 B LOA980 

LOA960
 MOVE VARIOUS,=C'READ/WRITE ERROR ON DATA DISK '
 PERF SCRIBE,VARIUS 
 B LOA980 

LOA970
 MOVE VARIOUS,=C'DLL ERROR '
 PERF SCRIBE,VARIUS 
LOA980
 MOVE WKB1,COB1 
 PERF CLOSE,WKB1
LOA990
 RET
 PEND 
 EJECT
TABINT PROC 
* 
* THIS PROCEDURE CREATES VARIOUS TABLES AND OTHER FIELDS
* IMMEDIATELY AFTER PROGRAM STARTUP.
* THE INPUT IS FOUND ON VOLUME "VOLUME".
* THE INPUTFIL WAS CREATED BY $PDISC
* 
* IN THIS FILE VARIOUS RECORDTYPES MUST/CAN BE PRESENT: 
* :1 - DENOMINATION VALUES ETC
* :2 - FUNCTION COMMANDS
*    - PRINTER DATA FOR THE ABOVEMENTIONED FUNCTION COMMANDS
* :3 - PRINTER DATA FOR F.X. TOP-OF-RECEIPT 
* :4 - STATUS TEXTS 
* :256 - MARKS THE END OF THE FILE
* 
TABI010 
 MOVE VARIOUS,=C'SPECIFY CONSTANTFILE (IF NOT "CONSTANT").. ' 
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BOK TABI012
 PERF SCRIBE,WRONG
 B TABI010
* 
TABI012 
TABI020 
 MOVE INFO,=C' '
 PERF SCRIBE,INF
 CBNE INDEX,COB1,TABI010 TEST FOR <ENTER> 
* 
 SUB LENGTH,COB1 DISREGARD ENTER-KEY
 BNZ TABI025 NOT DEFAULT
 MOVE BUFIN,=C'CONSTANT'
 MOVE LENGTH,=W'8'
TABI025 
 COPY DSFTABLE(COB2),COB0,COB8,INFO,COB0 SCRATCH FILENAME 
 COPY DSFTABLE(COB2),COB0,LENGTH,BUFIN,COB0 SET FILENAME
 COPY DSFTABLE(COB2),COB8,COB6,VOLUME,COB0 VOLUMENAME 
 PERF OPEN,COB2,WKB1 OPEN CONSTANT-FILE 
 BOK TABI030
 MOVE VARIOUS,=C'ASSIGN ERROR ' 
 PERF SCRIBE,VARIUS 
 B TABI990 EXIT AFTER ERROR 
* 
TABI030 
 MOVE RECNO,COB0
TABI040			READ A RECORD 
 ADD RECNO,COB1 
 PERF READ,COB2,FDBUF,RECNO,STATUS
 BNOK TABI980 READ ERROR (PROBABLY) 
 MOVE WKSTG4,FDBUF EXTRACT 4 BYTES
 CBE WKSTG4,=C':256',TABI900 EOF FOUND? 
* 
 MOVE STAT,FDBUF NOT YET EOF
 CBNE STAT,=C':',TABI050 NEW RECORD TYPE? 
* 
 DLETE WKSTG4,COB0,COB1 DELETE TYPE DELIMITER 
 MOVE WKBCD3,WKSTG4 CONVERT TO BCD
 MOVE INDEX,COB0 RECORD IDENTIFIER
 MOVE OLDSET,=D'-1' INIT OLDSET 
 MOVE DISPL,COB0 INIT DIPLACEMENTPOINTER
 B TABI040 AND TAKE NEXT RECORD 
* 
TABI050 
* THE CURRENT TYPE IS FOUND IN WKBCD3 
 MOVE BIN7,WKBCD3 
 IB BIN7,TABI100, VARIOUS CONSTANTS	C 
		TABI200,	FUNCTION COMMANDS	C
		TABI300,	PRINTER DATA	C 
		TABI400,	STATUS MSG	C 
		TABI500,		C 
		TABI600,		C 
		TABI700,		C 
		TABI800 
 B TABI040 INVALID TYPE, IGNORE 
* 
TABI100 
 ADD INDEX,COB1 NEXT RECORD IDENTIFIER
 IB INDEX,TABI110,TABI110,TABI110,TABI110,		C 
		TABI110,TABI110,TABI110,TABI110,		C 
		TABI120,		C 
		TAB130
 B TABI040 INVALID INDEX,IGNORE 
* 
TABI110 
* 8 CURRENCY VALUES, RECORD IDENTIFIER 1..8 
 MOVE DENOM(INDEX),FDBUF CONVERT TO BCD 
 B TABI040
* 
TABI120 
* CURRENCY TEXT, RECORD IDENTIFIER 9
 MOVE CURR,FDBUF
 B TABI040
* 
TAB130
* MAXIMUM WITHDRAWAL. NO DECIMALS 
 MOVE HILIMIT,FDBUF 
 B TABI040
* 
TABI200 
* FUNCTION COMMANDS, PRINTER DATA 
 MOVE COMB,FDBUF EXTRACT SEQ.NBR
 MOVE SET,COMB CONVERT TO BCD 
 DLETE FDBUF,COB0,COB2 DELETE SEQ.NBR 
 CBNE SET,OLDSET,TABI220
* SAME SET, IMPLICITS PRINTER DATA
 CBL DISPL,=W'211',TABI210 PREVENT OVERFLOW 
 MOVE DISPL,=W'210' 
TABI210 
 MOVE WKBIN1,=W'40' 
 XCOPY PTAB(INDEX),DISPL,WKBIN1,FDBUF,COB0 CONCATENATE
 ADD DISPL,=W'40' ROOM FOR NEXT PRINTERDATA 
 MOVE PLEN(INDEX,COB1),DISPL SET CRUDE LENGTH 
 B TABI040
* 
TABI220 
* NEW SET, IMPLICIT FUNCTION COMMAND
 ADD INDEX,COB1 NEXT RECORD IDENTIFIER
 MOVE OLDSET,SET INITIATE FOR FURTHER TESTING 
 MOVE FCBLD(INDEX),FDBUF SAVE FUNCTION COMMAND
 MOVE DISPL,COB0 PRINTERDATA STARTS IN POS 0
 B TABI040
* 
TABI300 
* PRINTER DATA, VARIOUS NATIONAL RUBBISH
 MOVE COMB,FDBUF
 MOVE SET,COMB CONVERT SET TO BCD 
 DLETE FDBUF,COB0,COB2 DELETE SEQ.NBR 
 CBNE SET,OLDSET,TABI320
 CBL DISPL,=W'211',TABI310 PREVENT OVERFLOW 
 MOVE DISPL,=W'210' BY SETTING FIXED POINTER
TABI310 
 MOVE WKBIN1,PRWIDTH
 XCOPY PNAT(INDEX),DISPL,WKBIN1,FDBUF,COB0
 ADD DISPL,PRWIDTH ROOM FOR NEXT PRINTERDATA
 MOVE PLEN(INDEX,COB2),DISPL SET CRUDE LENGTH 
 B TABI040
* 
TABI320 
 ADD INDEX,COB1 NEW SET 
 MOVE OLDSET,SET
 MOVE DISPL,COB0
 B TABI310
TABI400 
 MOVE STATTXT(INDEX),FDBUF
 B TABI040
* 
TABI500 
TABI600 
TABI700 
TABI800 
 B TABI040 IGNORE THOSE RECORD TYPES
* 
TABI900			:256 FOUND
 MOVE VARIOUS,=C'CONSTANTS LOADED CORRECTLY. '
 PERF SCRIBE,VARIUS 
 PERF CLOSE,COB2 CLOSE CONSTANTFILE 
TABI910 
 MOVE VARIOUS,=C'L@BENR. DEPONERING................. '
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK TABI910 
 CBNE INDEX,COB1,TABI910
 SUB LENGTH,COB1
 BNZ TABI915
 MOVE BUFIN,=C'1 '
TABI915 
 MOVE SRLNBR(COB2),BUFIN CONVERT TO BCD 
 CBNG SRLNBR(COB2),=D'9999',TABI920 CHECK FOR VALID RANGE 
 MOVE SRLNBR(COB2),=D'1' SET VALID VALUE
TABI920 
 MOVE VARIOUS,=C'DAGENS DATO: (DDMM]]).............. '
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK TABI920 
 CBNE INDEX,COB1,TABI920
 SUB LENGTH,COB1
 BNZ TABI925
 MOVE BUFIN,=C'150883'
 MOVE LENGTH,COB6 
TABI925 
 CBNE LENGTH,COB6,TABI920 
 MOVE DATE,BUFIN
TABI930 
 PERF SETKL 
TAB940
 MOVE VARIOUS,=C'L@PENR. UTTAK .......... ' 
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK TAB940
 CBNE INDEX,COB1,TAB940 
 SUB LENGTH,COB1
 BZ TAB940
 MOVE SRLNBR(COB1),BUFIN
 PERF SEDLER
* 
 MOVE VARIOUS,=C' ' 
 PERF SCRIBE,VARIUS 
 PERF CONVERT 
 PERF CONDENS FIND THE REAL LENGTHS 
 CMP COB0,COB0
 RET
* 
TABI980 
 MOVE VARIOUS,=C'READ ERROR ' 
 PERF SCRIBE,VARIUS 
 PERF CLOSE,COB2 CLOSE CONSTANT FILE
 CMP COB0,COB1 SET CR TO NOK
 RET
* 
TABI990 
 CMP COB0,COB1 SET CR TO NOK
 RET
 PEND 
 EJECT
SETKL PROC
SETKL0
 MOVE VARIOUS,=C'HVA ER KLOKKEN? .......... ' 
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK SETKL0
 CBNE INDEX,COB1,SETKL0 
 SUB LENGTH,COB1
 CBNE LENGTH,COB4,SETKL0
 MOVE KL,BUFIN
 RET
 PEND 


SEDLER PROC 
SEDL00
 MOVE VARIOUS,=C'BEL@BS[NDRING SKUFFE 1 (+/-) ..... ' 
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK SEDL00
 CBNE INDEX,COB1,SEDL00 
 SUB LENGTH,COB1
 BZ SEDL10 NO CHANGE IN DRAWER 1
 MOVE WKBCD1,BUFIN
 ADD BEHOLDN(COB1,COB1),WKBCD1
SEDL10
 MOVE VARIOUS,=C'BEL@PS[NDRING SKIFFE 2(+/-) ..... '
 PERF SCRIBE,VARIUS 
 PERF KBINP 
 BNOK SEDL10
 CBNE INDEX,COB1,SEDL10 
 SUB LENGTH,COB1
 BZ SEDL20 NO CHANGE IN DRAWER 2
 MOVE WKBCD1,BUFIN
 ADD BEHOLDN(COB2,COB1),WKBCD1
SEDL20
 RET
 PEND 
 EJECT
CONDENS PROC
* 
* THE PROCEDURE CONVERTS THE CRUDE LENGTHS OF THE PRINTERDATA 
* TO SOME MORE CIVILIZED ONES BY FINDING THE LAST USED CHARACTER
* IN THE LINE. THIS IS ACCOMPLISHED BY A BACKWARD MATCH.
* 
 MOVE BIN4,=W'30' NBR OF ELEMENTS IN PTAB 
COND10
 CBE PLEN(BIN4,COB1),COB0,COND40 ELEMENT IN USE?
 MOVE BIN6,PLEN(BIN4,COB1) MOVE CRUDE LENGTH
 SUB BIN6,COB1 ADJUST 
COND20
 XCOPY STAT,COB0,COB1,PTAB(BIN4),BIN6 RIGHTMOST CHR 
 CBNE STAT,=C' ',COND30 NON-BLANK FOUND?
 SUB BIN6,COB1 NO, TRY NEXT BYTE
 BNZ COND20 IF ANYTHING LEFT AT ALL 
COND30
 ADD BIN6,COB1 ADJUST AGAIN 
 MOVE PLEN(BIN4,COB1),BIN6 MOVE CLEANED LENGTH
COND40
 SUB BIN4,COB1 TRY NEXT PRINTLINE 
 BP COND10 IF ANYTHING LEFT 
* 
 MOVE BIN4,COB10 NBR OF ELEMENTS IN PNAT
COND110 
 CBE PLEN(BIN4,COB2),COB0,COND140 ELEMENT IN USE? 
 MOVE BIN6,PLEN(BIN4,COB2) MOVE CRUDE LENGTH
 SUB BIN6,COB1 ADJUST 
COND120 
 XCOPY STAT,COB0,COB1,PNAT(BIN4),BIN6 RIGHTMOST CHR 
 CBNE STAT,=C' ',COND130 NON-BLANK FOUND
 SUB BIN6,COB1 NO, TRY NEXT BYTE
 BNZ COND120 IF ANYTHING LEFT AT ALL
COND130 
 ADD BIN6,COB1 ADJUST BACK
 MOVE PLEN(BIN4,COB2),BIN6 MOVE CLEANED LENGTH
COND140 
 SUB BIN4,COB1 TRY NEXT PRINTLINE 
 BP COND110 IF THERE WAS MORE LEFT
* 
 RET
 PEND 
 EJECT
CONVERT PROC
* 
* THIS ROUTINE CONVERTS EVTL. SPECIAL CHARACTERS IN THE PRINTERDATA 
* THE FOLLOWING CONVERSIONS TAKE PLACE: 
* # -> <LF> 
* ! -> <FF> 
* " -> <SO> 
* 
 MOVE BIN4,=W'30' NBR OF ELEMENTS 
CONV00
 MOVE COMB,=X'230A' HASH TO LINEFEED
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MATCH PTAB(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV20
 COPY PTAB(BIN4),BIN6,COB1,COMB,COB1
 B CONV00 THERE MIGHT BE MORE 
CONV20
 MOVE COMB,=X'210C' EXCL.MARK TO FORMFEED 
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MATCH PTAB(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV40
 COPY PTAB(BIN4),BIN6,COB1,COMB,COB1
 B CONV20 
CONV40
 MOVE COMB,=X'220E' DOUBLE QUOTE TO SHIFTOUT
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MATCH PTAB(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV60
 COPY PTAB(BIN4),BIN6,COB1,COMB,COB1
 B CONV40 
CONV60
 SUB BIN4,COB1
 BP CONV00
* 
 MOVE BIN4,=W'10' NUMBER OF ELEMENTS IN PNAT
CONV100 
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MOVE COMB,=X'230A' 
 MATCH PNAT(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV120 
 COPY PNAT(BIN4),BIN6,COB1,COMB,COB1
 B CONV100
CONV120 
 MOVE COMB,=X'210C' 
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MATCH PNAT(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV140 
 COPY PNAT(BIN4),BIN6,COB1,COMB,COB1
 B CONV120

CONV140 
 MOVE COMB,=X'220E' 
 MOVE BIN5,=W'250'
 MOVE BIN6,COB0 
 MATCH PNAT(BIN4),BIN6,BIN5,COMB,COB0,COB1
 BNOK CONV160 
 COPY PNAT(BIN4),BIN6,COB1,COMB,COB1
 B CONV140
CONV160 
 SUB BIN4,COB1
 BP CONV100 
* 
 CMP COB0,COB0
 RET
 PEND 
 EJECT
RDNEXT PROC 
 ADD RECNO,COB1 POINT TO NEXT RECORD
 PERF READ,COB1,FDBUF,RECNO,STATUS
 BNOK RDN300
* 
 XCOPY FDLBUF,DISPL,RECLEN,FDBUF,COB0 CONCATENATE BUFFER
 ADD DISPL,RECLEN PREPARE FOR NEXT READ 
 MOVE WKSTR6,=X'1C0100000A' <FS>!<:256>!<*A>
 MOVE WKB1,COB0 STARTPOINT MATCH
 MOVE WKBIN1,=W'384' BUFFER LENGTH
 MATCH FDLBUF,WKB1,WKBIN1,WKSTR6,COB0,COB5 SEARCH FOR EOF 
 BNOK RDN200 NOT FOUND
 SET EOF EOF FOUND, SET FLAG
RDN200
 CMP COB0,COB0
RDN300
 RET
 PEND 
BUNT PROC 
 RET
 PEND 


LUK PROC
 RET
 PEND 
 EJECT
VARIUS FRMT 
 FCOPY ='22'
 FCOPY VARIOUS
 FMEND

WRONG	FRMT
 FCOPY ='++'
 FCOPY ='REJECTED'
	FNL
 FILLR ' ',30 
 FCOPY =':  ' 
	FMEND

MODIF FRMT
 FMEL '9',WKBCD1
 FMEND

INF FRMT
 FCOPY =C'22' 
 FCOPY INFO 
 FMEND

	END

Full view