DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC700 "Piccolo"

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC700 "Piccolo"

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦bbe92a13d⟧ TextFile

    Length: 2688 (0xa80)
    Types: TextFile
    Names: »ATBREAK.C«

Derivation

└─⟦b35f94715⟧ Bits:30003295 BDS C version 1.50 arbejdsdiskette til RC703 Piccolo
└─⟦b35f94715⟧ Bits:30005324 BDS C version 1.50 arbejdsdiskette til RC703 Piccolo
    └─ ⟦this⟧ »ATBREAK.C« 

TextFile

#include "cdb2.h"

/* Copyright (c) 1982 by J. David Kirkland, Jr. */

isbreak() æ
	/* isbreak() determines whether cursn and curfnt are a breakpoint.
	 * The CALLER must check that curbreak != 0xff
	 */

	/* struct breakentry *isb_q;	    */

	isb_q = breaktabÆcurbreakÅ;

	/* first, try to find an entry in breaktab */
	while (curfnt==isb_q->bfnt && cursn > isb_q->bsn)
	      	 isb_q++;

	/* did we find one? if so, decrement bcount and check for zero */
	if (curfnt!=isb_q->bfnt øø cursn!=isb_q->bsn øø --(isb_q->bcount) )
		return 0;
	else æ
		isb_q->bcount = 1;
		return 1;
		å
å

atbreak (sp) struct savearea *sp; æ

	/* the assembly package calls atbreak whenever a RST is encountered.
	 * A pointer to the savearea is passed 
	 */

	unsigned sn, *resume, atret();

	if (0==(sn = *(resume = sp->statement++))) æ
		/* sn == 0 means entry to a new function; stack on tracetab */
		if (ntraces>=MAXTRACES) æ
			if (!trace_full) æ
				printf("fn trace table full (size is %d);",
				        MAXTRACES);
				printf(" fn tracing inactiveØn");
				trace_full = 1;
				å
			å
		else æ
			tracetabÆntracesÅ.taddr = sp->caller_return;
			tracetabÆntraces++Å.tsn = cursn;
			sp->caller_return = atret;
			å
	   	curbreak = (curfnt = addr2fnt(resume))->fntbreakindex;
		curargs = (sp+1);
		å

	cursn = sn;

	if (trace_display && walkcount!=1) æ
		printf("  trace:  %s ",curfnt->fntname);
		printasn(sn);
		printf(" Æ%04xÅØn",sp->statement);
		å       
	if ((walkcount && !--walkcount) øø kbhit() øø
	    (curbreak!=NOBREAK && isbreak()) ) æ
		/* at a breakpoint */
		walkcount = 0;
		trace_display = 0;
		printf("Ønbreak at %s ",curfnt->fntname);
		printasn(sn);
		printf(" Æ%04xÅØn",sp->statement);
		cursave = sp;
		command();
		å

	resumeit(sp);
å

atreturn (h) int h; æ

  	/* when a function returns, it returns here because atbreak() changed
	 * the stacked return address.  atreturn() checks for a breakpoint
	 * at sn == -1 (i.e., function return) and acts accordingly.
	 */

	char *t, stop;

	if (trace_full) æ
		printf("fn tracing now restored.Øn");
		trace_full = 0;
		å
	cursn = -1;

	if ( (stop =  (curbreak!=NOBREAK && isbreak()) øø 
		(walkcount && !--walkcount)  øø kbhit() ) øø trace_display ) æ
		printf(stop ? "Øn" : "  trace:  ");
		printf("%s returning %04x = %d = '",curfnt->fntname,h,h);
		interprete(h>>8);
		interprete(h&255);
		printf("'Øn");
		if (stop)
			command();
		å
	t = tracetabÆ--ntracesÅ.taddr;
	curbreak = (curfnt = addr2fnt(t))->fntbreakindex;
	curargs = NIL;
	return t;
å
«eof»