bh01@CLUTX.BITNET (Russell Nelson) (03/17/87)
Clarkson University's Heath Users group has brought microEmacs ver 3.8f up on these machines from the source: machine os switches notes/linking --------------------------------------------------------------------- vax 11/780 vms vms easy gould 9080 BSD 4.3 bsc termcap -ltermcap Z-248 bata Zenith xeniex 3 v7 termcap -ltermcap Z-248 Micro Port's Sys V.2 usg termcap -lcurses Z-248/opus w/32032 sys V.2 usg termcap -lcurses pc clone MSDOS 3.1 msc (v4) EGA no 'peek' and 'poke' Z-100 MSDOS 2.21 msc (v4) z100 new files TI-PRO MSDOS 3.2 msc (v4) tipc easy changes we have done to uEmacs 3.8f ------------------ termio.c -------------------------- line 263: add <| MSC> and <asmputc> ttputc() : _____ #if MSDOS & (LATTICE | AZTEC | MSC) & ~IBMPC & ~(Z100 & MSC) bdos(6, c, 0); #endif #if MSC & Z100 extern int asmputc(); asmputc(); #endif -------------------- vt52.c -------------------------- line 60-76: no more '&' TERM term = { NROW-1, NROW-1, NCOL, NCOL, MARGIN, SCRSIZ, NPAUSE, vt52open, ttclose, vt52kopen, vt52kclose, ttgetc, ttputc, ttflush, vt52move, vt52eeol, vt52eeop, vt52beep, vt52rev, vt52cres #if COLOR , vt52fcol, vt52bcol #endif }; line 139: add '| UGS' to the #if vt52open() { #if V7 | BSD | UGS register char *cp; ------------ st520.c and vmsvt.v -------------------- kill the '&' in term struct. just like you did in vt52.c ------------------ estruct.h ------------------------ line 62: add the Z100 switch #define VT100 0 /* Handle VT100 style keypad. */ #define Z100 1 /* Zenith Z-100. */ #define LK201 0 /* Handle LK201 style keypad. */ ------------------ ebind.h --------------------------- line 142: add Z100 key bindings. #if BSD {META|'S', bktoshell}, #endif {META|'U', upperword}, {META|'V', backpage}, {META|'W', copyregion}, {META|'X', namedcmd}, {META|'Z', quickexit}, {META|0x7F, delbword}, #if Z100 {0x7F, backdel}, /* Delete */ {0x8D, namedcmd}, /* Enter */ {0x95, help}, /* Help */ {0x96, gotoeob}, /* F0 */ {0x97, showcpos}, /* F1 */ {0x98, showcpos}, /* F2 */ {0x99, showcpos}, /* F3 */ {0x9A, showcpos}, /* F4 */ {0x9B, showcpos}, /* F5 */ {0x9C, showcpos}, /* F6 */ {0x9D, showcpos}, /* F7 */ {0x9E, showcpos}, /* F8 */ {0x9F, showcpos}, /* F9 */ {0xA0, showcpos}, /* F10 */ {0xA1, showcpos}, /* F11 */ {0xA2, showcpos}, /* F12 */ {0xA3, insspace}, /* Ichar */ {0xA4, openline}, /* Iline */ {0xA5, backline}, /* Up */ {0xA6, forwline}, /* Down */ {0xA7, forwchar}, /* Right */ {0xA8, backchar}, /* Left */ {0xA9, showcpos}, /* Home */ {0xAA, ctrlg}, /* Break */ {0xAD, quit}, /* Kp- */ {0xAE, filefind}, /* Kp. */ {0xB0, filewrite}, /* Kp0 */ {0xB1, showcpos}, /* Kp1 */ {0xB2, showcpos}, /* Kp2 */ {0xB3, showcpos}, /* Kp3 */ {0xB4, showcpos}, /* Kp4 */ {0xB5, showcpos}, /* Kp5 */ {0xB6, showcpos}, /* Kp6 */ {0xB7, showcpos}, /* Kp7 */ {0xB8, showcpos}, /* Kp8 */ {0xB9, showcpos}, /* Kp9 */ {0xCD, showcpos}, /* sEnter */ {0xD5, ctrlg}, /* sHelp */ {0xD6, gotobob}, /* sF0 */ {0xD7, showcpos}, /* sF1 */ {0xD8, showcpos}, /* sF2 */ {0xD9, showcpos}, /* sF3 */ {0xDA, showcpos}, /* sF4 */ {0xDB, showcpos}, /* sF5 */ {0xDC, showcpos}, /* sF6 */ {0xDD, showcpos}, /* sF7 */ {0xDE, showcpos}, /* sF8 */ {0xDF, showcpos}, /* sF9 */ {0xE0, showcpos}, /* sF10 */ {0xE1, showcpos}, /* sF11 */ {0xE2, showcpos}, /* sF12 */ {0xE3, forwdel}, /* Dchar */ {0xE4, killtext}, /* Dline */ {0xE5, backpage}, /* sUp */ {0xE6, forwpage}, /* sDown */ {0xE7, gotoeol}, /* sRight */ {0xE8, gotobol}, /* sLeft */ {0xE9, showcpos}, /* sHome */ {0xEA, showcpos}, /* sBreak */ {0xED, showcpos}, /* sKp- */ {0xEE, showcpos}, /* sKp. */ {0xF0, nextbuffer}, /* sKp0 */ {0xF1, showcpos}, /* sKp1 */ {0xF2, showcpos}, /* sKp2 */ {0xF3, showcpos}, /* sKp3 */ {0xF4, showcpos}, /* sKp4 */ {0xF5, showcpos}, /* sKp5 */ {0xF6, showcpos}, /* sKp6 */ {0xF7, showcpos}, /* sKp7 */ {0xF8, showcpos}, /* sKp8 */ {0xF9, showcpos}, /* sKp9 */ #endif #if MSDOS & (HP150 == 0) & (WANGPC == 0) & (HP110 == 0) {SPEC|CTRL|'_', forwhunt}, -------------- new files ------------------- +++++++++++++++ z100.c ++++++++++++++++++++ /* * The routines in this file * provide support for Zenith Z100 and Heath H-100 (vt52/h19) * It compiles into nothing if not a Z100 style device. */ #define termdef 1 /* don't define "term" external */ #include <stdio.h> #include "estruct.h" #include "edef.h" #if Z100 #define NROW 24 /* Screen size. */ #define NCOL 80 /* Edit if you want to. */ #define MARGIN 8 /* size of minimim margin and */ #define SCRSIZ 64 /* scroll size for extended lines */ #define NPAUSE 100 /* # times thru update to pause */ #define BIAS 0x20 /* Origin 0 coordinate bias. */ #define ESC 0x1B /* ESC character. */ #define BEL 0x07 /* ascii bell character */ #define BLACK 0x30 /* Z100 attribute for Black */ #define BLUE 1+BLACK /* Z100 attribute for Blue */ #define RED 2+BLACK /* Z100 attribute for Red */ #define MAGENTA 3+BLACK /* Z100 attribute for Magenta */ #define GREEN 4+BLACK /* Z100 attribute for Green */ #define CYAN 5+BLACK /* Z100 attribute for Cyan */ #define YELLOW 6+BLACK /* Z100 attribute for Yellow */ #define WHITE 7+BLACK /* Z100 attribute for White */ extern int ttopen(); /* Forward references. */ extern int ttclose(); extern int z100open(); extern int z100close(); extern int z100kopen(); extern int z100kclose(); extern int ttgetc(); extern int ttputc(); extern int ttflush(); extern int z100move(); extern int z100eeol(); extern int z100eeop(); extern int z100beep(); extern int z100rev(); extern int z100cres(); #if COLOR extern int z100fcol(); extern int z100bcol(); int cfcolor = -1; /* current forground color */ int cbcolor = -1; /* current background color */ int ctrans[] = /* ansi to Z100 color translation table */ {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE}; #endif /* * Dispatch table. All the * hard fields just point into the * terminal I/O code. */ TERM term = { NROW-1, NROW-1, NCOL, NCOL, MARGIN, SCRSIZ, NPAUSE, z100open, z100close, z100kopen, z100kclose, ttgetc, ttputc, ttflush, z100move, z100eeol, z100eeop, z100beep, z100rev, z100cres #if COLOR , z100fcol, z100bcol #endif }; z100move(row, col) { ttputc(ESC); ttputc('Y'); ttputc(row+BIAS); ttputc(col+BIAS); } z100eeol() { ttputc(ESC); ttputc('K'); } z100eeop() { #if COLOR z100fcol(gfcolor); z100bcol(gbcolor); #endif ttputc(ESC); ttputc('J'); } z100rev(status) /* set the reverse video state */ int status; /* TRUE = reverse video, FALSE = normal video */ { if (status == 0) { ttputc(ESC); ttputc('q'); } else { ttputc(ESC); ttputc('p'); } } z100cres() /* change screen resolution - (not here though) */ { return(TRUE); } spal() /* change palette string */ { /* Does nothing here */ } #if COLOR z100fcol(color) /* set the forground color */ int color; /* color to set */ { cfcolor = ctrans[color]; ttputc(ESC); ttputc('m'); ttputc(cfcolor); ttputc(cbcolor); } z100bcol(color) /* set the background color */ int color; /* color to set */ { cfcolor = ctrans[color]; ttputc(ESC); ttputc('m'); ttputc(cfcolor); ttputc(cbcolor); } #endif z100beep() { #ifdef BEL ttputc(ESC); ttflush(); #endif } z100open() { #if V7 | BSD | USG register char *cp; char *getenv(); if ((cp = getenv("TERM")) == NULL) { puts("Shell variable TERM not defined!"); exit(1); } if (strcmp(cp, "z100") != 0 && strcmp(cp, "z19") != 0) { puts("Terminal type not 'z100'or 'z19' !"); exit(1); } #endif ttputc(ESC); ttputc('y'); ttputc('?'); revexist = TRUE; ttopen(); } z100close() { #if COLOR z100fcol(7); z100bcol(0); #endif ttclose(); } z100kopen() { } z100kclose() { } #if FLABEL fnclabel(f, n) /* label a function key */ int f,n; /* default flag, numeric argument [unused] */ { /* on machines with no function keys...don't bother */ return(TRUE); } #endif #else z100hello() { } #endif ++++++++++++++++ z100bios.asm ++++++++++++++++ ;History:46,1 _TEXT SEGMENT BYTE PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' _DATA ENDS CONST SEGMENT WORD PUBLIC 'CONST' CONST ENDS _BSS SEGMENT WORD PUBLIC 'BSS' _BSS ENDS bios_seg segment at 40h org 9 bios_conout label far bios_seg ends DGROUP GROUP CONST, _BSS, _DATA ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP parm equ ss:[bp] _TEXT SEGMENT public _asmputc putc_stack struc putc_bp dw ? putc_return dd ? char db ? putc_stack ends _asmputc proc far push bp mov bp,sp mov al,parm.char call bios_conout pop bp ret _asmputc endp _TEXT ends end ------------------- tcap.c ------------------------- line 235: no 'TERMCAP' after #endif #endif ------------------- vmsvt.c------------------------ line 356: no 'VMSVT' after #endif #endif -------------------- dolock.c --------------------- line 210 no 'bsdunix' after #endif #endif -------------------- line.c ------------------------- line 105: This came from net.sources /* * This routine gets called when a character is changed in place in the current * buffer. It updates all of the required flags in the buffer and window * system. The flag used is passed as an argument; if the buffer is being * displayed in more than 1 window we change EDIT to HARD. Set MODE if the * mode line needs to be updated (the "*" has to be set). * Modified by Walter Bright to reduce update times. * From: Walter Bright <BRIGHT@DATAIO.DATA-IO.COM> */ lchange(flag) register int flag; { register WINDOW *wp; if ((curbp->b_flag&BFCHG) == 0) /* First change, so */ { flag |= WFMODE; /* update mode lines. */ curbp->b_flag |= BFCHG; } for (wp = wheadp; wp; wp = wp->w_wndp) { if (wp->w_bufp == curbp) { wp->w_flag |= flag; if (wp != curwp) wp->w_flag |= WFHARD; } } } --------------------- basic.c ---------------------------- line 428: add function from net.sources /********************************* * Search for the next occurence of the character at dot. * If character is a (){}[]<>, search for matching bracket, taking * proper account of nesting. * Written by Walter Bright. * From: Walter Bright <BRIGHT@DATAIO.DATA-IO.COM> */ int searchparen(f, n) { register LINE *clp; register int cbo; register int len; register int i; char chinc,chdec,ch; int count; int forward; static char bracket[][2] = {{'(',')'},{'<','>'},{'[',']'},{'{','}'}}; clp = curwp->w_dotp; /* get pointer to current line */ cbo = curwp->w_doto; /* and offset into that line */ count = 0; len = llength(clp); if (cbo >= len) chinc = '\n'; else chinc = lgetc(clp,cbo); forward = TRUE; /* assume search forward */ chdec = chinc; for (i = 0; i < 4; i++) if (bracket[i][0] == chinc) { chdec = bracket[i][1]; break; } for (i = 0; i < 4; i++) if (bracket[i][1] == chinc) { chdec = bracket[i][0]; forward = FALSE; /* search backwards */ break; } while (1) { if (forward) { if (cbo >= len) { /* proceed to next line */ clp = lforw(clp); if (clp == curbp->b_linep) /* if end of buffer */ break; len = llength(clp); cbo = 0; } else cbo++; } else /* backward */ { if (cbo == 0) { clp = lback(clp); if (clp == curbp->b_linep) break; len = llength(clp); cbo = len; } else --cbo; } ch = (cbo < len) ? lgetc(clp,cbo) : '\n'; if (eq(ch,chdec)) { if (count-- == 0) { /* We've found it */ curwp->w_dotp = clp; curwp->w_doto = cbo; curwp->w_flag |= WFMOVE; return (TRUE); } } else if (eq(ch,chinc)) count++; } mlwrite("Not found"); return (FALSE); } ------------------- efunc.h ---------------------------- line 38: new function binding. extern int swapmark(); /* Swap "." and mark */ extern int searchparen(); /* searches for (){}[]<> */ extern int forwsearch(); /* Search forward */ line 361: new function binding. {"search-forward", forwsearch}, {"search-parenthesis", searchparen}, {"search-reverse", backsearch}, ------------------------------------------------------------- I don't suspect you will want to include the .asm we did for the z100. If you remove the '~(Z100 & MSC)' and the whole '#if MSC & Z100' in termio.c, it will work fine, but will not be as fast as the .asm ver. You should note that the z100 now is the most 'intelligent' hard coded terminal that will work over a rs-232 line.. if you compile it on for your sysV machine with a z100 on line you can have full color and everyting!! With the same code you can also compile a 'native' version that either uses hyper bios or normal int 21h calls to the screen. MSC ver 4 was used on all MSDOS ports. We have also done a TeX version of the manual. Clarkson's Heath Users Group ------------------------- Rob Logan