7 e_array: cl -(sp) ; bra error
8 e_range: mov #0x1,-(sp) ; bra error
9 e_set: mov #0x2,-(sp) ; bra error
10 e_iovfl: mov #0x3,-(sp) ; bra error
11 e_fovfl: mov #0x4,-(sp) ; bra error
12 e_funfl: mov #0x5,-(sp) ; bra error
13 e_idivz: mov #0x6,-(sp) ; bra error
14 e_fdivz: mov #0x7,-(sp) ; bra error
15 e_iund: mov #0x8,-(sp) ; bra error
16 e_fund: mov #0x9,-(sp) ; bra error
17 e_conv: mov #0xA,-(sp) ; bra error
18 e_stack: mov #0x10,-(sp) ; bra fatal
19 e_heap: mov #0x11,-(sp) ; bra error
20 e_illins: mov #0x12,-(sp) ; bra fatal
21 e_oddz: mov #0x13,-(sp) ; bra fatal
22 e_case: mov #0x14,-(sp) ; bra fatal
23 e_memflt: mov #0x15,-(sp) ; bra fatal
24 e_badptr: mov #0x16,-(sp) ; bra fatal
25 e_badpc: mov #0x17,-(sp) ; bra fatal
26 e_badlae: mov #0x18,-(sp) ; bra error
27 e_badmon: mov #0x19,-(sp) ; bra error
28 e_badlin: mov #0x1A,-(sp) ; bra error
29 e_badgto: mov #0x1B,-(sp) ; bra error
33 !---------------------------------------------------------------------------
35 !----------------------------------------------------------------------------
36 fatal: clr.l -(sp) !dummy return address
37 pea hlt_z !RETURN FROM FATAL HALTS
40 error: movem.l d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6,-(sp)
41 mov 60(sp),d0 !ERROR NUMBER IN d0
43 move.l eb,a6 !JUST TO BE SURE
44 lea retarea,a5 !JUST TO BE SURE
50 bge 0f !FATAL ERROR , START ERROR HANDLING
61 movem.l (sp)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6
63 add.l wrd,sp !REMOVE ERROR NUMBER
71 move.l #-1,uerrorp !USER MUST SET TRAP AGAIN
74 !-----------------------------------------------------------------------------
76 add.l #0x10,sp !REMOVE RETURN STATUS BLOCK
77 add.l wrd,sp !REMOVE ERROR NUMBER
82 movem.l (sp)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6
87 mov 4(sp),(sp) !COPY ERROR NUMBER
88 move.l a4,word(sp) !RETURN ADDRESS TO MAIN LOOP
100 !-----------------------------------------------------------------------------
101 !FIRST INFORMATION ABOUT THE KIND OF THE ERROR
103 movem.l (sp)+,d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6
104 notrap1: comp #29,d0 !ERROR NUMBER STILL IN d0
105 blt 1f !START PRINTING ERROR
116 mov #2,-(sp) !STANDARD ERROR
119 !NEXT INFORMATION ABOUT THE LINE NUMBER
129 !NOW INFORMATION ABOUT THE FILES
144 5: move.w #0x0A,-(sp)
154 clr.l -(sp) !dummy return address
160 !---------------------------------------------------------------------------
162 !--------------------------------------------------------------------------
163 hlt_z: add.l #4,sp !remove return address
166 emprof: .asciz "em_profile\0"
185 move.l ltime,a4 !a4 points at bottem of prof table
210 emflow: .asciz "em_flow\0"
235 emcount: .asciz "em_count\0"
243 emopf: .asciz "em_opfreq\0"
246 counttab: .space 1892
269 countfld: .space 4 !COUNT NUMBER - NUMBER OF LINE 1 OF PROC
270 countptr: .space 4 !COUNT NUMBER OF CURRENT LINE
279 testen (sp)+ ! ignore result
286 mov (sp)+,d6 !d6 contains file descriptor
287 cmp.l #-1,linused-4 !test if buffer is fully used
293 bne 2f !exists entry in table
294 move.l #22,-(sp) !here case no lines processed
303 move.l #7,-(sp) !announce new file name
312 move.l d7,a0 !keep file pointer in d7
313 clr.l (a1)+ !this will stop the printing
314 move.l #-1,d1 !d1 will contain length of file name
327 4: move.l (a1),d1 !next print line numbers
340 tst.l (a1) !in case 0 no more lines
343 bne 2b !new file name
344 clr.l (a1)+ !skip file name
345 bra 4b !only new line
348 emlast: .asciz "em_last"
349 mess1: .asciz "no line processed yet\n"
350 mess2: .asciz "\nfile :"
354 lasttable: .space 512
362 .asciz "ARRAY BOUND ERROR \n"
363 .asciz "RANGE BOUND ERROR \n"
364 .asciz "SET BOUND ERROR \n"
365 .asciz "INTEGER OVERFLOW \n"
366 .asciz "FLOATING OVERFLOW \n"
367 .asciz "FLOATING UNDERFLOW \n"
368 .asciz "INT. DIV. BY ZERO \n"
369 .asciz "DIVIDE BY 0.0 \n"
370 .asciz "UNDEFINED INTEGER \n"
371 .asciz "UNDEFINED FLOAT \n"
372 .asciz "CONVERSION ERROR \n"
373 .asciz "NO FLOATING POINT \n"
374 .asciz "NO 8 BYTE ARITH. \n"
375 .asciz "NO LOAD FILE \n"
376 .asciz "LOAD FILE ERROR \n"
377 .asciz "PROGRAM TOO LARGE \n"
378 .asciz "STACK OVERFLOW \n"
379 .asciz "HEAP OVERFLOW \n"
380 .asciz "ILLEGAL INSTRUCTION\n"
381 .asciz "ILLEGAL SIZE ARG. \n"
382 .asciz "CASE ERROR \n"
383 .asciz "ADDRESS NON EX. MEM\n"
384 .asciz "BAD POINTER USED \n"
385 .asciz "PR COUNT. OUT RANGE\n"
386 .asciz "BAD ARG. OF LAE \n"
387 .asciz "BAD MONITOR CALL \n"
388 .asciz "ARG OF LIN TOO HIGH\n"
389 .asciz "GTO DESCR. ERROR \n"
390 .asciz "BAD RETURN SIZE \n"
394 .asciz "ON SOURCE LINE OF\n"
396 !-----------------------------------------------------------------------------
397 ! SUBROUTINES FOR THE INTERPRETOR
398 !------------------------------------------------------------------------------
401 nexttab: move.l linused,a1
403 cmp.l #linused,a1 !top of buffer reached?
404 bne 1f !if so back to bottom
410 !SUBROUTINE FOR PRINTING TABLES . EXPECTS BOTTOM OF TABLE IN a4 AND FILE
411 !DESCRIPTOR IN d0 .IN maxcount NUMBER OF 4 BYTE WORDS IN THE TABLE.
413 tabprint: mov d0,-(sp) !KEEP FILE DESCRIPTOR FOR WRITING
415 move.l firstp,a1 !IN a1 POINTER TO CURRENT PROC.
416 move.l #0,a2 !IN a2 POINTER TO FILENAME .
418 beq 9f !LAST PROCEDURE , EXCEPTION .
419 move.l d0,a6 !IN a6 POINTER TO NEXT PROCEDURE .
420 7: move.l 8(a6),d7 !COUNTPTR OF NEXT IN d7
426 8: move.l 8(a1),d6 !COUNTPTR OF CURRENT IN d6.
427 move.l 12(a1),d5 !FIRST LINE NUMBER IN d5.
428 beq 1f !NO LINES : GO ON.
429 cmp.l 20(a1),a2 !START PRINTING FILE NAME .
431 move.l 20(a1),a2 !NEW FILE NAME.
432 cmp.l #0,a2 !NO FILE NAME .
434 move.l #0,d1 !START SCANNING FILE NAME
435 5: move.b (a2),d0 !d1 WILL CONTAIN NUMBER OF SYMBOLS.
443 mov 8(sp),-(sp) !WRITE FILE NAME.
447 add.l #4,sp !CLEAN STACK.
448 6: sub.l d6,d7 !IN d7 NUMBER OF LINES OF CURRENT PROC.
451 move.l d5,d1 !SET UP FOR CALLING itoa.
459 bsr _Xwrite !PRINT LINE NUMBER AND INTEGER .
462 add.l #4,sp !CLEAN STACK.
463 add.l #1,d5 !NEXT LINE NUMBER .
464 add.l #4,d6 !NEXT COUNT.
465 sub.l #1,d7 !ONE LINE LESS TO GO.
470 add.l wrd,sp !REMOVE FILE DESCR.
472 9: move.l maxcount,d7
473 move.l #0,a6 !NO NEXT PROCEDURE.