Subject: Linux-Development Digest #993
From: Digestifier <Linux-Development-Request@senator-bedfellow.MIT.EDU>
To: Linux-Development@senator-bedfellow.MIT.EDU
Reply-To: Linux-Development@senator-bedfellow.MIT.EDU
Date:     Sat, 6 Aug 94 08:13:04 EDT

Linux-Development Digest #993, Volume #1          Sat, 6 Aug 94 08:13:04 EDT

Contents:
  Re: Need help on Linux NFS (S.G. de Bruijn)
  Backpack tape drive (Bill Parke)
  DOSEMU 0.53: Developers and testers needed! (Mark Rejhon)
  Serial IO, drivers & C++  (Henry Arcan)
  1.1.39 compiles with gcc 2.6.0 - seems ok (Alberto Vignani)
  Turle Beach Maui drivers for Linux ? (Richard Ward)
  Re: Linux-1.1.38 broken for 2 Adaptor system [FIX] (Matt Day)
  Re: -= good programmer's editor for X? (Andre April)
  Smail and news over SLIP (lcvanveen@et.tudelft.nl)
  Re: panic: Unable to find empty mailbox for aha1542. (Matt Day)
  Re: dual monitor patches; 1.1.37 DOSEMU problem? (Rob Janssen)

----------------------------------------------------------------------------

From: debruijn@cs.utwente.nl (S.G. de Bruijn)
Subject: Re: Need help on Linux NFS
Date: Fri, 5 Aug 1994 04:58:05 GMT

Yong Chen (yochen@eehpx36) wrote:
:        Could someone please share some NFS experience with me ? I am
: trying to mount "/home" on PC "empc08" to PC "empc05" under "/temp/home".
: The error message I got is:

: $ mount -t nfs empc08:/home /temp/home -o timeo=14,intr ---command line
: " mount clntudp_create: RPC: Program not registered "   ---message line

:        The followings are the changes I made to some related files:

: empc05.ece.uiuc.edu           \
: empc05 root                    \  in "/etc/hosts.equiv"
: empc08.ece.uiuc.edu            /     (empc08 and empc05)
: empc08 root                   /

: if [ -f ${NET}/rpc.portmap ]  \
: then                           \
:  echo -n " portmap"             \  in "/etc/rc.d/rc.inet2"
:  ${NET}/rpc.portmap             /     (empc08 and empc05)
: fi                             /
: /usr/sbin/rpc.nfsd            /

: /home empc05  =================>  in "/etc/exports" (empc08)

: empc08:/home /temp/home nfs timeo=14,intr ==> in "/etc/fstab" (empc05)

Also enable the mountd program from rc.inet2

Steef
==============
S.G. de Bruijn              E-Mail: debruijn@cs.utwente.nl
Twente University of Technology, Dept. of Computer Science 
Enschede                                   The Netherlands
Phone: Work: +53 894191                   Home: +53 334812
=========================== @@ ===========================
signature: file not found

------------------------------

From: parke@uselss.enet.dec.com (Bill Parke)
Subject: Backpack tape drive
Date: 3 Aug 1994 18:37:05 GMT
Reply-To: parke@star.enet.dec.com


Is there a driver (or has anyone looked in to) to talk to the
Backpack (Pract. Solutions) which runs via the parallel port.

I purchased one of these to allow use on the three systems at honme and
it makes moving large ammounts of data between machines (and work) via Sneeker
net much easier than floppys.   It would be nice if I were able to write
Linux tar files to it for the same type of interfacing, and reduce the need
to get a separate backup tape drive for my "PC" just so I could back up
my Linux file system(s).


-- 
=========================================================================

Bill Parke, OpenVMS Engineering         parke@star.enet.dec.com

All opinions in this are my own and not those of my employer

Philosophy:  The only good page fault is no page fault.
             Good software is unfat software.
             It takes thought to right software.
========================================================================

------------------------------

From: mdrejhon@calum.csclub.uwaterloo.ca (Mark Rejhon)
Subject: DOSEMU 0.53: Developers and testers needed!
Date: Wed, 3 Aug 1994 18:19:00 GMT

For those that have read my previous message about getting DOSEMU
development versions.  (If you haven't, please do.  Those DOSEMU
versions work with the newest kernels now)

I am interested in having more DOSEMU developers on the team,
even those who only want to look through DOSEMU and offer suggetions
on how it can be improved!  Testers are also welcome.

