From: utzoo!decvax!ucbvax!info-vax Newsgroups: fa.info-vax Title: Might as well put my 3 bits in on SCRFT Article-I.D.: ucbvax.505 Posted: Fri Dec 24 07:25:54 1982 Received: Mon Dec 27 01:13:29 1982 >From EPS@MIT-MC Fri Dec 24 07:22:27 1982 Mail-From: ARPANET host MIT-MC rcvd at 24-Dec-82 0443-PST To: Info-VAX@SRI-CSL Remailed-Date: 24 Dec 1982 0457-PST Remailed-From: the tty of Geoffrey S. Goodfellow Remailed-To: Info-VAX@SRI-CSL: ; Whilst you are busy trying to cons up foreign terminal packages, you might be interested in this: a plug-compatible SCRFT call tracer. All it does is display the calls and their arguments, but it might be useful for debugging an application that uses the terminal-independent screen procedures (or just to satisfy the curious--like why SYSGEN does illegal SCR$ calls). Question: Have any of you written a SCRFT that works fine with everything but MONITOR? I have and it's driving me bananas! Observation: Installing SCRFT /OPEN/SHARE is ok, but /HEADER is asking for trouble. -=EPS=- ------- .title scrftdbg fake SCRFT that traces calls ;;; Eric P. Scott, Caltech/Jet Propulsion Laboratory, December 1982 $dscdef .default displacement,word .psect scrftdbg,nowrt,exe,shr,pic,long BUFSIZ=256 .entry scrftdbg,^m cmpb (ap),#7 ; Make sure called via LIB$CALL_IMAGE blssu 10$ movab -512(sp),sp ; make an output buffer movl 28(ap),r0 ; pick up SCRFT argument list movq 4(r0),r10 pushab (sp) pushl r10 ; SCR$ argument list pushl r11 ; function # calls #3,outfun subl2 sp,r0 ; output line pushab (sp) addl3 r0,#!,-(sp) pushaq (sp) calls #1,g^lib$put_output blbc r0,9$ cmpb r11,#1 ; test if GET_SCREEN bneq 9$ callg (r10),g^lib$get_input 9$: ret 10$: movzwl #^x114,r0 ; SS$_INSFARG ret .entry outfun,^m movl 12(ap),r3 ; buffer pointer movl #^a/SCR$/,(r3)+ movzbl 4(ap),r11 ; function # cmpb r11,#10 ; something we know about? blequ 202$ movb #^a/?/,(r3)+ ; oh well brb 203$ 202$: movaw ntbl,r0 ; move function name into buffer cvtwl (r0)[r11],r11 addl2 r0,r11 movzbl (r11)+,r10 movc3 r10,(r11),(r3) 203$: movb #^a/(/,(r3)+ ; parenthesize argument list pushl r3 pushl 8(ap) pushl 4(ap) calls #3,outarg movb #^a/)/,(r0)+ ret .entry outarg,^m movl 8(ap),r11 ; SCR$ argument list movl 12(ap),r3 ; buffer pointer movzbl (r11),r10 ; # of SCR$ arguments beql 310$ moval 4(r11),r9 ; pointer to each item cmpb 4(ap),#1 ; special hack for GET_SCREEN beql 311$ 303$: movl (r9)+,r8 ; get next item cmpl r8,#132 ; if <=132 assume it's a cursor address blequ 306$ prober #0,#8,(r8) ; could be a pointer to a descriptor beql 306$ ; nothing I can read movl r8,r0 jsb g^str$analyze_sdesc_r1 movl r0,r7 beql 305$ ; null string prober #0,r7,(r1) beql 306$ ; bleah movl r1,r8 ; r7,r8 = count,address 305$: movab as,r1 brb 307$ 306$: movab ul,r1 ; display as unsigned decimal 307$: movab -BUFSIZ(sp),sp ; make buffer for $FAO pushab (sp) ; and a descriptor to it pushl #BUFSIZ!! movzbl (r1)+,r0 ; push descriptor to control string movq r0,-(sp) movq r7,-(sp) pushaq 16(sp) pushaw 20(sp) pushaq 16(sp) calls #5,@#sys$fao movc3 8(sp),16(sp),(r3) ; move to output buffer movab (sp),sp ; clean stack decl r10 ; any more arguments? beql 310$ movb #^a/,/,(r3)+ ; yes, output comma brb 303$ ; back for more 310$: movl r3,r0 ; return updated buffer pointer ret 311$: movl (r9)+,r8 movab xl,r1 ; always display first argument in hex brb 307$ f0: .ascic /PUT_SCREEN/ f1: .ascic /GET_SCREEN/ f2: .ascic /ERASE_PAGE/ f3: .ascic /ERASE_LINE/ f4: .ascic /SET_CURSOR/ f5: .ascic /DOWN_SCROLL/ f6: .ascic /SCREEN_INFO/ f7: .ascic /PUT_LINE/ f8: .ascic /MOVE_CURSOR/ f9: .ascic /SET_SCROLL/ f10: .ascic /UP_SCROLL/ .align word ntbl: .word f0-ntbl .word f1-ntbl .word f2-ntbl .word f3-ntbl .word f4-ntbl .word f5-ntbl .word f6-ntbl .word f7-ntbl .word f8-ntbl .word f9-ntbl .word f10-ntbl as: .ascic /'!AF'/ ul: .ascic /!+!UL/ xl: .ascic /!+!XL/ .end scrftdbg