100 / SPECIAL (X) PATCHES TO FOCAL 110 120 / LAST EDIT: 28-JAN-1988 11:00:00 CJL 130 140 / MAY BE ASSEMBLED WITH '/J' SWITCH SET. 150 160 / THIS FILE IS A ONE-PAGE COLLECTION OF PATCHES TO FOCAL TO IMPLEMENT THREE 170 / FUNCTIONS: 180 190 / 1): FBLK(BLOCK[,WRITE-INDICATOR]) 200 / 2): FWRD(ADDRESS[,REPLACEMENT VALUE]) 210 / 3): FAND(FIRST-ARGUMENT[,SECOND-ARGUMENT]) 220 230 / DESCRIPTION OF FUNCTIONS: 240 250 / FUNCTION "FBLK" READS (OR WRITES) A SET OF DISK BLOCKS STARTING FROM THE 260 / BLOCK NUMBER EVALUATED FROM THE FIRST ARGUMENT. THE FUNCTION WILL CAUSE 270 / A READ OPERATION IF ONE ARGUMENT IS GIVEN; MERELY GIVING A SECOND 280 / ARGUMENT CAUSES A WRITE OPERATION (THE ARGUMENT VALUE IS UNIMPORTANT). 290 / THE MEMORY AFFECTED BY THE TRANSFER IS LOCATION 0000 ONWARD IN FIELD 300 / "BUFFLD." THE NUMBER OF BLOCKS TRANSFERRED IS DETERMINED BY "N." THE 310 / LOGICAL I/O UNIT IS DETERMINED BY "UNIT." 320 330 / FUNCTION "FWRD" RETURNS THE CONTENTS OF THE SPECIFIED MEMORY ADDRESS 340 / EVALUATED FROM THE FIRST ARGUMENT. IF A SECOND ARGUMENT IS PASSED, THEN 350 / ITS EVALUATION BECOMES THE REPLACEMENT VALUE AT THE SPECIFIED ADDRESS. IF 360 / THE FIRST ARGUMENT IS IN THE RANGE 0000-4095, THE FIRST ARGUMENT REFERS 370 / TO THE 4096 ELEMENTS IN FIELD "BUFFLD." THIS CORRESPONDS TO THE BUFFER 380 / DEFINED IN THE "FBLK" FUNCTION. IF THE FIRST ARGUMENT IS IN THE RANGE 390 / 4096-6143, THE FIRST ARGUMENT REFERS TO AN ARRAY OF DOUBLE-PRECISION 400 / ELEMENTS IN THE NEXT FIELD PAST "BUFFLD." THESE ELEMENTS ARE UNRELATED TO 410 / THE "FBLK" FUNCTION AND ARE USED INDEPENDENTLY. 420 430 / FUNCTION "FAND" RETURNS THE LOGICAL BIT-WISE AND OF THE TWO ARGUMENTS 440 / PASSED TO IT. IF THE SECOND ARGUMENT IS NOT PRESENT, IT IS TREATED AS 450 / ZERO AND CAUSES A ZERO RETURN VALUE. 460 470 / ASSEMBLY INSTRUCTIONS: 480 490 / SET "BUFFLD" TO THE PROPER FIELD FOR "FBLK", "FWRD" (DEFAULT IS 40). 500 510 / SET "N" TO THE I/O CALL LENGTH DESIRED IN "FBLK" (DEFAULT IS 00 WHICH 520 / USES 40 BLOCKS). 530 540 / SET "UNIT" TO THE DESIRED I/O UNIT (DEFAULT IS 7). 550 EJECT 560 / DEFINITIONS FROM FOCAL, 1969 (ORIGINAL PAPER-TAPE VERSION). 570 580 BOTTOM= 0035 /FOCAL PUSHDOWN LIMIT 590 CHAR= 0066 /FOCAL'S INPUT BUFFER 600 EFUN3I= 0136 /FUNCTION RETURN POINTER 610 EVAL= 1613 /EVALUATOR ENTRY POINT 620 FLAC= 0044 /FLOATING ACCUMULATOR HERE 630 FNTABF= 0374 /FUNCTION ADDRESS TABLE 640 FNTABL= 2165 /HASHED FUNCTION NAME TABLE 650 INTEGER=0053 /FLOATING TO FIXED CONVERSION POINTER 660 POPA= TAD I 13 /REMOVE WORD FROM STACK 670 POPJ= JMP I 141 /REMOVE AND RETURN FROM STACK 680 PUSHA= JMS I 142 /PUSH WORD ONTO STACK 690 PUSHJ= JMS I 140 /CALL WITH RETURN ON STACK 700 P7600= 0104 /CONSTANT 7600 710 RETURN= JMP I EFUN3I /FUNCTION RETURN INSTRUCTION 720 730 / DEFINITIONS FROM P?S/8 FOCAL OVERLAY. 740 750 BEOFZAP=7505 /BINARY LOADER ZAP WORD 760 BONCE= 3600 /OVERLAY ONCE-ONLY ADDRESS 770 SYSIO= 7640 /SYSTEM I/O ENTRY POINT 780 790 / MISCELLANEOUS DEFINITIONS. 800 810 IFNDEF BUFFLD /BUFFER FIELD FOR FBLK AND FWRD 820 IFNDEF N /DO 40 BLOCK READ/WRITE CALLS FOR FBLK 830 NL0001= CLA IAC /LOAD AC WITH 0001 840 NL4000= CLA CLL CML RAR /SET AC TO 4000 850 NSTART= 4043 /PATCH ASSEMBLY ADDRESS 860 IFNDEF UNIT /I/O UNIT FOR FBLK 870 880 FIELD 0 /ENSURE FIELD ZERO 890 900 *FNTABL+14 /PUT IN HASHED NAMES 910 920 "B^2+"L^2+"K /BLK 930 "W^2+"R^2+"D /WRD 940 "A^2+"N^2+"D /AND 950 EJECT