One of the things we want to do is get Windows 3.1 working in DOSEMU.
A person on the team wants to get BC++ 3.0 working, while another wants
the DOOM video game to work.   This is very difficult because all this 
would be helped by "VCPI" support and better "DPMI" support.
Some of these tasks require very tricky stuff like instruction
emulation, kernel modification (to get access to the CPU for protected
instructions), and more.  A person named Lutz Mologedy is doing some
of this, but he is very busy.

If there is a VCPI expert who can bring VCPI / DPMI emulation to DOSEMU
so that DOOM, BC++ 3.x, Windows 3.1 will run in DOSEMU, you're strongly
encouraged to give us suggestions on how it can be done.

It has been done by other operating systems like OS/2, Windows NT,
and software like SoftPC running on PowerMacs.   Nothing is impossible,
we just don't have enough knowledge or the time to do this. :-(

Note:
I do not know much about DPMI or VCPI - other members of the team know
more about them than I do.   But I am the person now resonsible for 
remote video and serial emulation code in DOSEMU.  Different people
on the DOSEMU team do things that they want to do about DOSEMU...

You can do what you want....Even just a single Email message with
a few suggestions.  Or go as far to give half an hour worth of coding
and bugfixes.   Or dedicate a bit of your free time, giving a major
improvement (or helping someone do) to DOSEMU...

All you need is a Linux machine that you have run DOSEMU for a while 
on, and a good Email feed.   FTP access is good, but not necessarily
a must.

Please send interested inquiries to the DOSEMU main maintainer at
jmaclean@fox.nstn.ns.ca .....To get onto the DOSEMU mailing list.
Or if you don't know, you can take a look in the source code first,
and test a few things out:

Development release to start with: Latest numbered pre*.tgz file at
tsx-11.mit.edu:/pub/linux/ALPHA/dosemu/private/devel

Xwindows support: ansi_xterm_pre2.0.tgz in the same dir as above..

Comments and bug reports welcome...


------------------------------

From: henry@stdin.gatelink.fr.net (Henry Arcan)
Subject: Serial IO, drivers & C++ 
Date: Thu, 4 Aug 1994 08:40:18 GMT

Hello !

We are a team of students and we are developping a communication server
which allows different sorts of serial peripherics ; the computer should
detect them automatically and the good driver is then running. We
perfectly know how it works with MS-DOS but not with Linux. Of course,
we can use the same method (with interrupts) but isn't there a better
way ?

I imagine that the explication has a good chance of being very long ; so
the best would be to have (free...) C++ classes giving the idea of the
method. The good question is : where are they ?!

Otherwise, where can I find files explaining this ?
As a last resort ('cause of the price !), do you know a good book (sold
in France) about this ?

Since I've still have the keyboard, I put a second question to you :
where can I find serial drivers or informations about their programming
methods with Linux ?

If someone could help me... Thanks a lot !

Henry Arcan

henry@stdin.gatelink.fr.net

 * OLX 2.1 TD * The first Man eit fire and drank light
         

------------------------------

From: Alberto Vignani <alberto.vignani@pmn.it>
Subject: 1.1.39 compiles with gcc 2.6.0 - seems ok
Date: 6 Aug 1994 06:04:37 -0400
Reply-To: alberto.vignani@pmn.it


I compiled 1.1.39 with gcc 2.6.0, optimization -O2 (-O3 seems to be
broken), and I'm now using it. I ran gcc,X and seyon as usual.

Here are all the warnings I got:

make[1]: Entering directory `/usr/src/linux/kernel'
ksyms.c:201: warning: missing braces around initializer for `symbol_table.ref[0]'
bios32.c: In function `pcibios_strerror':
bios32.c:414: warning: function returns address of local variable
** only from 2.6.0

make[2]: Entering directory `/usr/src/linux/drivers/block'
sbpcd.c:594: warning: `sbpcd_dbg_ioctl' defined but not used
** this is very old, also from 2.5.8

make[1]: Entering directory `/usr/src/linux/fs'
super.c: In function `mount_root':
super.c:652: warning: implicit declaration of function `floppy_grab_irq_and_dma'
** also from 2.5.8

My configuration:

Kernel math emulation                   NO
Normal harddisk support                 YES
Secondary AT-controller support         YES
SCSI support                            NO
Network device support                  NO
Joystick support                        NO
CD-ROM drivers                          SBPCD
Filesystems                             MINIX EXT2FS MSDOS PROC ISO9660
Character devices                       PRINTER QIC117 custom
Sound                                   YES (SB16-MPU401)

