/*
 * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED 
 * All rights reserved.
 * 
 * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
 * non-exclusive and royalty-free license to use, copy, modify and
 * redistribute, solely for non-commercial and non-profit purposes, the
 * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
 * conditions of this Agreement. For the avoidance of doubt, you acquire
 * only a limited right to use the SOFTWARE hereunder, and FLL or any
 * third party developer retains all rights, including but not limited to
 * copyrights, in and to the SOFTWARE.
 * 
 * (1) FLL does not grant you a license in any way for commercial
 * purposes. You may use the SOFTWARE only for non-commercial and
 * non-profit purposes only, such as academic, research and internal
 * business use.
 * (2) The SOFTWARE is protected by the Copyright Law of Japan and
 * international copyright treaties. If you make copies of the SOFTWARE,
 * with or without modification, as permitted hereunder, you shall affix
 * to all such copies of the SOFTWARE the above copyright notice.
 * (3) An explicit reference to this SOFTWARE and its copyright owner
 * shall be made on your publication or presentation in any form of the
 * results obtained by use of the SOFTWARE.
 * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
 * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
 * for such modification or the source code of the modified part of the
 * SOFTWARE.
 * 
 * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
 * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
 * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
 * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
 * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
 * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
 * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
 * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
 * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
 * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
 * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
 * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
 * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
 * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
 * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
 *
 * $OpenXM: OpenXM_contrib2/asir2000/lib/xm,v 1.20 2003/05/21 23:31:54 takayama Exp $ 
*/
/**  xm  **/
Xm_noX = 0$  
/* 1 : using X-window system. 0 : not using X-window system. */
/* TODO: db.restore should be called after sm1 error and interruption.
         cf. var.sm1,  debugMode
*/
Xm_use_timer_to_start_server = 1$
XM_debug=1$
Xm_debug_on_win_1=0$

/* Utilities: it is also defined in names.rr */
def ox_getenv(S) {
  A = getenv(S);
  if (A == 0) {
    if (type(S) != 7) S=rtostr(S); 
    S2 = ox_toupper(S);
    A = getenv(S2);
  }
  return A;
}
def ox_toupper(S) {
  R = [];  A = strtoascii(S);
  for (I=0; I<length(A); I++) R=cons((A[I]>=97 && A[I]<=122?A[I]-32:A[I]),R);
  return asciitostr(reverse(R));
}

/*&C-texi
@c DO NOT EDIT THIS FILE   oxxm.texi
*/
/*&jp-texi
@node OpenXM-Contrib 一般函数,,, Top
@chapter OpenXM-Contrib 一般函数
*/
/*&eg-texi
@node OpenXM-Contrib General Functions,,, Top
@chapter OpenXM-Contrib General Functions
*/
/*&jp-texi
@section 函数一覧
*/ 
/*&eg-texi
@section Functions
*/ 


Sm1_lib = ox_getenv("OpenXM_HOME")$
if (Sm1_lib == 0) {
  Sm1_lib = "/usr/local/lib/sm1"$
} else {
  Sm1_lib = Sm1_lib+"/lib/sm1"$
}
ToAsir_Debug = 0$

def ox_help(A) {
  if (type(A) == 0) {
    shell("ls "+ox_getenv("OpenXM_HOME")+"/lib/asir/help/xm.help");
  }else{
    help("xm.help/"+A)$
  }
}


def ox_get_errors(P) {
  ox_push_cmd(P,276);
  return(ox_pop_cmo(P));
}
def ox_check_errors(P) {
  E = ox_get_errors(P);
  if (E == [ ]) return(P);
  else {
    print("Error during the initialization : double check binary ox-files, library files and environmental variables.");
    print(E);
    debug;
  }
  return(P);
}

/*&eg-texi
@menu
* ox_check_errors2::
@end menu
@node ox_check_errors2,,, Top
@subsection @code{ox_check_errors2}
@findex ox_check_errors2
@table @t
@item ox_check_errors2(@var{p})
::  get a list of error objects on the statck of the server @var{p}.
@end table

@table @var
@item return
List
@item p
Number
@end table

@itemize @bullet
@item It gets a list of error objects on the server stack.
@item It does not pop the error objects.
@end itemize
*/
/*&jp-texi
@menu
* ox_check_errors2::
@end menu
@node ox_check_errors2,,, Top
@subsection @code{ox_check_errors2}
@findex ox_check_errors2
@table @t
@item ox_check_errors2(@var{p})
::  識別番号 @var{p} のサーバのスタック上にあるエラーオブジェクトをリストで戻す.
@end table

@table @var
@item return
リスト
@item p
数
@end table

@itemize @bullet
@item   識別番号 @var{p} のサーバのスタック上にあるエラーオブジェクトをリストで戻す.
@item エラーオブジェクトのポップはしない.
@end itemize
*/
/*&C-texi
@example
[219] P=sm1_start();
0
[220] sm1(P," 0 get ");
0
[221] ox_check_errors2(P);
[error([7,4294967295,executeString: Usage:get])]
Error on the server of the process number = 1
To clean the stack of the ox server,
type in ox_pops(P,N) (P: process number, N: the number of data you need to pop)
out of the debug mode.
If you like to automatically clean data on the server stack,
set XM_debug=0;

@end example
*/
def ox_check_errors2(P) {
  extern XM_debug;
  E = ox_get_errors(P);
  if (E == [ ]) return(P);
  else {
    print(E);
    print("Error on the server of the process number = ",0)$
    print(P);
    if (XM_debug == 0) {
       print("Automatically cleaning the stack (pop 100 data)....",0)$
       ox_pops(P,100)$
       print("done.")$
       print("If you want to do it by hand, set XM_debug = 1.");
    }else{
       print("To clean the stack of the ox server,");
       print("type in ox_pops(P,N) (P: process number, N: the number of data you need to pop) out of the debug mode");
       print("If you like to automatically clean data on the server stack,");
       print("set XM_debug=0;");
       debug;
    }
  }
  return(P);
}

def first(A) {return(A[0]);}


def ox_grep(A) {
  if (type(A) == 2) {
    A = rtostr(A);
  }else if (type(A) != 7) {
    return("Usage: ox_grep(keyword)");
  }

  if (ox_getenv("LANG") == "ja_JP.EUC") {
    F = get_rootdir()+"/help-jp/";
  }else{
    F = get_rootdir()+"/help-eg/";
  }
  Pager = ox_getenv("PAGER");
  if (Pager == 0) Pager="more";
  OF = F+"xm.help";

  print("---------- Result of grep  (ox_grep) ---------------------")$
  shell("(cd " + F + " ; " + " grep "+A+" * xm.help/* | "+Pager+" )");

  print("---------- Possible help keyword  for help -------------")$
  shell("ls "+F+" | grep "+A);
  print("---------- Possible help keyword  for ox_help ----------")$
  shell("ls "+OF+" | grep "+A);

  return(0);
}



load("sm1")$
load("gnuplot")$
load("tigers")$
load("phc")$

/* This module is obsolete and will no be supported.
   See OpenXM/src/asir-contrib/packages/src/oxrfc100.rr
*/

end$
