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

⟦aceb457e4⟧ TextFile

    Length: 6272 (0x1880)
    Types: TextFile
    Names: »COMMAND.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⟧ »COMMAND.C« 

TextFile

#include "cdb2.h"							        

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

help() æ

	printf("debugger commands are:Øn");
	printf(" bÆreakÅ ÆfnÅ Æsn ÆcountÅÅØn");
	printf(" clear              all breakpointsØn");
	printf(" , dÆumpÅ pÆrintÅ   contents of memoryØn");
	printf(" gÆoÅØn");
	printf(" lÆistÅØn");
	printf(" lÆistÅ aÆrgsÅØn");
	printf(" lÆistÅ bÆreaksÅØn");
	printf(" lÆistÅ gÆlobalsÅØn");
	printf(" lÆistÅ lÆocalsÅØn");
	printf(" lÆistÅ mÆapÅØn");
	printf(" lÆistÅ tÆracebackÅØn");
	printf(" quit               exit to CP/MØn");
	printf(" rÆesetÅ ÆfnÅ ÆsnÅ  a breakpointØn");
	printf(" run                start execution, debugger offØn");
	printf(" sÆetÅ var val ÆcÅ  a variableØn");
	printf(" tÆraceÅ ÆnumÅ      execute num statements, displaying sn'sØn");
	printf(" uÆntraceÅ ÆnumÅ    execute num statements, silentlyØn");
å

printasn(n) unsigned n; æ

	/* print a statement number.  If 4 high order bits are on, then
	 * use decimal format (low order 12 bits . high order 4).
	 */

	if (n==0xffff)
		printf("-1");
	else æ
		printf("%d",n&0x0fff);
		if (n&0xf000)
			printf(".%d",n>>12);
		å
å

listbreaks () æ
	int i;

	for (i=0; i<nbreaks; i++) æ
		printf("%s ",breaktabÆiÅ.bfnt->fntname);
		printasn(breaktabÆiÅ.bsn);
	        if (breaktabÆiÅ.bcount!=1)
			printf("   (%d)Øn",breaktabÆiÅ.bcount);
		else
			putchar('Øn');
		å
å

listit(l) char *l; æ
	/* process a list command */

	char subcmdÆ10Å, *garbage;

	get_token(&l, subcmd, garbage);

	switch (tolower(*subcmd)) æ
	    case 0:
		printf("current location: %s ",curfnt->fntname);
		printasn(cursn);
		putchar('Øn');
		break;
	    case 'a':
		if (curfnt->fntst!=NIL)
			printargs();
		else if (curargs == NIL)
			printf("can't list args to %s because it has called a functionØn",
			       curfnt->fntname);
		else æ
			printf("first argument address is %04xØn",curargs);
			printf("Æ1Å = %04x = %d, Æ2Å = %04x = %d, Æ3Å = %04x = %dØn",
			        *curargs, *curargs, *(curargs+1), *(curargs+1),
			        *(curargs+2), *(curargs+2) );
			printf("Æ4Å = %04x = %d, Æ5Å = %04x = %d, Æ6Å = %04x = %dØn",
			        *(curargs+3), *(curargs+3), *(curargs+4),
			        *(curargs+4), *(curargs+5), *(curargs+5) );
			å
		break;
	    case 'g':
		printlg(globalp);
	        break;
	    case 'l':
		if (curfnt->fntst!=NIL)
			printlg(curfnt->fntst);
		else
 			printf("local symbols not availableØn");
	        break;
	    case 'm':
		map();
		break;
	    case 't':
		trace();
	        break;
	    case 'b':
		listbreaks();
		break;
	    default:
		printf("illegal list subcommandØn");
	    å
å

trace () æ
	int i;

	for (i=1; i<ntraces; i++)
		if (tracetabÆiÅ.tsn!=0xffff) æ
			printf("%s ",addr2fnt(tracetabÆiÅ.taddr)->fntname);
			printasn(tracetabÆiÅ.tsn);
			printf(" calledØn");
			å
		else
			printf("%s calledØn",
				addr2fnt(tracetabÆiÅ.taddr)->fntname);

	printf("%sØn",curfnt->fntname );