The new kernel seems to be much faster (maybe it's a matter of swap.. I
will check this further).

Another problem - was already posted but got no answers. Every time I
bootstrap I see this message:

 snd5Unknown MPU mark fe
 MPU: No ACK to command (0xad)
  <MPU-401 MIDI Interface 15.14 > at 0x330 irq 9 drq 0

The MPU-401 driver seems to be nevertheless correctly installed. I have
a MPU clone (MD-401 from Midi Land,Inc.).

Bye
Alberto Vignani

------------------------------

Crossposted-To: comp.os.linux.help
From: rrward@netcom.com (Richard Ward)
Subject: Turle Beach Maui drivers for Linux ?
Date: Sat, 6 Aug 1994 06:55:54 GMT

Okay, I'm going to be installing Linux on my system in the very near future 
(when the CD-ROMs get here) and I wanted to know if anyone has written any 
drivers to get Linux working with the Turtle Beach Maui music card?  If so, 
where would they be?  If not, could I beg one of you Linux geniuses to create 
one?  (I'll send you a box of my wife's delicious chocolate-chip cookies!)

Richard 



------------------------------

From: mday@park.uvsc.edu (Matt Day)
Subject: Re: Linux-1.1.38 broken for 2 Adaptor system [FIX]
Date: Thu, 4 Aug 1994 08:27:19 GMT

In article <31o6i1$sf0@cedar.mr.net> molson@apollo.tricord.com (Mark Olson) writes:
>Gerlach van Beinum (gvb@hermes.bouw.tno.nl) wrote:
>:  I have a PC with 2 Adaptec 1542C's in it. One adaptor has a CD rom and 2
>:  disks on it, the other has a CDD521/10 CD Recorder on it. Normally the
>:  CD recorder has it's power off. Up to Linux-1.1.37 this gave no problems.
>
>:  Linux 1.1.38 Panics with the message 'scsi_devices corrupt(sd)'
>
>--rest deleted--
>
>I get the same error w/ one 1542, 3 disk drives & 1 CDROM.
>This could be my fault, but I also noticed a lot of compilation warnings
>this time around...

Here's a message I just sent to the Linux KERNEL mailing list which
contains a fix for the problem you're seeing:

1.1.38 crashes with "scsi_devices corrupt (sd)" on my system.  I have an
Adaptec 1542C, a couple SCSI hard disks and a SCSI CD-ROM drive.  I
tracked down the problem to the `rscsi_disks' memory not being
initialized to 0, which causes sd_attach() to think that some or all of
the entries in rscsi_disks[] have been taken already when it goes to add
the disk entries.  I noticed that this same bug exists in the sr, st,
and sg modules.  The obvious fix is to initialize the memory to 0, which
the patch below does.  Note that in the st module, I only set the
`device' field to NULL (the essential field in question) instead of
memsetting the whole memory, since it appears that the other fields get
initialized okay.

--- sd.c-       Wed Aug  3 20:08:33 1994
+++ sd.c        Wed Aug  3 20:08:46 1994
@@ -1014,6 +1014,7 @@
 
        rscsi_disks = (Scsi_Disk *) 
          scsi_init_malloc(sd_template.dev_max * sizeof(Scsi_Disk));
+       memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
 
        sd_sizes = (int *) scsi_init_malloc((sd_template.dev_max << 4) * 
                                            sizeof(int));
--- sg.c-       Wed Aug  3 20:08:33 1994
+++ sg.c        Wed Aug  3 20:08:46 1994
@@ -340,6 +340,7 @@
 
    scsi_generics = (struct scsi_generic *) 
      scsi_init_malloc(sg_template.dev_noticed * sizeof(struct scsi_generic));
+   memset(scsi_generics, 0, sg_template.dev_noticed * sizeof(struct scsi_generic));
 
    sg_template.dev_max = sg_template.dev_noticed;
  }
--- sr.c-       Wed Aug  3 20:08:33 1994
+++ sr.c        Wed Aug  3 20:08:46 1994
@@ -768,6 +768,7 @@
 
        sr_template.dev_max = sr_template.dev_noticed;
        scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD));
+       memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD));
 
        sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int));
        memset(sr_sizes, 0, sr_template.dev_max * sizeof(int));
