home *** CD-ROM | disk | FTP | other *** search
- /****************** debug.c ***************************
- * DEBUG.C
- *
- * (c) Copyright 1985 by Thomas D. Webb.
- * All rights reserved.
- * Permission is granted for unlimited personal, noncomercial
- * use only.
- *-------------------------------------------------------
- *
- * Modified and changed for CP/M by Edmond.Breen 1986.
- * (for original source code for IBM PC and clones see COMPUTER
- * LANGUAGE(1986).Vol 3,Number 2:31-38.)
- *
- * Modifications (E.Breen):
- * Structures: TKB and TCHR_ATTR removed, not required
- * for CP/M use.
- * Most character arrays replaced with pointers, to
- * improve speed.
- * display_trace() function modified, for speed.
- * inkey() function modified to reflect CP/M
- * environment. Returns int value of
- * key from keyboard, instead of a structure
- * address of type TKB.
- * CRTBUF() function replaced with movemem() function,
- * CRTBUF() was not given in the original source.
- * Most variable names shortened to: text,data pair and
- * user_text,variable pair.
- * #define ON and #define OFF moved into debug.h file.
- *------------------------------------------------------------------
- */
-
- #include <stdio.h>
- #include "debug.h"
-
- #define CONTROL_KEY 26 /* ^Z */
- #define VOID
- #define TRUE 1
- #define FALSE 0
- #define BLANK ' '
- #define MAX_ROWS 24 /* rows/screen */
- #define MAX_COLS 80 /* columns/screen */
- #define SCR_SIZE (MAX_COLS * MAX_ROWS) /* screen size */
- #define SCREEN 61440 /* start address or top left hand corner
- of screen for a Microbee. Memory mapped
- VDU. */
- #define BUFFER_SIZE 2000
-
- int trace_sw = OFF;
- static int first_time = TRUE;
- char user_data[MAX_COLS/2];
- static char save_buf[BUFFER_SIZE];
- static char trace_table[MAX_ROWS][MAX_COLS];
-
- inkey()
- {
- int ch;
- if( (ch = bdos(1,0)) == CONTROL_KEY)
- (trace_sw == ON) ? (trace_sw = OFF): (trace_sw = ON);
- return ch;
- }
-
- wait()
- {
- inkey();
- }
-
- init_table()
- {
- int i, j;
- static char trace_msg[] =
- {"Trace table ... Press any key to return ... Press ^Z to toggle off trace"};
-
- for(i=0;i<MAX_ROWS;i++)
- for(j=0;j<MAX_COLS;j++)
- trace_table[i][j]=BLANK;
-
- for(i=0; i < sizeof(trace_msg) ;i++)
- trace_table[0][i] = trace_msg[i];
- }
-
- display_trace(text,data)
- char *text, *data;
- {
- int i;
- if(first_time) {
- init_table();
- first_time = FALSE;
- }
-
- movemem(trace_table[1],trace_table[2],
- sizeof(trace_table)-80);
-
- for(i=0; i< MAX_COLS; i++)
- trace_table[MAX_ROWS-1][i] = BLANK;
- for(i=0; i < MAX_COLS/2 && *text != '\0'; i++)
- trace_table[MAX_ROWS-1][i] = *text++;
- for(i= MAX_COLS/2; i < MAX_COLS && *data !='\0'; i++)
- trace_table[MAX_ROWS-1][i] = *data++;
-
- movemem(save_buf,SCREEN,SCR_SIZE); /* save screen display */
- movemem(SCREEN,trace_table,SCR_SIZE); /*display trace_table */
- wait();
- movemem(SCREEN,save_buf,SCR_SIZE); /* refresh screen display */
- }
-
- movemem(to,from,n)
- unsigned char *to, *from;
- unsigned int n;
- {
- while(n--)
- *to++ = *from++;
- }
-
- t_c(text,varible)
- char *text;
- char varible;
- {
- if(varible == BLANK)
- strcpy(user_data,"BLANK char");
- else
- if(varible == '\0')
- strcpy(user_data,"NULL char");
- else
- sprintf(user_data,"%c",varible);
-
- display_trace(text,user_data);
- }
-
- t_i(text,variable)
- char *text;
- int variable;
- {
- sprintf(user_data,"%d",variable);
- display_trace(text,user_data);
- }
-
- t_l(text,variable)
- char *text;
- long int variable;
- {
- sprintf(user_data,"%ld",variable);
- display_trace(text,user_data);
- }
-
- t_u(text,variable)
- char *text;
- unsigned variable;
- {
- sprintf(user_data,"%u",variable);
- display_trace(text,user_data);
- }
-
- t_f(text,variable)
- char *text;
- float variable;
- {
- sprintf(user_data, "%f",variable);
- display_trace(text,user_data);
- }
-
- t_d(text,varible)
- char *text;
- double varible;
- {
- sprintf(user_data, "%f",varible);
- display_trace(text,user_data);
- }
-
- t_s(text,variable)
- char * text;
- char *variable;
- {
- if(*variable == '\0')
- strcpy(user_data,"NULL string");
- else
- strcpy(user_data,variable);
- display_trace(text,user_data);
- }
-
-
-