sources-request@mirror.UUCP (03/14/87)
Submitted by: ihnp4!itivax!duncan!lawrence (Daniel Lawrence) Mod.sources: Volume 9, Issue 36 Archive-name: uemacs3.8b/Part04 #! /bin/sh # This is a shell archive. Remove anything before this line, # then unpack it by saving it in a file and typing "sh file". # If this archive is complete, you will see the message: # "End of archive 4 (of 14)." # Contents: ebind.h eval.c menu.cmd st520.c # Wrapped by rs@mirror on Fri Mar 13 13:23:45 1987 PATH=/bin:/usr/bin:/usr/ucb ; export PATH echo shar: Extracting \"ebind.h\" \(11355 characters\) if test -f ebind.h ; then echo shar: Will not over-write existing file \"ebind.h\" else sed "s/^X//" >ebind.h <<'END_OF_ebind.h' X/* EBIND: Initial default key to function bindings for X MicroEMACS 3.7 X*/ X X/* X * Command table. X * This table is *roughly* in ASCII order, left to right across the X * characters of the command. This expains the funny location of the X * control-X commands. X */ XKEYTAB keytab[NBINDS] = { X {CTRL|'A', gotobol}, X {CTRL|'B', backchar}, X {CTRL|'C', insspace}, X {CTRL|'D', forwdel}, X {CTRL|'E', gotoeol}, X {CTRL|'F', forwchar}, X {CTRL|'G', ctrlg}, X {CTRL|'H', backdel}, X {CTRL|'I', tab}, X {CTRL|'J', indent}, X {CTRL|'K', killtext}, X {CTRL|'L', refresh}, X {CTRL|'M', newline}, X {CTRL|'N', forwline}, X {CTRL|'O', openline}, X {CTRL|'P', backline}, X {CTRL|'Q', quote}, X {CTRL|'R', backsearch}, X {CTRL|'S', forwsearch}, X {CTRL|'T', twiddle}, X {CTRL|'U', unarg}, X {CTRL|'V', forwpage}, X {CTRL|'W', killregion}, X {CTRL|'X', cex}, X {CTRL|'Y', yank}, X {CTRL|'Z', backpage}, X {CTRL|']', meta}, X {CTLX|CTRL|'B', listbuffers}, X {CTLX|CTRL|'C', quit}, /* Hard quit. */ X {CTLX|CTRL|'F', filefind}, X {CTLX|CTRL|'I', insfile}, X {CTLX|CTRL|'L', lowerregion}, X {CTLX|CTRL|'M', delmode}, X {CTLX|CTRL|'N', mvdnwind}, X {CTLX|CTRL|'O', deblank}, X {CTLX|CTRL|'P', mvupwind}, X {CTLX|CTRL|'R', fileread}, X {CTLX|CTRL|'S', filesave}, X {CTLX|CTRL|'U', upperregion}, X {CTLX|CTRL|'V', viewfile}, X {CTLX|CTRL|'W', filewrite}, X {CTLX|CTRL|'X', swapmark}, X {CTLX|CTRL|'Z', shrinkwind}, X {CTLX|'?', deskey}, X {CTLX|'!', spawn}, X {CTLX|'@', pipe}, X {CTLX|'#', filter}, X {CTLX|'=', showcpos}, X {CTLX|'(', ctlxlp}, X {CTLX|')', ctlxrp}, X {CTLX|'^', enlargewind}, X {CTLX|'0', delwind}, X {CTLX|'1', onlywind}, X {CTLX|'2', splitwind}, X {CTLX|'A', setvar}, X {CTLX|'B', usebuffer}, X {CTLX|'C', spawncli}, X#if BSD X {CTLX|'D', bktoshell}, X#endif X {CTLX|'E', ctlxe}, X {CTLX|'F', setfillcol}, X {CTLX|'K', killbuffer}, X {CTLX|'M', setmode}, X {CTLX|'N', filename}, X {CTLX|'O', nextwind}, X {CTLX|'P', prevwind}, X#if ISRCH X {CTLX|'R', risearch}, X {CTLX|'S', fisearch}, X#endif X {CTLX|'W', resize}, X {CTLX|'X', nextbuffer}, X {CTLX|'Z', enlargewind}, X#if WORDPRO X {META|CTRL|'C', wordcount}, X#endif X#if CFENCE X {META|CTRL|'F', getfence}, X#endif X {META|CTRL|'H', delbword}, X {META|CTRL|'K', unbindkey}, X {META|CTRL|'L', reposition}, X {META|CTRL|'M', delgmode}, X {META|CTRL|'N', namebuffer}, X {META|CTRL|'R', qreplace}, X {META|CTRL|'S', newsize}, X {META|CTRL|'T', newwidth}, X {META|CTRL|'V', scrnextdw}, X#if WORDPRO X {META|CTRL|'W', killpara}, X#endif X {META|CTRL|'Z', scrnextup}, X {META|' ', setmark}, X {META|'?', help}, X {META|'!', reposition}, X {META|'.', setmark}, X {META|'>', gotoeob}, X {META|'<', gotobob}, X {META|'~', unmark}, X#if APROP X {META|'A', apro}, X#endif X {META|'B', backword}, X {META|'C', capword}, X {META|'D', delfword}, X#if CRYPT X {META|'E', setkey}, X#endif X {META|'F', forwword}, X {META|'G', gotoline}, X {META|'K', bindtokey}, X {META|'L', lowerword}, X {META|'M', setgmode}, X#if WORDPRO X {META|'N', gotoeop}, X {META|'P', gotobop}, X {META|'Q', fillpara}, X#endif X {META|'R', sreplace}, X#if BSD X {META|'S', bktoshell}, X#endif X {META|'U', upperword}, X {META|'V', backpage}, X {META|'W', copyregion}, X {META|'X', namedcmd}, X {META|'Z', quickexit}, X {META|0x7F, delbword}, X X#if MSDOS & (HP150 == 0) & (WANGPC == 0) & (HP110 == 0) X {SPEC|CTRL|'_', forwhunt}, X {SPEC|CTRL|'S', backhunt}, X {SPEC|71, gotobob}, X {SPEC|72, backline}, X {SPEC|73, backpage}, X {SPEC|75, backchar}, X {SPEC|77, forwchar}, X {SPEC|79, gotoeob}, X {SPEC|80, forwline}, X {SPEC|81, forwpage}, X {SPEC|82, insspace}, X {SPEC|83, forwdel}, X {SPEC|115, backword}, X {SPEC|116, forwword}, X#if WORDPRO X {SPEC|132, gotobop}, X {SPEC|118, gotoeop}, X#endif X {SPEC|84, cbuf1}, X {SPEC|85, cbuf2}, X {SPEC|86, cbuf3}, X {SPEC|87, cbuf4}, X {SPEC|88, cbuf5}, X {SPEC|89, cbuf6}, X {SPEC|90, cbuf7}, X {SPEC|91, cbuf8}, X {SPEC|92, cbuf9}, X {SPEC|93, cbuf10}, X#endif X X#if HP150 X {SPEC|32, backline}, X {SPEC|33, forwline}, X {SPEC|35, backchar}, X {SPEC|34, forwchar}, X {SPEC|44, gotobob}, X {SPEC|46, forwpage}, X {SPEC|47, backpage}, X {SPEC|82, nextwind}, X {SPEC|68, openline}, X {SPEC|69, killtext}, X {SPEC|65, forwdel}, X {SPEC|64, ctlxe}, X {SPEC|67, refresh}, X {SPEC|66, reposition}, X {SPEC|83, help}, X {SPEC|81, deskey}, X#endif X X#if HP110 X {SPEC|0x4b, backchar}, X {SPEC|0x4d, forwchar}, X {SPEC|0x48, backline}, X {SPEC|0x50, forwline}, X {SPEC|0x43, help}, X {SPEC|0x73, backword}, X {SPEC|0x74, forwword}, X {SPEC|0x49, backpage}, X {SPEC|0x51, forwpage}, X {SPEC|84, cbuf1}, X {SPEC|85, cbuf2}, X {SPEC|86, cbuf3}, X {SPEC|87, cbuf4}, X {SPEC|88, cbuf5}, X {SPEC|89, cbuf6}, X {SPEC|90, cbuf7}, X {SPEC|91, cbuf8}, X#endif X X#if AMIGA X {SPEC|'?', help}, X {SPEC|'A', backline}, X {SPEC|'B', forwline}, X {SPEC|'C', forwchar}, X {SPEC|'D', backchar}, X {SPEC|'T', backpage}, X {SPEC|'S', forwpage}, X {SPEC|'a', backword}, X {SPEC|'`', forwword}, X {SPEC|'P', cbuf1}, X {SPEC|'Q', cbuf2}, X {SPEC|'R', cbuf3}, X {SPEC|'S', cbuf4}, X {SPEC|'T', cbuf5}, X {SPEC|'U', cbuf6}, X {SPEC|'V', cbuf7}, X {SPEC|'W', cbuf8}, X {SPEC|'X', cbuf9}, X {SPEC|'Y', cbuf10}, X X#endif X X#if ST520 X {SPEC|'?', help}, X {SPEC|'A', backline}, X {SPEC|'B', forwline}, X {SPEC|'C', forwchar}, X {SPEC|'D', backchar}, X {SPEC|'T', backpage}, X {SPEC|'S', forwpage}, X {SPEC|'a', backword}, X {SPEC|'`', forwword}, X {SPEC|'P', cbuf1}, X {SPEC|'Q', cbuf2}, X {SPEC|'R', cbuf3}, X {SPEC|'S', cbuf4}, X {SPEC|'T', cbuf5}, X {SPEC|'U', cbuf6}, X {SPEC|'V', cbuf7}, X {SPEC|'W', cbuf8}, X {SPEC|'X', cbuf9}, X {SPEC|'Y', cbuf10}, X X#endif X X#if WANGPC X SPEC|0xE0, quit, /* Cancel */ X SPEC|0xE1, help, /* Help */ X SPEC|0xF1, help, /* ^Help */ X SPEC|0xE3, ctrlg, /* Print */ X SPEC|0xF3, ctrlg, /* ^Print */ X SPEC|0xC0, backline, /* North */ X SPEC|0xD0, gotobob, /* ^North */ X SPEC|0xC1, forwchar, /* East */ X SPEC|0xD1, gotoeol, /* ^East */ X SPEC|0xC2, forwline, /* South */ X SPEC|0xD2, gotobop, /* ^South */ X SPEC|0xC3, backchar, /* West */ X SPEC|0xD3, gotobol, /* ^West */ X SPEC|0xC4, ctrlg, /* Home */ X SPEC|0xD4, gotobob, /* ^Home */ X SPEC|0xC5, filesave, /* Execute */ X SPEC|0xD5, ctrlg, /* ^Execute */ X SPEC|0xC6, insfile, /* Insert */ X SPEC|0xD6, ctrlg, /* ^Insert */ X SPEC|0xC7, forwdel, /* Delete */ X SPEC|0xD7, killregion, /* ^Delete */ X SPEC|0xC8, backpage, /* Previous */ X SPEC|0xD8, prevwind, /* ^Previous */ X SPEC|0xC9, forwpage, /* Next */ X SPEC|0xD9, nextwind, /* ^Next */ X SPEC|0xCB, ctrlg, /* Erase */ X SPEC|0xDB, ctrlg, /* ^Erase */ X SPEC|0xDC, ctrlg, /* ^Tab */ X SPEC|0xCD, ctrlg, /* BackTab */ X SPEC|0xDD, ctrlg, /* ^BackTab */ X SPEC|0x80, ctrlg, /* Indent */ X SPEC|0x90, ctrlg, /* ^Indent */ X SPEC|0x81, ctrlg, /* Page */ X SPEC|0x91, ctrlg, /* ^Page */ X SPEC|0x82, ctrlg, /* Center */ X SPEC|0x92, ctrlg, /* ^Center */ X SPEC|0x83, ctrlg, /* DecTab */ X SPEC|0x93, ctrlg, /* ^DecTab */ X SPEC|0x84, ctrlg, /* Format */ X SPEC|0x94, ctrlg, /* ^Format */ X SPEC|0x85, ctrlg, /* Merge */ X SPEC|0x95, ctrlg, /* ^Merge */ X SPEC|0x86, setmark, /* Note */ X SPEC|0x96, ctrlg, /* ^Note */ X SPEC|0x87, ctrlg, /* Stop */ X SPEC|0x97, ctrlg, /* ^Stop */ X SPEC|0x88, forwsearch, /* Srch */ X SPEC|0x98, backsearch, /* ^Srch */ X SPEC|0x89, sreplace, /* Replac */ X SPEC|0x99, qreplace, /* ^Replac */ X SPEC|0x8A, ctrlg, /* Copy */ X SPEC|0x9A, ctrlg, /* ^Copy */ X SPEC|0x8B, ctrlg, /* Move */ X SPEC|0x9B, ctrlg, /* ^Move */ X SPEC|0x8C, namedcmd, /* Command */ X SPEC|0x9C, spawn, /* ^Command */ X SPEC|0x8D, ctrlg, /* ^ */ X SPEC|0x9D, ctrlg, /* ^^ */ X SPEC|0x8E, ctrlg, /* Blank */ X SPEC|0x9E, ctrlg, /* ^Blank */ X SPEC|0x8F, gotoline, /* GoTo */ X SPEC|0x9F, usebuffer, /* ^GoTo */ X#endif X X {0x7F, backdel}, X X /* special internal bindings */ X SPEC|META|'W', wrapword, /* called on word wrap */ X X {0, NULL} X}; X X#if RAINBOW X X#include "rainbow.h" X X/* X * Mapping table from the LK201 function keys to the internal EMACS character. X */ X Xshort lk_map[][2] = { X Up_Key, CTRL+'P', X Down_Key, CTRL+'N', X Left_Key, CTRL+'B', X Right_Key, CTRL+'F', X Shift+Left_Key, META+'B', X Shift+Right_Key, META+'F', X Control+Left_Key, CTRL+'A', X Control+Right_Key, CTRL+'E', X Prev_Scr_Key, META+'V', X Next_Scr_Key, CTRL+'V', X Shift+Up_Key, META+'<', X Shift+Down_Key, META+'>', X Cancel_Key, CTRL+'G', X Find_Key, CTRL+'S', X Shift+Find_Key, CTRL+'R', X Insert_Key, CTRL+'Y', X Options_Key, CTRL+'D', X Shift+Options_Key, META+'D', X Remove_Key, CTRL+'W', X Shift+Remove_Key, META+'W', X Select_Key, CTRL+'@', X Shift+Select_Key, CTLX+CTRL+'X', X Interrupt_Key, CTRL+'U', X Keypad_PF2, META+'L', X Keypad_PF3, META+'C', X Keypad_PF4, META+'U', X Shift+Keypad_PF2, CTLX+CTRL+'L', X Shift+Keypad_PF4, CTLX+CTRL+'U', X Keypad_1, CTLX+'1', X Keypad_2, CTLX+'2', X Do_Key, CTLX+'E', X Keypad_4, CTLX+CTRL+'B', X Keypad_5, CTLX+'B', X Keypad_6, CTLX+'K', X Resume_Key, META+'!', X Control+Next_Scr_Key, CTLX+'N', X Control+Prev_Scr_Key, CTLX+'P', X Control+Up_Key, CTLX+CTRL+'P', X Control+Down_Key, CTLX+CTRL+'N', X Help_Key, CTLX+'=', X Shift+Do_Key, CTLX+'(', X Control+Do_Key, CTLX+')', X Keypad_0, CTLX+'Z', X Shift+Keypad_0, CTLX+CTRL+'Z', X Main_Scr_Key, CTRL+'C', X Keypad_Enter, CTLX+'!', X Exit_Key, CTLX+CTRL+'C', X Shift+Exit_Key, CTRL+'Z' X}; X X#define lk_map_size (sizeof(lk_map)/2) X#endif X END_OF_ebind.h if test 11355 -ne `wc -c <ebind.h`; then echo shar: \"ebind.h\" unpacked with wrong size! fi # end of overwriting check fi echo shar: Extracting \"eval.c\" \(10700 characters\) if test -f eval.c ; then echo shar: Will not over-write existing file \"eval.c\" else sed "s/^X//" >eval.c <<'END_OF_eval.c' X/* EVAL.C: Expresion evaluation functions for X MicroEMACS X X written 1986 by Daniel Lawrence */ X X#include <stdio.h> X#include "estruct.h" X#include "edef.h" X#include "evar.h" X X#if MEGAMAX & ST520 Xoverlay "eval" X#endif X Xchar value[80]; /* buffer to return value in */ X Xvarinit() /* initialize the user variable list */ X X{ X register int i; X X for (i=0; i < MAXVARS; i++) X uv[i].u_name[0] = 0; X} X Xchar *gtfun(fname) /* evaluate a function */ X Xchar *fname; /* name of function to evaluate */ X X{ X register int fnum; /* index to function to eval */ X register int status; /* return status */ X char arg1[NSTRING]; /* value of first argument */ X char arg2[NSTRING]; /* value of second argument */ X char arg3[NSTRING]; /* value of third argument */ X static char result[2 * NSTRING]; /* string result */ X X /* look the function up in the function table */ X fname[3] = 0; /* only first 3 chars significant */ X for (fnum = 0; fnum < NFUNCS; fnum++) X if (strcmp(fname, funcs[fnum].f_name) == 0) X break; X X /* return errorm on a bad reference */ X if (fnum == NFUNCS) X return(errorm); X X /* retrieve the first argument */ X if ((status = macarg(arg1)) != TRUE) X return(errorm); X X /* if needed, retrieve the second argument */ X if (funcs[fnum].f_type >= DYNAMIC) { X if ((status = macarg(arg2)) != TRUE) X return(errorm); X X /* if needed, retrieve the third argument */ X if (funcs[fnum].f_type >= TRINAMIC) X if ((status = macarg(arg3)) != TRUE) X return(errorm); X } X X /* and now evaluate it! */ X switch (fnum) { X case UFADD: return(itoa(atoi(arg1) + atoi(arg2))); X case UFSUB: return(itoa(atoi(arg1) - atoi(arg2))); X case UFTIMES: return(itoa(atoi(arg1) * atoi(arg2))); X case UFDIV: return(itoa(atoi(arg1) / atoi(arg2))); X case UFMOD: return(itoa(atoi(arg1) % atoi(arg2))); X case UFNEG: return(itoa(-atoi(arg1))); X case UFCAT: strcpy(result, arg1); X return(strcat(result, arg2)); X case UFLEFT: return(strncpy(result, arg1, atoi(arg2))); X case UFRIGHT: return(strcpy(result, &arg1[atoi(arg2)-1])); X case UFMID: return(strncpy(result, &arg1[atoi(arg2)-1], X atoi(arg3))); X case UFNOT: return(ltos(stol(arg1) == FALSE)); X case UFEQUAL: return(ltos(atoi(arg1) == atoi(arg2))); X case UFLESS: return(ltos(atoi(arg1) < atoi(arg2))); X case UFGREATER: return(ltos(atoi(arg1) > atoi(arg2))); X case UFSEQUAL: return(ltos(strcmp(arg1, arg2) == 0)); X case UFSLESS: return(ltos(strcmp(arg1, arg2) < 0)); X case UFSGREAT: return(ltos(strcmp(arg1, arg2) > 0)); X case UFIND: return(getval(arg1)); X } X X exit(-11); /* never should get here */ X} X Xchar *gtusr(vname) /* look up a user var's value */ X Xchar *vname; /* name of user variable to fetch */ X X{ X X register int vnum; /* ordinal number of user var */ X X /* scan the list looking for the user var name */ X for (vnum = 0; vnum < MAXVARS; vnum++) X if (strcmp(vname, uv[vnum].u_name) == 0) X break; X X /* return errorm on a bad reference */ X if (vnum == MAXVARS) X return(errorm); X X return(uv[vnum].u_value); X} X Xchar *gtenv(vname) X Xchar *vname; /* name of environment variable to retrieve */ X X{ X register int vnum; /* ordinal number of var refrenced */ X X /* scan the list, looking for the referenced name */ X for (vnum = 0; vnum < NEVARS; vnum++) X if (strcmp(vname, envars[vnum]) == 0) X break; X X /* return errorm on a bad reference */ X if (vnum == NEVARS) X return(errorm); X X /* otherwise, fetch the appropriate value */ X switch (vnum) { X case EVFILLCOL: return(itoa(fillcol)); X case EVPAGELEN: return(itoa(term.t_nrow + 1)); X case EVCURCOL: return(itoa(getccol(FALSE))); X case EVCURLINE: return(itoa(getcline())); X case EVRAM: return(itoa((int)(envram / 1024l))); X case EVFLICKER: return(ltos(flickcode)); X case EVCURWIDTH:return(itoa(term.t_nrow)); X case EVCBUFNAME:return(curbp->b_bname); X case EVCFNAME: return(curbp->b_fname); X case EVSRES: return(sres); X case EVDEBUG: return(ltos(macbug)); X case EVSTATUS: return(ltos(cmdstatus)); X } X} X Xint setvar(f, n) /* set a variable */ X Xint f; /* default flag */ Xint n; /* numeric arg (can overide prompted value) */ X X{ X register int vnum; /* ordinal number of var refrenced */ X register int status; /* status return */ X register int vtype; /* type of variable to set */ X register char * sp; /* scratch string pointer */ X char var[NVSIZE+1]; /* name of variable to fetch */ X char value[NSTRING]; /* value to set variable to */ X X /* first get the variable to set.. */ X if (clexec == FALSE) { X status = mlreply("Variable to set: ", &var[0], NVSIZE); X if (status != TRUE) X return(status); X } else { /* macro line argument */ X /* grab token and skip it */ X execstr = token(execstr, var); X } X X /* check the legality and find the var */ Xsv01: vtype = -1; X switch (var[0]) { X X case '$': /* check for legal enviromnent var */ X for (vnum = 0; vnum < NEVARS; vnum++) X if (strcmp(&var[1], envars[vnum]) == 0) { X vtype = TKENV; X break; X } X break; X X case '%': /* check for existing legal user variable */ X for (vnum = 0; vnum < MAXVARS; vnum++) X if (strcmp(&var[1], uv[vnum].u_name) == 0) { X vtype = TKVAR; X break; X } X if (vnum < MAXVARS) X break; X X /* create a new one??? */ X for (vnum = 0; vnum < MAXVARS; vnum++) X if (uv[vnum].u_name[0] == 0) { X vtype = TKVAR; X strcpy(uv[vnum].u_name, &var[1]); X break; X } X break; X X case '&': /* indirect operator? */ X var[4] = 0; X if (strcmp(&var[1], "ind") == 0) { X /* grab token, and eval it */ X execstr = token(execstr, var); X strcpy(var, getval(var)); X goto sv01; X } X } X X /* if its not legal....bitch */ X if (vtype == -1) { X mlwrite("%%No such variable"); X return(FALSE); X } X X /* get the value for that variable */ X if (f == TRUE) X strcpy(value, itoa(n)); X else { X status = mlreply("Value: ", &value[0], NSTRING); X if (status != TRUE) X return(status); X } X X /* and set the appropriate value */ X status = TRUE; X switch (vtype) { X case TKVAR: /* set a user variable */ X if (uv[vnum].u_value != NULL) X free(uv[vnum].u_value); X sp = malloc(strlen(value) + 1); X if (sp == NULL) X return(FALSE); X strcpy(sp, value); X uv[vnum].u_value = sp; X break; X X case TKENV: /* set an environment variable */ X status = TRUE; /* by default */ X switch (vnum) { X case EVFILLCOL: fillcol = atoi(value); X break; X case EVPAGELEN: status = newsize(TRUE, atoi(value)); X break; X case EVCURCOL: status = setccol(atoi(value)); X break; X case EVCURLINE: status = gotoline(TRUE, atoi(value)); X break; X case EVRAM: break; X case EVFLICKER: flickcode = stol(value); X break; X case EVCURWIDTH:status = newwidth(TRUE, atoi(value)); X break; X case EVCBUFNAME:strcpy(curbp->b_bname, value); X curwp->w_flag |= WFMODE; X break; X case EVCFNAME: strcpy(curbp->b_fname, value); X curwp->w_flag |= WFMODE; X break; X case EVSRES: status = TTrez(value); X break; X case EVDEBUG: macbug = stol(value); X break; X case EVSTATUS: cmdstatus = stol(value); X break; X } X break; X } X return(status); X} X X/* atoi: ascii string to integer......This is too X inconsistant to use the system's */ X Xatoi(st) X Xchar *st; X X{ X int result; /* resulting number */ X int sign; /* sign of resulting number */ X char c; /* current char being examined */ X X result = 0; X sign = 1; X while ((c = *st++)) { X if (c == '-') X sign *= -1; X if (c >= '0' && c <= '9') X result = result * 10 + c - '0'; X } X X return(result * sign); X} X X/* itoa: integer to ascii string.......... This is too X inconsistant to use the system's */ X Xchar *itoa(i) X Xint i; /* integer to translate to a string */ X X{ X register int digit; /* current digit being used */ X register char *sp; /* pointer into result */ X register int sign; /* sign of resulting number */ X static char result[INTWIDTH+1]; /* resulting string */ X X /* eliminate the trivial 0 */ X if (i == 0) X return("0"); X X /* record the sign...*/ X sign = 1; X if (i < 0) { X sign = -1; X i = -i; X } X X /* and build the string (backwards!) */ X sp = result + INTWIDTH; X *sp = 0; X while (i) { X digit = i % 10; X *(--sp) = '0' + digit; /* and install the new digit */ X i = i / 10; X } X X /* and fix the sign */ X if (sign == -1) { X *(--sp) = '-'; /* and install the minus sign */ X } X X return(sp); X} X Xint gettyp(token) /* find the type of a passed token */ X Xchar *token; /* token to analyze */ X X{ X register char c; /* first char in token */ X X /* grab the first char (this is all we need) */ X c = *token; X X /* no blanks!!! */ X if (c == 0) X return(TKNUL); X X /* a numeric literal? */ X if (c >= '0' && c <= '9') X return(TKLIT); X X switch (c) { X case '"': return(TKSTR); X X case '!': return(TKDIR); X case '@': return(TKARG); X case '#': return(TKBUF); X case '$': return(TKENV); X case '%': return(TKVAR); X case '&': return(TKFUN); X case '*': return(TKLBL); X X default: return(TKCMD); X } X} X Xchar *getval(token) /* find the value of a token */ X Xchar *token; /* token to evaluate */ X X{ X register int status; /* error return */ X register BUFFER *bp; /* temp buffer pointer */ X register int blen; /* length of buffer argument */ X char buf[NSTRING]; /* string buffer for some returns */ X X switch (gettyp(token)) { X case TKNUL: return(""); X X case TKARG: /* interactive argument */ X status = getstring(getval(&token[1]), X buf, NSTRING, ctoec('\n')); X if (status == ABORT) X return(errorm); X return(buf); X X case TKBUF: /* buffer contents fetch */ X X /* grab the right buffer */ X bp = bfind(getval(&token[1]), FALSE, 0); X if (bp == NULL) X return(errorm); X X /* make sure we are not at the end */ X if (bp->b_linep == bp->b_dotp) X return(errorm); X X /* grab the line as an argument */ X blen = bp->b_dotp->l_used; X if (blen > NSTRING) X blen = NSTRING; X strncpy(buf, bp->b_dotp->l_text, blen); X buf[blen] = 0; X X /* and step the buffer's line ptr ahead a line */ X bp->b_dotp = bp->b_dotp->l_fp; X bp->b_doto = 0; X X /* and return the spoils */ X return(buf); X X case TKVAR: return(gtusr(token+1)); X case TKENV: return(gtenv(token+1)); X case TKFUN: return(gtfun(token+1)); X case TKDIR: return(errorm); X case TKLBL: return(itoa(gtlbl(token))); X case TKLIT: return(token); X case TKSTR: return(token+1); X case TKCMD: return(token); X } X} X Xgtlbl(token) /* find the line number of the given label */ X Xchar *token; /* label name to find */ X X{ X return(1); X} X Xint stol(val) /* convert a string to a numeric logical */ X Xchar *val; /* value to check for stol */ X X{ X /* check for logical values */ X if (val[0] == 'F') X return(FALSE); X if (val[0] == 'T') X return(TRUE); X X /* check for numeric truth (!= 0) */ X return((atoi(val) != 0)); X} X Xchar *ltos(val) /* numeric logical to string logical */ X Xint val; /* value to translate */ X X{ X if (val) X return(truem); X else X return(falsem); X} END_OF_eval.c if test 10700 -ne `wc -c <eval.c`; then echo shar: \"eval.c\" unpacked with wrong size! fi # end of overwriting check fi echo shar: Extracting \"menu.cmd\" \(11966 characters\) if test -f menu.cmd ; then echo shar: Will not over-write existing file \"menu.cmd\" else sed "s/^X//" >menu.cmd <<'END_OF_menu.cmd' X; MENU.CMD: Menu learning system for MicroEMACS 3.7 X; X; This file is executed to activate MicroEMACS's X; menu interface code X X; setup windows for use X X add-global-mode "blue" X 1 split-current-window X 5 resize-window X add-mode "red" X view-file "menu1" X name-buffer "menu window" X change-file-name "" X add-mode "view" X next-window X X; Load menu routines as needed X X; Activate Main Menu X X1 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<01" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key execute-macro-3 FN; X bind-to-key execute-macro-4 FN< X bind-to-key execute-macro-5 FN= X bind-to-key execute-macro-6 FN> X bind-to-key execute-macro-7 FN? X bind-to-key execute-macro-8 FN@ X bind-to-key execute-macro-9 FNA X bind-to-key execute-macro-2 FNB X bind-to-key execute-macro-10 FNC X bind-to-key exit-emacs FND X clear-message-line X!endm X X; and bring that menu up X X execute-macro-1 X write-message " [loading MENU system]" X X; set up the editor control menu X X2 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<02" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key execute-macro-11 FN; X bind-to-key execute-macro-12 FN< X bind-to-key execute-macro-13 FN= X bind-to-key execute-macro-14 FN> X bind-to-key execute-macro-15 FN? X bind-to-key execute-macro-16 FN@ X bind-to-key execute-macro-17 FNA X bind-to-key execute-macro-18 FNB X bind-to-key execute-macro-19 FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate word case/screen control Menu X X3 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<03" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key case-word-upper FN; X bind-to-key case-region-upper FN< X bind-to-key case-word-lower FN= X bind-to-key case-region-lower FN> X bind-to-key case-word-capitalize FN? X unbind-key FN@ X bind-to-key clear-and-redraw FNA X bind-to-key set-mark FNB X bind-to-key redraw-display FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate paging/scrolling Menu X X4 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<08" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key previous-page FN; X bind-to-key next-page FN< X bind-to-key move-window-down FN= X bind-to-key move-window-up FN> X bind-to-key scroll-next-up FN? X unbind-key FN@ X bind-to-key scroll-next-down FNA X unbind-key FNB X bind-to-key exchange-point-and-mark FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate cut & paste Menu X X5 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<04" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key set-mark FN; X unbind-key FN< X bind-to-key kill-region FN= X unbind-key FN> X bind-to-key copy-region FN? X unbind-key FN@ X bind-to-key yank FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate Search & replace Menu X X6 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<09" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key search-forward FN; X bind-to-key search-reverse FN< X bind-to-key hunt-forward FN= X bind-to-key hunt-backward FN> X bind-to-key incremental-search FN? X bind-to-key reverse-incremental-search FN@ X bind-to-key replace-string FNA X bind-to-key query-replace-string FNB X unbind-key FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate Deletion Menu X X7 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<05" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key delete-previous-character FN; X unbind-key FN< X bind-to-key delete-next-character FN= X unbind-key FN> X bind-to-key kill-to-end-of-line FN? X unbind-key FN@ X bind-to-key delete-blank-lines FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate Word procesing Menu X X8 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<10" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key previous-word FN; X bind-to-key next-word FN< X bind-to-key previous-paragraph FN= X bind-to-key next-paragraph FN> X bind-to-key fill-paragraph FN? X bind-to-key kill-paragraph FN@ X bind-to-key delete-previous-word FNA X bind-to-key delete-next-word FNB X bind-to-key count-words FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate Insertion Menu X X9 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<06" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key open-line FN; X bind-to-key insert-string FN< X bind-to-key handle-tab FN= X bind-to-key quote-character FN> X bind-to-key insert-space FN? X bind-to-key transpose-characters FN@ X bind-to-key newline-and-indent FNA X unbind-key FNB X bind-to-key newline FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X; Activate Cursor movement Menu X X10 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<07" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key beginning-of-file FN; X bind-to-key previous-line FN< X bind-to-key backward-character FN= X bind-to-key forward-character FN> X bind-to-key end-of-file FN? X bind-to-key next-line FN@ X bind-to-key beginning-of-line FNA X bind-to-key end-of-line FNB X bind-to-key execute-macro-21 FNC X bind-to-key execute-macro-1 FND X clear-message-line X!endm X X21 store-macro X @"Line number to go to: " goto-line X!endm X X; Activate Buffer Menu X X11 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<11" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key buffer-position FN; X bind-to-key unmark-buffer FN< X bind-to-key delete-buffer FN= X bind-to-key next-buffer FN> X bind-to-key list-buffers FN? X bind-to-key execute-macro-22 FN@ X bind-to-key name-buffer FNA X unbind-key FNB X bind-to-key select-buffer FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X22 store-macro X filter-buffer @"Name of DOS filter: " X!endm X; Macro Menu X X12 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<11" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key begin-macro FN; X unbind-key FN< X bind-to-key end-macro FN= X unbind-key FN> X bind-to-key execute-macro FN? X unbind-key FN@ X unbind-key FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; Color change Menu X X13 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<12" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key execute-macro-23 FN; X unbind-key FN< X bind-to-key execute-macro-24 FN= X unbind-key FN> X bind-to-key execute-macro-25 FN? X unbind-key FN@ X bind-to-key execute-macro-26 FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; Set forground color X X23 store-macro X save-window X 1 next-window X select-buffer "[color]" X beginning-of-file X insert-string @"Color to change to: " X newline X beginning-of-file X case-word-upper X beginning-of-file X unmark-buffer X select-buffer "menu window" X 1 redraw-display X restore-window X add-mode #"[color]" X delete-buffer "[color]" X!endm X X; Set background color X X24 store-macro X save-window X 1 next-window X select-buffer "[color]" X beginning-of-file X insert-string @"Color to change to: " X newline X beginning-of-file X case-word-lower X beginning-of-file X unmark-buffer X select-buffer "menu window" X 1 redraw-display X restore-window X add-mode #"[color]" X delete-buffer "[color]" X!endm X X; Set global forground color X X25 store-macro X save-window X 1 next-window X select-buffer "[color]" X beginning-of-file X insert-string @"Color to change to: " X newline X beginning-of-file X case-word-upper X beginning-of-file X unmark-buffer X select-buffer "menu window" X 1 redraw-display X restore-window X add-global-mode #"[color]" X delete-buffer "[color]" X!endm X X; Set global background color X X26 store-macro X save-window X 1 next-window X select-buffer "[color]" X beginning-of-file X insert-string @"Color to change to: " X newline X beginning-of-file X case-word-lower X beginning-of-file X unmark-buffer X select-buffer "menu window" X 1 redraw-display X restore-window X add-global-mode #"[color]" X delete-buffer "[color]" X!endm X X; set Mode Menu X X14 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<17" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key add-mode FN; X bind-to-key add-global-mode FN< X bind-to-key delete-mode FN= X bind-to-key delete-global-mode FN> X unbind-key FN? X bind-to-key execute-macro-27 FN@ X unbind-key FNA X unbind-key FNB X bind-to-key select-buffer FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X27 store-macro X @"Column to fill to: " set-fill-column X!endm X X; DOS command Menu X X15 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<13" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key shell-command FN; X unbind-key FN< X bind-to-key pipe-command FN= X unbind-key FN> X bind-to-key i-shell FN? X unbind-key FN@ X bind-to-key quick-exit FNA X unbind-key FNB X bind-to-key exit-emacs FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; Script Menu X X16 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<18" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key execute-file FN; X bind-to-key execute-command-line FN< X bind-to-key execute-buffer FN= X bind-to-key execute-named-command FN> X unbind-key FN? X unbind-key FN@ X unbind-key FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; File access Menu X X17 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<14" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key find-file FN; X bind-to-key save-file FN< X bind-to-key view-file FN= X bind-to-key write-file FN> X bind-to-key read-file FN? X bind-to-key change-file-name FN@ X bind-to-key insert-file FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; Window Menu X X18 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<19" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key split-current-window FN; X bind-to-key delete-other-windows FN< X bind-to-key resize-window FN= X bind-to-key delete-window FN> X bind-to-key shrink-window FN? X bind-to-key grow-window FN@ X bind-to-key next-window FNA X bind-to-key previous-window FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X; key binding Menu X X19 store-macro X save-window X 1 next-window X beginning-of-file X search-forward "<<15" X next-line X 1 redraw-display X restore-window X update-screen X X; ***** Rebind the Function key group X X bind-to-key bind-to-key FN; X unbind-key FN< X bind-to-key unbind-key FN= X unbind-key FN> X bind-to-key describe-key FN? X unbind-key FN@ X bind-to-key describe-bindings FNA X unbind-key FNB X unbind-key FNC X bind-to-key execute-macro-2 FND X clear-message-line X!endm X X clear-message-line END_OF_menu.cmd if test 11966 -ne `wc -c <menu.cmd`; then echo shar: \"menu.cmd\" unpacked with wrong size! fi # end of overwriting check fi echo shar: Extracting \"st520.c\" \(10316 characters\) if test -f st520.c ; then echo shar: Will not over-write existing file \"st520.c\" else sed "s/^X//" >st520.c <<'END_OF_st520.c' X/* X XThe routines in this file provide support for the Atari ST520 or 1040 Xusing VT52 emulation. The I/O services are provided by routines in X"termio.c". It compiles into nothing if not a ST520 style device. The Xbell on the ST520 is terrible, so the "beep" routine is conditionalized Xon defining BEL. X X*/ X X#define termdef 1 /* don't define "term" external */ X X#include <stdio.h> X#include "estruct.h" X#include "edef.h" X X#if MEGAMAX Xoverlay "st520" X#endif X X#if ATARI & ST520 & MEGAMAX X#include <osbind.h> X#include <ctype.h> X X#define LINEA_INIT 0xA000 X#define V_CEL_WR -0x28 X#define V_CEL_MY -0x2a X#define V_CEL_HT -0x2e X#define V_FNT_AD -0x16 X#define V_OFF_AD -0x0a X#define V_DISAB -346 X X#define NROW 24 /* Screen size. */ X#define NCOL 80 /* Edit if you want to. */ X#define MARGIN 8 /* size of minimim margin and */ X#define SCRSIZ 64 /* scroll size for extended lines */ X#define NPAUSE 25 /* # times thru update to pause */ X#define BIAS 0x20 /* Origin 0 coordinate bias. */ X#define ESC 0x1B /* ESC character. */ X#define BEL 0x07 /* ascii bell character */ X Xextern int ttopen(); /* Forward references. */ Xextern int ttgetc(); Xextern int ttputc(); Xextern int ttflush(); Xextern int ttclose(); Xextern int st520move(); Xextern int st520eeol(); Xextern int st520eeop(); Xextern int st520beep(); Xextern int st520open(); Xextern int st520close(); Xextern int st520rev(); Xextern int st520cres(); Xextern int st520kopen(); Xextern int st520kclose(); X X#if COLOR Xextern int st520fcol(); Xextern int st520bcol(); X Xint cfcolor = -1; /* current fg (character) color */ Xint cbcolor = -1; /* current bg color */ Xint oldpal[8]; /* pallette when emacs was invoked */ Xint newpal[8] = { /* default emacs pallette */ X 0x000, 0x700, 0x070, 0x770, 0x007, 0x707, 0x077, 0x777}; X#endif X Xint STncolors = 0; /* number of colors */ Xint STrez; /* physical screen resolution */ X X/* X * Dispatch table. All the X * hard fields just point into the X * terminal I/O code. X */ XTERM term = { X NROW-1, X NCOL, X MARGIN, X MARGIN, X SCRSIZ, X NPAUSE, X &st520open, X &st520close, X &st520kopen, X &st520kclose, X &ttgetc, X &ttputc, X &ttflush, X &st520move, X &st520eeol, X &st520eeop, X &st520beep, X &st520rev, X &st520cres X#if COLOR X , &st520fcol, X &st520bcol X#endif X}; X struct KBDvecs { X int (*midivec) (); X int (*vkbderr) (); X int (*vmiderr) (); X int (*statvec) (); X int (*mousevec) (); X int (*clockvec) (); X int (*joyvec) (); X int (*midisys) (); X int (*ikbdsys) (); X }; X struct Param { X char topmode; X char buttons; X char xparam; X char yparam; X int xmax,ymax; X int xinitial,yinitial; X }; X struct KBDvecs *kbdvecs; X struct Param *paramp; X char kbdcmds[25]; X Xst520move(row, col) X{ X ttputc(ESC); X ttputc('Y'); X ttputc(row+BIAS); X ttputc(col+BIAS); X} X Xst520eeol() X{ X ttputc(ESC); X ttputc('K'); X} X Xst520eeop() X{ X X#if COLOR X st520fcol(gfcolor); X st520bcol(gbcolor); X#endif X ttputc(ESC); X ttputc('J'); X} X Xst520rev(status) /* set the reverse video state */ X Xint status; /* TRUE = reverse video, FALSE = normal video */ X X{ X X if(status) { X ttputc(ESC); X ttputc('p'); X } X else { X ttputc(ESC); X ttputc('q'); X } X} X X#if COLOR Xst520fcol(color) Xint color; X{ X if(color == cfcolor || !STncolors) X return; X else { X X ttputc(ESC); X ttputc('b'); X ttputc(color & 0x0f); X cfcolor = color; X } X} X Xst520bcol(color) Xint color; X{ X if(color == cbcolor || !STncolors) X return; X else { X ttputc(ESC); X ttputc('c'); X ttputc(color & 0x0f); X cbcolor = color; X } X X} X#endif X Xst520beep() X{ X#ifdef BEL X ttputc(BEL); X ttflush(); X#endif X} X Xst520open() X{ X int i,j,k; X long phys, log; /* screen bases */ X X/* IMPORTANT: it is ABSOLUTELY necessary that the default resolution be the X * largest possible so that display will allocate (malloc) the maximum X * size for the VIDEO arrray X */ X STrez = Getrez(); X switch(STrez) { X case 0: /* low res 25x40 16 colors */ X strcpy(sres, "LOW"); X phys = Physbase(); X log = Logbase(); X Setscreen(log, phys, 1); X STrez = 1; X /* fall thru to med res */ X X case 1: /* med res 25x80 4 colors */ X if (STrez == 1) strcpy(sres, "MEDIUM"); X term.t_nrow = 25 - 1; X term.t_ncol = 80; X grez = 1; X#if COLOR X STncolors = 4; X for(i=0;i<8;i++) { X oldpal[i] = Setcolor(i,newpal[i]); X } X#endif X break; X case 2: /* high res 25x80 no colors */ X strcpy(sres, "HIGH"); X term.t_nrow = 40 - 1; X term.t_ncol = 80; X grez = 2; X make_8x10(); /* create a smaller font */ X set_40(); /* and go to 40 line mode */ X#if COLOR X STncolors = 0; X#endif X break; X } X X revexist = TRUE; X eolexist = TRUE; X paramp = (struct Param *)malloc(sizeof(struct Param)); X kbdvecs = (struct KBDvecs *)Kbdvbase(); X paramp -> topmode = 0; X paramp -> buttons = 4; X paramp -> xparam = 8; X paramp -> yparam = 10; X paramp -> xmax = 79; X paramp -> ymax = 23; X paramp -> xinitial = 0; X paramp -> yinitial = 0; X Initmous(1,paramp,kbdvecs -> mousevec); X X i = 0; X kbdcmds[i++] = 0x0a; /*set mouse keycode mode */ X kbdcmds[i++] = 0x08; X kbdcmds[i++] = 0x0a; X Ikbdws(i-1,&kbdcmds[0]); X Cursconf(1,0); X Cursconf(3,0); X Cconout(27);Cconout('E'); X ttopen(); X} X Xst520close() X X{ X int i,j,k; X X i = 0; X kbdcmds[i++] = 0x80; /*reset mouse keycode mode */ X kbdcmds[i++] = 0x01; X Ikbdws(i-1,&kbdcmds[0]); X if(grez == 2 && STrez == 2) /* b/w monitor in 40 row mode */ X restore(); X X#if COLOR X for(i=0;i<STncolors;i++) X Setcolor(i,oldpal[i]); X#endif X Cconout(27);Cconout('E'); X paramp -> buttons = 0; X Initmous(2,paramp,kbdvecs -> mousevec); X i = 0; X kbdcmds[i++] = 0x80; /*reset the keyboard*/ X kbdcmds[i++] = 0x01; X Ikbdws(i-1,&kbdcmds[0]); X Cursconf(1,0); X ttclose(); X} Xst520kopen() X{ X X} Xst520kclose() X{ X X} X Xst520cres(res) /* change screen resolution */ X Xchar *res; /* resolution to change to */ X X{ X register int nurez; /* number of res to change to */ X int ierr, i, j ,k; X long phys, log; /* screen bases */ X char dum[80]; /* for debugging only */ X X /* determine the needed resolution */ X if (strcmp(res, "LOW") == 0) X nurez = 1; X else if (strcmp(res, "MEDIUM") == 0) X nurez = 2; X else if (strcmp(res, "HIGH") == 0) X nurez = 3; X else X return(FALSE); X X if(grez == nurez) X return(TRUE); X X if(STrez == 2) { /* b/w monitor-only allow hi | med rez */ X switch(nurez) { X case 2: /* high res */ X term.t_nrow = 40 - 1; X term.t_ncol = 80; X make_8x10(); /* create a smaller font */ X set_40(); /* and go to 40 line mode */ X grez = 2; X sgarbf = TRUE; X onlywind(1,1); X strcpy(sres, "HIGH"); X break; X case 1: /* med res */ X term.t_nrow = 25 - 1; X term.t_ncol = 80; X restore(); X grez = 1; X sgarbf = TRUE; X onlywind(1,1); X strcpy(sres, "MEDIUM"); X break; X default: X mlwrite("Invalid resolution"); X return(FALSE); X break; X } X } X else { /* color monitor-only allow low | medium resolution */ X phys = Physbase(); X log = Logbase(); X switch(nurez) { X case 1: X term.t_nrow = 25 - 1; X term.t_ncol = 80; X Setscreen(log, phys, 1); X STncolors = 4; X grez = 1; X sgarbf = TRUE; X onlywind(1,1); X strcpy(sres, "LOW"); X break; X case 0: X term.t_nrow = 25 - 1; X term.t_ncol = 40; X Setscreen(log, phys, 0); X STncolors = 8; X grez = 0; X sgarbf = TRUE; X onlywind(1,1); X strcpy(sres, "MEDIUM"); X break; X default: X mlwrite("%Invalid resolution"); X return(FALSE); X break; X } X } X return(TRUE); X} X XSTcurblink(onoff) Xint onoff; X{ X if(onoff) X Cursconf(2,0); X else X Cursconf(3,0); X} X X Xchar parm_save[28]; Xlong fnt_8x10[640]; X Xmake_8x10() X{ X int i,j,k; X long savea23[2]; X X for(i=0;i<640;i++) X fnt_8x10[i] = 0; X X asm { X movem.l A2-A3,savea23(A6) X X dc.w LINEA_INIT ;A1 -> array of font headers X X lea parm_save(A4),A2 ;A2 -> parameters savearea X move.l V_OFF_AD(A0),(A2)+ X move.l V_FNT_AD(A0),(A2)+ X move.w V_CEL_HT(A0),(A2)+ X move.w V_CEL_MY(A0),(A2)+ X move.w V_CEL_WR(A0),(A2)+ X X X move.l 04(A1),A1 ; A1 -> 8x8 font header X move.l 76(A1),A2 ; A2 -> 8x8 font data X lea fnt_8x10+0x100(A4),A3 ; A3 -> 2nd line of font buffer X move.w #0x200-1,D0 ; D0 <- longword counter for font xfer X Xfnt_loop: X X move.l (A2)+,(A3)+ X dbf D0,fnt_loop X X movem.l savea23(A6),A2-A3 X } X X} X Xset_40() X{ X long savea23[2]; X X asm { X X; X; use the 8x10 character set: 40 line mode X; X X movem.l A2-A3,savea23(A6) X X dc.w LINEA_INIT X X move.l 04(A1),A1 ; A1 -> 8x8 font header X move.l 72(A1),V_OFF_AD(A0) ; v_off_ad <- 8x8 offset table addr X lea fnt_8x10(A4),A2 X move.l A2,V_FNT_AD(A0) ; v_fnt_ad <- 8x10 font data addr X X move.w #10,V_CEL_HT(A0) ; v_cel_ht <- 10 8x10 cell height X move.w #39,V_CEL_MY(A0) ; v_cel_my <- 39 maximum cell "Y" X move.w #800,V_CEL_WR(A0) ; v_cel_wr <- 800 offset to cell Y+1 X X movem.l savea23,A2-A3 X } X} X Xset_20() X{ X long savea23[2]; X X asm { X X; X; use the 8x10 character set: 20 line mode X; X X movem.l A2-A3,savea23(A6) X X dc.w LINEA_INIT ; A0 -> line A variables X X move.l 04(A1),A1 ; A1 -> 8x8 font header X move.l 72(A1),V_OFF_AD(A0) ; v_off_ad <- 8x8 offset table addr X lea fnt_8x10(A4),A2 X move.l A2,V_FNT_AD(A0) ; v_fnt_ad <- 8x10 font data addr X X move.w #10,V_CEL_HT(A0) ; v_cel_ht <- 10 8x10 cell height X move.w #19,V_CEL_MY(A0) ; v_cel_my <- 19 maximum cell "Y" X move.w #1600,V_CEL_WR(A0) ; v_cel_wr <- 800 offset to cell Y+1 X X movem.l savea23,A2-A3 X } X} X X Xrestore() X{ X long savea23[2]; X X asm { X X; return what was saved in parameter save zone X X movem.l A2-A3,savea23(A6) X X dc.w LINEA_INIT ; a0 -> line A variables X X lea parm_save(A4),A2 ; a2 -> parameter save area X move.l (A2)+,V_OFF_AD(A0) X move.l (A2)+,V_FNT_AD(A0) X move.w (A2)+,V_CEL_HT(A0) X move.w (A2)+,V_CEL_MY(A0) X move.w (A2)+,V_CEL_WR(A0) X X movem.l savea23(A6),A2-A3 X } X} XGetCurStat(onoff) Xint onoff; X{ X long savea23[2]; X X asm { X movem.l A2-A3,savea23(A6) X X dc.w LINEA_INIT ; a0 -> line A variables X move.w V_DISAB(A0),onoff(A6) ; 0 = cursor visible X moveq #0,D0 X move.w V_DISAB(A0),D0 X movem.l savea23(A6),A2-A3 X } X} X#else Xsthello() X{ X} X#endif X END_OF_st520.c if test 10316 -ne `wc -c <st520.c`; then echo shar: \"st520.c\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of archive 4 \(of 14\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 14 archives. echo "See the readme file" rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0