--- st.c-       Wed Aug  3 20:08:34 1994
+++ st.c        Wed Aug  3 20:08:46 1994
@@ -1750,6 +1750,7 @@
 
   for (i=0, SDp = scsi_devices; i < st_template.dev_noticed; ++i) {
     STp = &(scsi_tapes[i]);
+    STp->device = NULL;
     STp->capacity = 0xfffff;
     STp->dirty = 0;
     STp->rw = ST_IDLE;

------------------------------

From: aa@info.ucl.ac.be (Andre April)
Subject: Re: -= good programmer's editor for X?
Date: 4 Aug 1994 08:27:15 GMT

N J Andrews (N.J.Andrews@durham.ac.uk) wrote:
: A couple of us round here us an editor called 'xcoral', it's not super feature
: full, but it does do keyword colouring ( I'm going to work on the syntax bit if I
: can find time ) and has pull-down menus and emacs style key presses. A big plus
: for it that it is built around/on top of an almost ANSI C interpreter ( no more
: trying to workout all those brackets in lisp! ).

: This editor was programmed by a couple of French guys...oh, and BTW it comes with
: a code 'browser' ( displays function names etc. in a little window with
: 'hyper-links' to the code section ). This browser thingy handles C++ classes as
: well.

: It's not perfect, but I prefer it over Emacs!

: -- 
: Nigel J. Andrews
: Astronomical Instrumentation Group
: Physics Department
: University of Durham

: BTW, thanks to Mike Johnson for the Kernel hackers guide, it was beginning to get
: tiresome working out device drivers from the code ( I would probably never have
: guess'd to start my character devices from within the mem device! ).


I made some enhancements to the keyword coloring of xcoral. Now, I can define
keywords with regular expressions (with the exception that expressions are
limited to a single line), and every keyword on every line is colored.
There is howether a few drawbacks:
   - the more keywords you define, the slowest is the scrolling,
   - keywords are not context sensitive !!!

I also made a very simple Pascal mode to test it. I did'nt define every
Pascal keyword as a keyword for xcoral, but only the ones showing the 
structure of the text.

Even if it is not perfect, it is more attractive for beginners than emacs or
vi. It is easy to add functionalities with the 'small ansi C interpretor'.
The most usefull feature is the C/C++ browser.


Here are my modifications (relatives to xcoral-2.1) :

Modification of the definition of KW structure in mode.h :
==========================================================

/*
 *  Les mot cles du mode.
 */   
typedef struct kw {
    char kw_name [32];
    int kw_len;
    char *kw_regexp;
    struct kw *next;
} KW;



Addition of keywords precompilation in function AddKeyword in mode.c :
======================================================================

/*
**      Function name : AddKeyword
**
**      Description :
**      Input :
**      Output :
*/
extern char* compile(char *instring, char *expbuf, char *endbuf, int eof);
void AddKeyword ( mode, name )
    Mode *mode;
    char *name;
{
    KW *kw, *tmp;
    
    if ( name == 0 || (strlen(name) > 30) )
      return;

    kw = (KW *) malloc ( (unsigned) (sizeof (KW) + 2));
    bzero ( (char *) kw, sizeof (KW) + 2);
    (void) strcpy ( (char *) kw -> kw_name, name );
    kw -> kw_len = strlen ( name );
    kw -> kw_regexp = (char *) malloc(256);    /* should be enough */
    (void) compile(kw -> kw_name, kw -> kw_regexp, &(kw->kw_regexp[255]), '\0');
    kw -> next = 0;

    if ( mode -> keywords == 0 )
      mode -> keywords = kw;
    else {
        tmp = mode -> keywords;
        while ( tmp -> next )
          tmp = tmp -> next;
        tmp -> next = kw;
    }
}


Modifications in page.c in order to use regexp :
================================================
1) definition regexp functions below #include
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#define INIT register char *sp = instring;
#define GETC() (*sp++)
#define PEEKC() (*sp)
#define UNGETC(c) (--sp)
#define RETURN(c) return
#define ERROR(c) fprintf(stderr, "regexp: error %d\n", c);
#include <regexp.h>


2) New implementation of function KeywordColor to color every 
occurence of every keyword in the line.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*
**      Function name : KeywordColor
**
**      Description : colorie tous les mots cles de la ligne.
**      Input : 
**      Ouput :
*/
static void KeywordColor ( text, x, y, s, len )
    Text *text;
    int x, y;
    char *s;
    int len;
{
    int n = 0;
    int x_position = x;
    unsigned long fg = text -> fg;
    KW *tmp = text -> current_mode -> keywords;
    char *search_from;

    /* ATTENTION !!! : les recherches sur expression reguliere posent des
       problemes si la chaine se termine par '\n' car le match de
       \<xxx\> comprend le '\n' si xxx est en fin de ligne, ce qu'il
       faut eviter. Comme la chaine s se termine toujours par '\n', il
       suffit de remplacer le '\n' par '\0' en debut de fonction et
       de le remettre a la fin !!!
    */
    s[len] = '\0';
    do {
      search_from=s;
      while (step(search_from, tmp->kw_regexp)) {
        n = loc1 - s;
        if ( n )
          x_position = x + XTextWidth ( text -> font, s, n );
        else x_position = x;
        XSetForeground ( dpy, text -> Cgc, text -> current_mode -> keyword_color );
        XDrawImageString ( dpy, text -> window,
                          text -> Cgc, x_position, y, loc1, loc2 - loc1 );
        search_from = loc2;
      }
      tmp = tmp -> next;
    } while ( tmp != 0 );
    XSetForeground ( dpy, text -> Cgc, fg );
    s[len] = '\n';
}




