|
|
1.1 root 1: #
2: # Copyright (c) 1979 Regents of the University of California
3: #
4: # char sccsid[] = "@(#)08call.s 4.1 10/10/80";
5: #
6: _CALL:
7: cvtbl (r10)+,r0 #entry level of new proc
8: movl (r10)+,r1 #new entry point
9: pushr $R11|R10|R9 #save lino, lc, dp
10: addl2 ap,r1 #calc new entry point
11: addl3 2(r1),ap,r10
12: moval _display(r0),r9 #set up new display pointer
13: jmp (r8)
14:
15: _FCALL:
16: cvtbl (r10)+,r0 #r0 has number of bytes of arguments
17: bneq L0801
18: movl (r10)+,r0
19: L0801:
20: movl (sp)+,r6 #r6 points to formal call struct
21: pushr $R11|R10|R9 #save lino, lc, dp
22: movl (r6),r10 #set new entry point
23: cmpl 6(r10),r0 #check arg count
24: bneq enargs
25: addl3 $_display,4(r6),r9 #set up new display pointer
26: movl 4(r6),r1 #save current display, restore formal display
27: movc3 r1,_display+4,8(r6)[r1]
28: movc3 4(r6),8(r6),_display+4
29: jmp (r8)
30: enargs:
31: movw $ENARGS,_perrno
32: jbr error
33:
34: _FSAV:
35: movl (sp),r6 #r6 points to formal call struct
36: cvtbl (r10)+,4(r6) #set block number
37: addl3 (r10)+,ap,r0 #r0 pts to TRA4
38: addl3 2(r0),ap,(r6) #set entry address
39: movc3 4(r6),_display+4,8(r6) #save current display
40: jmp (r8)
41:
42: _FRTN:
43: cvtbl (r10)+,r0 #r0 has size of returned object
44: bneq L0802
45: movzwl (r10)+,r0
46: L0802:
47: addl3 r0,sp,r1 #r1 points to stack loc of formal call struct
48: movl (r1),r6 #r6 points to formal call struct
49: movc3 r0,(sp),4(sp) #move down the returned value
50: addl2 $4,sp #throw away leftover
51: movl 4(r6),r1 #r1 has display size
52: movc3 r1,8(r6)[r1],_display+4 #restore previous display
53: jmp (r8)
54: #
55: _NODUMP:
56: moval iloop,r8 #disable profiling
57: incw _nodump
58: bicpsw $0xe0 #disable overflow checks
59:
60: _BEG:
61: movzbl (r10)+,r1 #r1 has name size
62: movl (r10)+,r0 #r0 has local variable size
63: addl2 $4,r9 #enter local scope
64: pushl (r9) #save old display value
65: pushal (r10)+ #pointer to entry info
66: movzwl (r10)+,r11 #set new lino
67: addl2 r1,r10 #skip over name text
68: pushl r7 #save I/O info
69: pushl _file
70: subl2 $4,sp #space for top of frame pointer
71: movl sp,(r9) #set new display pointer
72: addl3 r0,sp,r3 #r3 points to new top of stack
73: clrl tempsize(r3) #check for memory (fault => not available)
74: movl r3,(sp) #set new top of stack pointer
75: movl r3,sp #allocate local variables
76: mnegl r0,r6 #r6 has amount of space to alloc
77: cmpl r6,$65535 #check for out of character range
78: bleq L0804
79: L0803:
80: movc5 $0,(r2),$0,$65535,(r3) #continue zero of local variables
81: acbl $65536,$-65535,r6,L0803 #deduct amount zeroed and continue
82: L0804:
83: movc5 $0,(r2),$0,r6,(r3) #zero out local variables
84: jmp (r8)
85:
86: _END:
87: pushl (r9) #flush and close local files
88: calls $1,_pclose
89: movl (r9),sp #deallocate local vars
90: addl2 $4,sp #pop TOS ptr
91: movl (sp)+,_file #restore old I/O info
92: movl (sp)+,r7
93: movzwl *(sp)+,r0 #r0 has number of bytes of parameters
94: movl (sp)+,(r9) #restore old display entry
95: cmpl r9,$_display+4 #exiting main proc ???
96: beql L0805
97: popr $R11|R10|R9 #restore lino, lc, dp
98: addl2 r0,sp #deallocate parameters
99: jmp (r8)
100: L0805:
101: ret #end of interpretation
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.