å

compare(s, pat) char *s, *pat; æ

	while (*pat && tolower(*s++) == tolower(*pat)) 
		pat++;

	return !*pat;
å

breakargs(l, fnt, sn) char **l; struct fntentry **fnt; unsigned *sn; æ

	/* Process arguments to break and reset commands.  Determines
	 * function (and sets fnt) and statement number (sets sn).
	 * l is pointer to pointer to input line 
	 *
	 * syntax: 
	 * 	Æfunction nameÅ ÆlineÆ.statement within lineÅÅ
	 * if function name is ommitted, current function assumed.
	 * if line ommitted, zero (i.e., function entry) assumed.
	 */

	char nameÆ10Å, class;
	int high;

	if (0 == (class = get_token(l, name, sn))) æ
		printf("arguments missingØn");
		return ERROR;
		å
	else if (class==INTEGER)
		*fnt = curfnt;
	else æ
		if (ERROR == (*fnt = name2fnt(name))) æ
			printf("%s does not existØn",name);
			return ERROR;
			å
		if (INTEGER != get_token(l, name, sn))
			*sn = 0;
		å

	if ('.' == **l) æ
		(*l)++;
		if (INTEGER != get_token(l, name, &high)) æ
			printf("invalid statement number %d.%sØn",*sn,name);
			return ERROR;
			å
		*sn ø= high<<12;
		å
å

setbreak(l) char *l; æ
	unsigned sn, count;
	struct fntentry *fnt;
	char nameÆ20Å;

	if (ERROR!=breakargs(&l,&fnt,&sn)) æ
		if (INTEGER != get_token(&l, name, &count))
			count = 1;
		insertbreak(fnt,sn,count);
		å
å

resetbreak(l) char *l; æ
	unsigned sn;
	struct fntentry *fnt;

	if (ERROR!=breakargs(&l,&fnt,&sn))
		deletebreak(fnt,sn);
å

map() æ
	/* print a load module map of the target program.
	 */

	struct fntentry *q;
	int i;

	for (i = 0, q = fntab-1; (q-1) > fntabend; q--, i++) æ
		if (!(i&3)) putchar('Øn');
		printf("%-8s  %04x     ", q->fntname, q->fntaddr);
		å
	putchar('Øn');
å

command() æ

	/* get and process commands.
	 */

	char *l, lineÆ128Å, cmdÆ10Å;
	int garbage;

	walkcount = trace_display = 0;
	while (1) æ
		cancel_char = 0;
		putchar('>');
		l = gets(line);
		get_token(&l, cmd, &garbage);
		switch (tolower(*cmd)) æ
		    case 'b':
		        setbreak(l);
			break;
		    case 'c':
			if (compare(cmd,"clear"))
				clearbreaks();
			else 
				goto wrong;
			break;
		    case 'l':
			listit(l);
			break;
		    case 'q':
			if (compare(cmd,"quit"))
				exit();
			else 
				goto wrong;
			break;
		    case 'r':
			if (!compare(cmd,"run")) æ
			        resetbreak(l);
				break;
				å
			movmem("Ø341Ø043Ø043Ø351",8*RST_NUM,4);
			/*    POP H INX H x2  PCHL  */
			zapbreaks();	      /* fall through */
		    case 'g':
		        return;
			break;
		    case 't':
			trace_display = 1;    /* fall through */
		    case 'w': case 'u':
		        if (INTEGER!=get_token(&l, cmd, &walkcount))
			        walkcount = 1;
			return;
			break;
		    case 's':
		        set(l);
			break;
		    case '?': case 'h':
		        help();
			break;
		    case ',':  case 'd': case 'p':
		        print(l);
			break;
#ifdef DEBUG
		    case 'z':
		        debug = !debug;
			printf("debug %sØn", debug ? "on" : "off");
			break;
#endif
	wrong:	    default:
			printf("illegal commandØn");
		    å
		å    

å

«eof»