Tiny Pascal mode (pascal.sc) :
==============================

{
    /* Tiny Pascal Mode  by Andre April (aa@info.ucl.ac.be)*/
    
    create_mode("Pascal");
    
    key_def("Pascal", "\r", "p_insert_and_indent");
    key_def("Pascal", "^xp", "p_procedure_header");
    key_def("Pascal", "^xf", "p_function_header");
    key_def("Pascal", "^xc", "p_save_and_compile");

    key_def("Pascal", "^xg", "go_next");
    key_def("Pascal", "^[f", "forward_word");
    key_def("Pascal", "^[b", "backward_word");
    key_def("Pascal", "^[d", "delete_next_word");
    key_def("Pascal", "^[\b", "delete_previous_word");
    key_def("Pascal", "^[\177", "delete_previous_word");
    key_def("Pascal", "^[u", "upcase_word");
    key_def("Pascal", "^[l", "downcase_word");
    key_def("Pascal", "^[c", "capitalize_word");
    key_def("Pascal", "\t", "p_tabulation");
    
    set_mode_suffixes("Pascal", ".p");
    set_mode_font("Pascal", "-adobe-courier-medium-r-normal--14-140-75-75-m-*-iso8859-1");
    
    /* description des mots cles au moyen d'expressions regulieres */
    /* dans ce cas tres simple : debut_de_mot mot fin_de_mot       */
    set_string_color("Pascal", "red");
    add_colored_string("Pascal", "\\<procedure\\>");
    add_colored_string("Pascal", "\\<function\\>");
    add_colored_string("Pascal", "\\<program\\>");
    add_colored_string("Pascal", "\\<begin\\>");
    add_colored_string("Pascal", "\\<end\\>");
    add_colored_string("Pascal", "\\<for\\>");
    add_colored_string("Pascal", "\\<to\\>");
    add_colored_string("Pascal", "\\<downto\\>");
    add_colored_string("Pascal", "\\<do\\>");
    add_colored_string("Pascal", "\\<repeat\\>");
    add_colored_string("Pascal", "\\<until\\>");
    add_colored_string("Pascal", "\\<while\\>");
    add_colored_string("Pascal", "\\<if\\>");
    add_colored_string("Pascal", "\\<then\\>");
    add_colored_string("Pascal", "\\<else\\>");
    add_colored_string("Pascal", "\\<var\\>");
    add_colored_string("Pascal", "\\<const\\>");
}


int p_block_indent = 4;
int p_tab_size = 4;          /* size of <TAB> */

void p_insert_n_chars(int n, int c);

/*
**      Function name : p_insert_and_indent
**
**      Description : insert a <cr> and align to the first word of the
**              previous non empty line.
**      Input :
**      Output :
*/
p_insert_and_indent()
{
  int pos,bol_to_indent, i, offset;
  int not_found = 1;
  int c;
  
  insert_char('\n');
  pos = bol_to_indent = current_position();
  while ((not_found) && (pos != 0)) {
      goto_previous_line();
      goto_beginning_of_line();
      pos = current_position();
      while ((pos != end_of_line()) && ((c = current_char()) == ' '))
          goto_next_char();

      if (pos != end_of_line()) {
          not_found = 0;
          break;
      }
  }
  
  if (! not_found) {
      offset = current_position();
      goto_beginning_of_line();
      offset -= current_position();
      goto_char(bol_to_indent);
      for (i=1; i<= offset; i++) insert_char(' ');
  }
}

