BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Table of contents 2- 7 TRAP MACRO DEFINITIONS 4- 82 JSR MACRO DEFINITIONS 7- 390 TRAP ERROR CALLS - MACRO DEFINITIONS 9- 478 ERROR TRAP HANDLER BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 1 1 ; CONDITIONAL TO ASSEMBLE MODULES OF BASIC 2 ; 3 000001 RSX11M=1 4 5 6 ; FOLLOWING LINE USED WITH IMPUR.MAC TO ASSEMBLE A VERSION OF 7 ; IMPUR HAVING FSR PSECTS ALONG WITH GLOBAL SYMBOL DEFINITION 8 ; ** USED TO CREATE A SINGLE USER (NON-SHARED) BASIC ** 9 ; 10 000001 SNGUSR=1 11 12 13 ; FOLLOWING LINE CAUSES OF BASIC UNDER RSX11M OR IAS V 3.2 TO 14 ; DYNAMICALLY EXTEND ITSELF WHEN USER STORAGE RUNS OUT 15 000001 M11EXT=1 16 ;IASEXT=1 17 18 19 ; HEADER FILE TO DEFINE SYMBOL TASK FOR ASSEMBLING MODULE 20 ; IMPUR AS A TASK MODULE (AS OPPOSED TO SYMBOL TABLE ONLY). 21 ; ** USED FOR SHAREABLE BASIC ** 22 ; 23 ;TASK=1 24 25 26 27 ;DEFINE THE CONDITIONAL TO HAVE UNDEFINED VARIABLES AUTOMATICALLY 28 ;DEFINED WHEN REFERENCED 29 ; 30 000000 DEFVAR=0 31 32 33 34 ;DEFINE THE CONDITIONAL TO GENERATE FULL ERROR MESSAGE TEXT 35 ; 36 000000 FULTXT=0 37 38 39 ;DEFINE THE DEFAULT UIC VARIABLE TO BE OTHER THAN 0 TO ENABLE THE 40 ;DEFAULT UIC OPTION WITH THE VARIABLE SET TO THE OCTAL UIC CODE, (USUALLY 41 ;1,1 OR 401, IF BASIC TRIES TO DO AN "OLD" "CHAIN", "RUN" ETC AND DOES 42 ;NOT FIND THE PROGRAM IN QUESTION UNDER THE CURRENT UIC, IT WILL ALSO 43 ;TRY TO FIND THE PROGRAM UNDER THE DEFAULT UIC. THIS ENABLES FREQUENTLY 44 ;USED PROGRAMS TO BE USED FROM ANY UIC 45 ; 46 000401 DEFUIC=401 47 48 49 ;DEFINE THE CONDITIONAL TO INCLUDE FPP EMULATION PACKAGE (FPPEMULAT) 50 ;FOR USE WITH A PDP 11/40 WITH FIS 51 ; FPPEMU=0 52 53 54 ;DEFINE CONDITIONAL SO THAT SPAWN TRIES SENDING COMMAND LINE TO ...MAS 55 ;IF FIRST CALL FAILS 56 ;TRYMAS=1 57 BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 1-1 58 59 ;DEFINE CONDITIONAL SO THAT IF WE ARE RUNNING ON A PRO UNDER P/OS, WE DO 60 ;NOT DO A GETMCR COMMAND LINE DIRECTIVE, (NOT AVAILABLE UNDER P/OS) 61 ;PRO=1 BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 2 1 ;********* 2 ; * 3 ; BASIC0 * 4 ; * 5 ;********* 6 .TITLE BASIC0 7 .SBTTL TRAP MACRO DEFINITIONS 8 ; 9 ; DOS VERSION FROM WHICH THE RSX VERSION EVOLVED WAS ORIGIANLLY A DECUS 10 ; LIBRARY PROGRAM MODIFIED BY FRANK KORZENIEWSKI OF RPSLMC. 11 ; 12 ; BASIC TRAP HANDLER OBJECT MODULE 31 MAY 72 13 ; PROVIDES ONE WORD TRAP SUBROUTINE CALLS AND 14 ; ERROR HANDLING 15 ; 16 ; MODIFIED BY LARRY SIMPSON 12-SEP-75 FOR ERROR TRAPS ONLY 17 ; AND USE OF WORD ON STACK RETURNED BY RSX EXECUTIVE. 18 ; 19 ; MODIFIED FOR "MO" ERROR HANDLING 20 ; BY LARRY SIMPSON 15-OCT-75 21 ; 22 ; MODIFIED FOR "ON ERROR GOTO" USER ERROR HANDLING 23 ; BY LARRY SIMPSON 13-DEC-76 24 ; 25 ; MODIFIED FOR FLOATING POINT EXCEPTION ERROR HANDLING 26 ; BY LARRY SIMPSON 17-DEC-76 27 ; 28 ; MODIFIED FOR FLOATING POINT EMULATION (CONDITIONAL ON 'FPPEMU') ;DSS1 29 ; FPPEMU IS DEFINED (OR NOT) IN PREFIX ASSEMBLY FILE ;DSS1 30 ; BY DANIEL STEINBERG 18-JAN-79 ;DSS1 31 ; ;DSS1 32 ; MODIFIED TO INCLUDE 'VARIABLE TYPE MISMATCH ERROR' (VTMERR - 52) ;DSS1 33 ; WHEN STRING AND NUMERIC VARIABLES ARE MIXED TOGETHER (PREVIOUSLY, THE ;DSS1 34 ; PROGRAM TRAPPED OUT ON ODD ADDRESS OR ILLEGAL INSTRUCTION OR MEMORY FAULT) ;DSS1 35 ; *** THIS IS NOT THE ONLY ERROR THAT CAN BE GENERATED WHEN THERE IS ;DSS1 36 ; A MISMATCHED EXPRESSION....THE WHOLE ERROR CODE STRUCTURE WILL ;DSS1 37 ; EVENTUALLY BE MODIFIED *** ;DSS1 38 ; BY DANIEL STEINBERG 14-FEB-79 ;DSS1 39 ; ;DSS1 40 ; FIXED MINOR BUG IN ERROR ROUTINE UNDER RSX11M ;DSS1 41 ; D.S. ;DSS1 42 ; ;DSS1 43 ; ;DSS1 44 ;-355,,/;DSS1/ ;DSS1 45 ; TV VTMERR ;VARIABLE TYPE MISMATCH CHANGED TO #54, (FB) 46 ; DEFINE FOR RSX11D IF RSX11M IS NOT DEFINED BY HEADER FILE TO MACRO 47 ; 48 .IF NDF RSX11M 49 RSX11D=1 ;DEFINE FOR RSX11D MO ERROR HANDLING 50 .ENDC 51 ; GLOBAL PROGRAM EXTERNALS 52 ; 53 .GLOBL ENDSTK STOP02 TINPT TOTPT INPT OTPT 54 .GLOBL STUDAT ENUDAT DETACH GOTO03 FPEXFL LINEFL 55 ; 56 ; GLOBALS DEFINED HERE 57 .GLOBL FPERMS CTCENT BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 2-1 TRAP MACRO DEFINITIONS 58 .IF DF RSX11D 59 .GLOBL STRD 60 .ENDC 61 ; 62 ; MO PARAMETER LIST GLOBALS 63 .GLOBL PARLST P.ERCD P.LINE P.FCS P.FLNM P.FNAM 64 ; 65 ; MACRO CALLS 66 .MCALL DIR$ ASTX$S 67 .IF DF RSX11D 68 .MCALL MOUT$ MODF$ MOWA$S 69 .ENDC 70 ;TRAP ENTRY POINT GLOBALS - FOR SVTK$ AND SFPA$ IN BASIC3 71 ; 72 .GLOBL TRAP00 FPEXTR 73 ; 74 ; 75 .MACRO TV .SYM 76 .SYM = TRAP 77 TRAP=TRAP+1 78 .GLOBL .SYM 79 .ENDM BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 4 JSR MACRO DEFINITIONS 82 .SBTTL JSR MACRO DEFINITIONS 83 ; 84 ; MODIFICATION BY FRANK BORGER 5-SEP-75 85 ; 86 ;CODE TO CONVERT TRAP SUBROUTINE CALLS TO NORMAL JSR'S 87 ;FOR OPERATION UNDER RSX. 88 ; 89 ;DEFINE A GENERAL MACRO TO GENERATE A SECOND MACRO WHICH 90 ;CONVERTS A TRAP NAME OF XXXXXX TO A 91 ; JSR PC,XXXXXX 92 ; 93 .MACRO TRPSUB A,B 94 .MACRO A 95 JSR PC,B 96 .ENDM 97 .ENDM 98 ; 99 ; NOW ALL THE ONE-TIME TRAPS THAT BASIC USES 100 ; 101 000000 TRPSUB ATOF,ATOF00 ;ASCII TO FLOATING 102 000000 TRPSUB ATOI,ATOI00 ;ASCII TO INTEGER 103 000000 TRPSUB CLOSEF,CLOS00 ;CLOSE ANY OPEN FILES 104 000000 TRPSUB CLRUSR,CLRU00 ;CLOSE TEMP USER SPACE (IF ANY) 105 000000 TRPSUB CRLF,CRLF00 ;DO [CR,LF] 106 000000 TRPSUB DIMCHK,DIMC00 ;CHECK LEGALITY OF DIMENSIONS 107 000000 TRPSUB EVAL,EVAL00 ;EVALUATE ARITHMETIC EXPRESSION 108 000000 TRPSUB EVALS,EVLS00 ;EVALUATE STRING EXPRESSION 109 000000 TRPSUB FINDLN,FIND00 ;FIND LINE NUMBER (IN R0) 110 000000 TRPSUB GETVAR,GETV00 ;GET TRUNCATED VARIABLE 111 000000 TRPSUB ITOA,ITOA00 ;CONVERT INTEGER TO ASCII 112 000000 TRPSUB JUNKIT,JUNK00 ;SKIP OVER TRASH TO END OF LINE 113 000000 TRPSUB PACK,PCK00 ;PACK LINE INTO WORKING STORAGE 114 000000 TRPSUB PRINTC,PRNT00 ;PRINT CHARACTER 115 000000 TRPSUB PRINTL,PRN00 ;PRINT LINE, R0=FBA,R1=LBA 116 000000 TRPSUB PRNTLN,PRLN00 ;PRINT LINE NUMBER 117 000000 TRPSUB PUSH,PUSH00 ;PUSH ONE WORD INTO USER LIST 118 000000 TRPSUB SCRNCH,SCR00 ;DELETE N BYTES FROM USER SPACE 119 000000 TRPSUB SKIP,SKIP00 ;SKIP OVER SPACES IN INPUT TEXT 120 000000 TRPSUB SQUISH,SQU00 ;DELETE TEXT TO TERMINATOR AND PACK 121 000000 TRPSUB SRCHLF,SRCH00 ;SEARCH FOR LINE FEED USING R1 AS POINTER 122 000000 TRPSUB SRLST,SRL00 ;SEARCH FOR ITEM IN USER STORAGE 123 000000 TRPSUB STRLEN,STRL00 ;COMPUTE STRING LENGTH 124 000000 TRPSUB TSTCH,TST00 ;TEST CHAR (IN R2) ALPHA VS NUMERIC 125 000000 TRPSUB TSTOK,TSTU00 ;CHECK, IS THERE ENOUGH USER SPACE 126 000000 TRPSUB FNMBR,FNMB00 ;GET FILE NUMBER AND SET UP FILE BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 5 JSR MACRO DEFINITIONS 128 ;+1 129 ; .SKIP 130 ; .X ^INTRODUCTION 131 ; ^THIS ^^BASIC\\ FOLLOWS ^^DEC\\'S ^^BASIC-11\\ IN ITS BASIC ORIENTATION. 132 ; ^ADVANCED FEATURES TEND TO FOLLOW MAY FOLLOW FOR NORMAL INTERACTIVE USE OR ONE OF TWO OTHER 306 ; OPTIONS MAY FOLLOW BEFORE _<^C^R> FOR SPECIAL USES. 307 ; .FG 1 308 ; ^IF A SPACE AND A ? FOLLOWED BY AN ARITHMETIC EXPRESSION FOLLOWS ^^BAS\\, 309 ; THE VALUE OF THE EXPRESSION WILL BE PRINTED ON THE NEXT LINE FOLLOWED 310 ; BY A RETURN TO THE ^^MCR\\. 311 ; ^THIS IS USEFUL FOR QUICK DESK CALCULATOR TYPE CALCULATIONS. 312 ; .FG 1 313 ; ^IF A SPACE (OR TAB) AND A FILE NAME WITH AN OPTIONAL SWITCH FOLLOW, 314 ; THEN THAT FILE WILL BE READ IN AS A USER PROGRAM JUST AS IN THE ^^OLD\\ 315 ; COMMAND. 316 ; .FG 1 317 ; ^IF THE SWITCH (/^R^N) IS SPECIFIED, THE PROGRAM WILL ALSO BE RUN AS 318 ; THOUGH THE ^^RUN\\ COMMAND HAD BEEN TYPED. 319 ; ^A SWITCH OF THE FORM "{BAS} 333 ; MCR>{BASIC PROG.BAS/RN} 334 ; MCR>{BAS PROG/RN:150} 335 ; MCR>{BAS ? 4*3+2} 336 ; \\ 337 ; .FILL 338 ;- 339 ;+2 340 ; ^THE SUBSET OF COMMANDS LISTED IN THIS CHAPTER IS PRIMARILY USED TO CONTROL 341 ; EXECUTION OF R0 623 000334 010246 MOV R2,-(SP) ;SAVE R2 624 000336 005002 CLR R2 ;PREPARE FOR FUTURE USE 625 000340 006200 ASR R0 ;DIVIDE ERROR NUMBER BY 2 626 000342 005300 DEC R0 ;AND DECREMENT 627 000344 003410 BLE 2$ ;IF ZERO OR NEG, NO ERROR 628 000346 020027 000004 CMP R0,#4 ;IF > 4, ALSO 629 000352 003005 BGT 2$ ;NO ERROR TO REPORT 630 000354 000261 SEC ;GET BIT READY TO SHIFT IN 631 000356 006102 1$: ROL R2 ;SHIFT OVER ONE 632 000360 077002 SOB R0,1$ 633 000362 050267 000000G BIS R2,FPEXFL ;SET APPROPRITE FLAG BIT 634 000366 012602 2$: MOV (SP)+,R2 ;RESTORE OLD R2 635 000370 012600 MOV (SP)+,R0 ;RESTORE OLD R0 636 000372 ASTX$S ;EXIT FROM AST ROUTINE 637 ; 638 ; THIS SUBROUTINE SHOULD BE CALLED FOR ERROR MESSAGE PROCESSING 639 ; AFTER POSSIBLE FLOATING EXCEPTION ERRORS. 640 ; IT CHECKS THE FLOATING POINT EXCEPTION FLAGS WORD AND PRINTS 641 ; TRAPS TO THE APPROPRIATE ERROR ROUTINE (USER OR SYSTEM) 642 ; NOTE THAT IN THE CASE OF A USER ERROR ROUTINE BRANCH, ONLY 643 ; THE FIRST OF THE FOUR FLOATING POINT ERRORS WHICH OCCURS 644 ; WILL BE ACTED UPON AND RECORDED. 645 ; 646 ; REGISTERS USED - R0,R2 647 ; 648 000400 016700 000000G FPERMS: MOV FPEXFL,R0 ;GET ERROR BIT CODES IN R0 BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 9-3 ERROR TRAP HANDLER 649 000404 012702 000432' MOV #2$-4,R2 ;JUMP LIST ADDRESS TO R2 650 000410 005067 000000G CLR FPEXFL ;CLEAR THE FLAGS, SO WE DON'T LOOP 651 000414 062702 000004 3$: ADD #4,R2 ;STEP THROUGH THE LIST 652 000420 006200 ASR R0 ;AND NOW GET ERROR BIT IN 'C' 653 000422 103003 BCC 1$ ;IF NOT SET, NO ACTION 654 000424 010046 MOV R0,-(SP) ;SAVE REGISTERS IN CASE 655 000426 010246 MOV R2,-(SP) ;WE COME BACK HERE 656 000430 000112 JMP (R2) ;GO DO ERROR TRAP 657 000432 001370 1$: BNE 3$ ;IF STILL BITS LEFT, KEEP CHECKING 658 000434 000207 RTS PC 659 000436 104502 2$: DVFERR ;FLOATING DIVIDE BY ZERO 660 000440 000405 BR 5$ 661 000442 104503 FIXERR ;FLOATING -> INTEGER CONVERSION OVFLOW 662 000444 000403 BR 5$ 663 000446 104504 FOFERR ;FLOATING OVERFLOW ERROR 664 000450 000401 BR 5$ 665 000452 104505 FUFERR ;FLOATING UNDERFLOW ERROR 666 000454 012602 5$: MOV (SP)+,R2 ;RESTORE SAVED REGISTERS 667 000456 012600 MOV (SP)+,R0 668 000460 000755 BR 3$ 669 ; 670 .IFT ;IF FPP EMULATION, DO IT DIFFERENTLY ;DSS1 671 ;DSS1 672 FPEXTR=0 ;DEFINE FPEXTR (SO THERE WON'T BE AN UNDEFINED GLOBAL) ;DSS1 673 FPERMS: MOV R0,-(SP) ;SAVE REGS ;DSS1 674 MOV R1,-(SP) ;DSS1 675 STST R1 ;GET FLOATING EXCEPTION CODE, IF ANY ;DSS1 676 SUB #ERRDIV,R1 ;4=DIVIDE BY ZERO ;DSS1 677 BLT 1$ ;6=CONVERSION TO INTEGER ERROR ;DSS1 678 CMP R1,#ERRUNR-ERRDIV ;8=OVERFLOW ;DSS1 679 BGT 1$ ;10=UNDERFLOW ;DSS1 680 ASL R1 ;DSS1 681 ADD #5$,R1 ;DSS1 682 JSR PC,(R1) ;DSS1 683 1$: MOV (SP)+,R1 ;RESTORE REGS ;DSS1 684 MOV (SP)+,R0 ;DSS1 685 RTS PC ;DSS1 686 5$: DVFERR ; 4 ;DSS1 687 RTS PC ;DSS1 688 FIXERR ; 6 ;DSS1 689 RTS PC ;DSS1 690 FOFERR ; 8 ;DSS1 691 RTS PC ;DSS1 692 FUFERR ; 10 ;DSS1 693 RTS PC ;DSS1 694 ;DSS1 695 .ENDC ;DSS1 696 ;DSS1 697 ;-554,595,/;DSS1/ ;DSS1 698 .IF DF RSX11D 699 STRD: .WORD STR1E-STR1 ;DEFINE STRING(FILENAME) LENGTH 700 .WORD STR1 ;ADDRESS OF FILENAME STRING 701 STR1: .ASCIZ /LB:[1,2]BASIC/ 702 STR1E: 703 .ENDC 704 000001 .END BASIC0 MACRO Y05.02 Wednesday 27-Aug-86 15:06 Page 9-4 Symbol table ARGERR= 104446 G ERRR01 000056R 002 IMMERR= 104465 G OTPT = ****** G SQRERR= 104501 G BRFLAG= ****** GX ERRR02= ****** GX INPERR= 104422 G OVFERR= 104400 G STOERR= 104447 G CALERR= 104445 G ERRR03= ****** GX INPT = ****** G PARERR= 104407 G STOP02= ****** G CLOSER= 104443 G ERRR04 000236R 002 IN1ERR= 104507 G PARLST= ****** G STRERR= 104435 G CLOS00= ****** GX ERRR05= ****** GX IN2ERR= 104510 G PRFERR= 104456 G STUDAT= ****** G CLSERR= 104440 G ERRR06 000114R 002 IN3ERR= 104511 G PRIERR= 104455 G STXERR= 104436 G COMERR= 104464 G ERRR07 000240R 002 ITOA00= ****** GX PRLN00= ****** GX SUBERR= 104406 G CRLF00= ****** GX EXFERR= 104432 G LETERR= 104410 G PRNERR= 104413 G TINPT = ****** G CSIERR= 104434 G FACERR= 104457 G LINEFL= ****** G PRN00 = ****** GX TMOERR= 104454 G CTCENT 000302RG 002 FENCE = 000100 LINENO= ****** GX P.ERCD= ****** G TM1ERR= 104476 G DEFERR= 104417 G FIXERR= 104503 G LINERR= 104414 G P.FCS = ****** G TM2ERR= 104477 G DEFUIC= 000401 FNMERR= 104441 G LNNERR= 104420 G P.FLNM= ****** G TOTPT = ****** G DEFVAR= 000000 FOFERR= 104504 G LODERR= 104460 G P.FNAM= ****** G TRAP = 104400 DETACH= ****** G FORERR= 104426 G LOGERR= 104500 G P.LINE= ****** G TRAP00 000000RG 002 DIMERR= 104415 G FPERMS 000400RG 002 MESTBL= ****** GX REAERR= 104423 G UNMERR= 104431 G DMDERR= 104421 G FPEXFL= ****** G M11EXT= 000001 RETERR= 104404 G UNRERR= 104401 G DMVERR= 104416 G FPEXTR 000322RG 002 NXMERR= 104430 G RE1ERR= 104424 G USR = ****** GX DVFERR= 104502 G FUFERR= 104505 G NXTERR= 104427 G RE2ERR= 104425 G VALERR= 104512 G ENDSTK= ****** G FULTXT= 000000 NXVERR= 104506 G RSX11M= 000001 VFIERR= 104461 G ENUDAT= ****** G GOERR = 104402 G OPENER= 104444 G SBSERR= 104405 G VOPERR= 104462 G ENUSAV= ****** GX GOTO03= ****** G OPLBER= 104450 G SETERR= 104463 G VTMERR= 104466 G EOFERR= 104442 G IFERR = 104412 G OPLFER= 104451 G SLPERR= 104452 G WATERR= 104453 G ERBR 000254R 002 ILCERR= 104403 G OPNERR= 104437 G SNGUSR= 000001 WTMAG = ****** GX ERRBRN= ****** GX ILFERR= 104433 G OPRERR= 104411 G . ABS. 000000 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) BASIC0 000462 002 (RW,I,LCL,REL,CON) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 8652 Words ( 34 Pages) Size of core pool: 19714 Words ( 75 Pages) Operating system: RSX-11M/PLUS (Under VAX/VMS) Elapsed time: 00:00:23.25 BASIC0,BASIC0/-SP=BASPRE,BASIC0