File: rnl.c

package info (click to toggle)
rnv 1.7.10-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 960 kB
  • ctags: 1,593
  • sloc: ansic: 6,539; lisp: 1,129; sh: 996; makefile: 135; perl: 129; python: 96; sed: 5
file content (55 lines) | stat: -rw-r--r-- 1,426 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* $Id: rnl.c 304 2004-01-15 23:47:45Z dvd $ */

#include <stdarg.h>
#include "erbit.h"
#include "rn.h"
#include "rnc.h"
#include "rnd.h"
#include "rnl.h"

void rnl_default_verror_handler(int erno,va_list ap) {
  if(erno&ERBIT_RNC) {
    rnc_default_verror_handler(erno&~ERBIT_RNC,ap);
  } else if(erno&ERBIT_RND) {
    rnd_default_verror_handler(erno&~ERBIT_RND,ap);
  }
}
void (*rnl_verror_handler)(int er_no,va_list ap)=&rnl_default_verror_handler;

static void verror_handler_rnc(int erno,va_list ap) {rnl_verror_handler(erno|ERBIT_RNC,ap);}
static void verror_handler_rnd(int erno,va_list ap) {rnl_verror_handler(erno|ERBIT_RND,ap);}

static int initialized=0;
void rnl_init(void) {
  if(!initialized) { initialized=1;
    rn_init();
    rnc_init(); rnc_verror_handler=&verror_handler_rnc;
    rnd_init(); rnd_verror_handler=&verror_handler_rnd;
  }
}

void rnl_clear(void) {}

static int load(struct rnc_source *sp) {
  int start=-1;
  if(!rnc_errors(sp)) start=rnc_parse(sp); rnc_close(sp);
  if(!rnc_errors(sp)&&(start=rnd_fixup(start))) {
    start=rn_compress_last(start);
  } else start=0;
  return start;
}

int rnl_fn(char *fn) {
  struct rnc_source src;
  rnc_open(&src,fn); return load(&src);
}

int rnl_fd(char *fn,int fd) {
  struct rnc_source src;
  rnc_bind(&src,fn,fd); return load(&src);
}

int rnl_s(char *fn,char *s,int len) {
  struct rnc_source src;
  rnc_stropen(&src,fn,s,len); return load(&src);
}