/*
**      Function name : p_tabulation
**
**      Description :insert spaces up to the next tabulation
**      Input :
**      Output :
*/
p_tabulation()
{
  int cur_pos = current_position();
  int bol = beginning_of_line();
  int spaces, i;
  char debug[1024];
  
  spaces = p_tab_size - ((cur_pos - bol) % p_tab_size);
  for (i=0; i< spaces; i++) insert_char(' ');
}



/*
**      Function name : p_procedure_header
**
**      Description : Define a new procedure. Ask only the name.
**      Input :
**      Output :
*/
p_procedure_header()
{
  char *procedurename = gets("Procedure name ? ");
  int pos = current_position();
  int current_indent;
  int i;
  
  if (! procedurename) return;
  if (*procedurename == 7) {
      /* ^G ==> Abort */
      free(procedurename);
      return;
  }
  
  goto_beginning_of_line();
  current_indent = pos - current_position();
  goto_char(pos);
  insert_string("{\n");
  p_insert_n_chars(current_indent,' ');
  wprintf("**    Procedure name: %s\n", procedurename);
  p_insert_n_chars(current_indent, ' ');
  insert_string("**\n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("**    Description: \n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("**    Input:\n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("**    Output:\n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("}\n");
  p_insert_n_chars(current_indent, ' ');
  wprintf("procedure %s;\n", procedurename);
  p_insert_n_chars(current_indent, ' ');
  insert_string("begin\n");
  p_insert_n_chars(current_indent + p_block_indent, ' ');
  insert_string("\n");
  p_insert_n_chars(current_indent, ' ');
  wprintf("end; { %s }\n\n", procedurename);
  goto_line(current_line() - 3);
  goto_end_of_line();
  free(procedurename);
}

/*
**      Function name : p_function_header
**
**      Description : Define a new function. Ask name, arguments and return type
**      Input :
**      Output :
*/
p_function_header()
{
  char *functionname = gets("Function name ? ");
  char *parameters;
  char *returntype;
  int pos = current_position();
  int current_indent;
  int i;
  
  if (! functionname) return;
  if (*functionname == 7) {
      /* ^G ==> Abort */
      free(functionname);
      return;
  }
  
  parameters = gets("Parameters (<Return> if none) ? ");

  returntype = gets("Return type ? ");
  if (! returntype) {
      free(functionname);
      if (parameters) free(parameters);
      return;
  }
  if (*returntype == 7) {
      /* ^G ==> Abort */
      free(functionname);
      if (parameters) free (parameters);
      free(returntype);
  }
  
  goto_beginning_of_line();
  current_indent = pos - current_position();
  goto_char(pos);
  insert_string("{\n");
  p_insert_n_chars(current_indent,' ');
  wprintf("**    Function name: %s\n", functionname);
  p_insert_n_chars(current_indent, ' ');
  insert_string("**\n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("**    Description: \n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("**    Input:\n");
  p_insert_n_chars(current_indent, ' ');
  insert_string("}\n");
  p_insert_n_chars(current_indent, ' ');
  wprintf("function %s", functionname);
  if (parameters != 0) wprintf(" (%s)", parameters);
  wprintf(" : %s;\n", returntype);
  p_insert_n_chars(current_indent, ' ');
  insert_string("begin\n");
  p_insert_n_chars(current_indent + p_block_indent, ' ');
  insert_string("\n");
  p_insert_n_chars(current_indent, ' ');
  wprintf("end; { %s }\n\n", functionname);
  goto_line(current_line() - 3);
  goto_end_of_line();
  free(functionname);
  if (parameters) free(parameters);
  free(returntype);
}


void p_insert_n_chars(int n, int c) {
    int i;
    
    for (i = 1; i<=n; i++)
        insert_char(c);
}


/*
**      Function name : p_save_and_compile
**
**      Description : save file and compile it.
**      Input :
**      Output :
*/
p_save_and_compile()
{
  char command[512];
  char *fname;
  
  fname = filename();
  if (fname) save_file();
  else {
      fname = gets("File name : ");
      if (!fname) return;
      write_file(fname);
  }

  sprintf(command, "uvapc %s ", fname);
  free(fname);
  cmd(command);
}






=====
Andre April
Departement d'Ingenierie Informatique
Universite Catholique de Louvain
Belgium

E-Mail: aa@info.ucl.ac.be
Tel: +32.10.47.31.13

------------------------------

From: lcvanveen@et.tudelft.nl
Subject: Smail and news over SLIP
Date: 4 Aug 94 10:00:58 +0200

Since some time I'm able to get a SLIP link to the internet.
I am looking for someone who has experience in setting up 
a link to a news-server on the net, as well as (and maybe
even more important) got SMAIL setup correctly.
Any help would be greatly appreciated.
Thanks a lot in advance.
Martijn.

------------------------------

From: mday@park.uvsc.edu (Matt Day)
Subject: Re: panic: Unable to find empty mailbox for aha1542.
Date: Thu, 4 Aug 1994 08:45:57 GMT

In article <31o1ur$hn3@sun.cais.com> ericy@cais2.cais.com (Eric Youngdale) writes:
>In article <1994Aug2.124318.169@tengu.in-berlin.de>,
>Kang-Jin Lee <lee@tengu.in-berlin.de> wrote:
>>keith@ksmith.com (Keith Smith) writes:
>>
>>>panic: Unable to find empty mailbox for aha1542.
>>>in swapper task not syncing.
>
>[cat > /dev/snip]
>
>>I was confused by this and did RTFM again. The FM suggested to put the
>>terminator, it has connectors on both sides, that came with the CD-ROM 
>>drive between cable and drive and after doing this, all problems went
>>away.
>
>       This does not surprise me.  The problem of running out of mailboxes
>comes up because I suspect that we are not releasing the mailboxes when 
>we attempt to reset a device.  We only attempt to reset the device when
>a command does not finish or the device locks up, and this tends to happen
>if the cable has termination problems (among other things).
>
>       I have a theory that the enclosed patch will release the 
>mailboxes when we abort a command, and may solve the problem for people 
>who believe that they have a good cable.  Please let me know if it helps
>at all (conversely, please let me know if it does no good, or even worse).
>
>[..]

I recently had an experience which might support your theory.

A couple days ago I had a system which would panic with "unable to find
empty mailbox for aha1542" when I accessed the CD-ROM drive for a
couple minutes.  Before the panic, I would get a few "SCSI host 0 timed
out - aborting command" messages.  Since I could reproduce the problem
under DOS, I decided the cause was probably not software, and swapping
hardware revealed that the 1542 card was bad (of course, before
swapping hardware, I double checked card configuration and bus
termination and couldn't find anything wrong there).  After replacing
the card, things worked fine.

I suspect that with your fix, I would have only seen the ".. timed out
- aborting command" errors, and not the subsequent panic.

------------------------------

From: rob@pe1chl.ampr.org (Rob Janssen)
Subject: Re: dual monitor patches; 1.1.37 DOSEMU problem?
Reply-To: pe1chl@rabo.nl
Date: Sat, 6 Aug 1994 08:58:28 GMT

In <31q7pk$2s6@wea.eel.ufl.edu> acg@kzin.cen.ufl.edu (Alexandra Griffin) writes:

>Thanks for posting those!  Looks like a good justification for
>upgrading to the 1.1.37 kernel release.  I've heard that Dosemu
>doesn't work properly under 1.1.37, though-- is this true?  I
>currently use 1.1.27 and Dosemu 0.52 works OK.   

Yes that is true, but it is being resolved...

Rob
-- 
=========================================================================
| Rob Janssen                | AMPRnet:   rob@pe1chl.ampr.org           |
| e-mail: pe1chl@rabo.nl     | AX.25 BBS: PE1CHL@PI8UTR.#UTR.NLD.EU     |
=========================================================================

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: Linux-Development-Request@NEWS-DIGESTS.MIT.EDU

You can send mail to the entire list (and comp.os.linux.development) via:

    Internet: Linux-Development@NEWS-DIGESTS.MIT.EDU

Linux may be obtained via one of these FTP sites:
    nic.funet.fi				pub/OS/Linux
    tsx-11.mit.edu				pub/linux
    sunsite.unc.edu				pub/Linux

End of Linux-Development Digest
******************************
