Template:Prelude/general.a68: Difference between revisions

From Rosetta Code
Content added Content deleted
m (fix typo)
(Expanded exception handling routines, and additional modes & constants.)
Line 1: Line 1:
<lang algol68># -*- coding: utf-8 -*- #
<lang algol68># -*- coding: utf-8 -*- #

COMMENT
COMMENT
This is an ALGOL 68 prelude file called prelude/general.
This is an ALGOL 68 prelude file called prelude/general.
It contains small routines that are not part of any standard,
It contains small routine that are not part of any standard,
but are none the less useful and widely used.
but are none the less useful and widely used.
USAGE
USAGE
PR READ "prelude/general.a68" PR
PR READ "prelude/general.a68" PR
END COMMENT
END COMMENT

# -*- coding: utf-8 -*- #
##########################################
##########################################
# Define some general routines and MODES #
# Define some general routines and MODES #
##########################################
##########################################
PRIO MIN=8, MAX=8;
OP MIN = (INT a,b)INT: (a<b|a|b),
MAX = (INT a,b)INT: (a>b|a|b);
OP MIN = (REAL a,b)REAL: (a<b|a|b),
MAX = (REAL a,b)REAL: (a>b|a|b);

MODE IUR = UNION(INT, REAL);
OP R = (IUR x)REAL: (x|(REAL r):r, (INT i):REAL(i));

MODE IURUC = UNION(INT, REAL, COMPL);
OP C = (IURUC x)COMPL: (x|(COMPL c): c, (REAL r):COMPL(r), (INT i):COMPL(i));

MODE CUCCUS = UNION(CHAR, #[]CHAR,# STRING);
OP S = (CUCCUS x)STRING: (x|(STRING s):s, ([]CHAR cc): STRING(cc), (CHAR c):STRING(c));

MODE
MODE
UTFCHAR = STRING, LONGCHAR = UTFCHAR, UTF=FLEX[0]LONGCHAR,
UCHAR = STRING, LONGCHAR = UCHAR, USTRING=FLEX[0]LONGCHAR,
LBITS = UNION(SHORT SHORT BITS, SHORT BITS, BITS, LONG BITS, LONG LONG BITS),
LBITS = UNION(SHORT SHORT BITS, SHORT BITS, BITS, LONG BITS, LONG LONG BITS),
LBYTES = UNION(SHORT SHORT BYTES, SHORT BYTES, BYTES, LONG BYTES, LONG LONG BYTES),
LBYTES = UNION(SHORT SHORT BYTES, SHORT BYTES, BYTES, LONG BYTES, LONG LONG BYTES),
Line 18: Line 34:
LREAL = UNION(SHORT SHORT REAL, SHORT REAL, REAL, LONG REAL, LONG LONG REAL),
LREAL = UNION(SHORT SHORT REAL, SHORT REAL, REAL, LONG REAL, LONG LONG REAL),
LCOMPL = UNION(SHORT SHORT COMPL, SHORT COMPL, COMPL, LONG COMPL, LONG LONG COMPL);
LCOMPL = UNION(SHORT SHORT COMPL, SHORT COMPL, COMPL, LONG COMPL, LONG LONG COMPL);
MODE SIMPLEOUT = [0]UNION(BOOL, CHAR, STRING, UTF, LBITS, # LBYTES,# LINT, LREAL, LCOMPL);
MODE SIMPLEOUT = [0]UNION(BOOL, CHAR, STRING, USTRING, LBITS, # LBYTES,# LINT, LREAL, LCOMPL);
MODE SIMPLEOUTF = [0]UNION(FORMAT, SIMPLEOUT);
MODE USIMPLEOUT = SIMPLEOUT # UNION(SIMPLEOUT, SIMPLEOUTF) #;

PRIO REPR = 8;


# Use MOID with "*:=" OPerators who's where the returned MODE is often VOIDed for convenience #
# Use MOID with "*:=" OPerators who's where the returned MODE is often VOIDed for convenience #
MODE MOID = VOID;
MODE MOID = VOID;


PROC raise exception = (STRING type, SIMPLEOUT argv)VOID:(
PROC raise exception = (STRING type, USIMPLEOUT argv)VOID:(
BOOL exception = FALSE;
BOOL exception = FALSE;
putf(stand error, ($g$, "Exception"," ",type, ": ", argv, $l$));
putf(stand error, ($g$, "Exception"," ",type, ": "));
#CASE argv IN#
# (SIMPLEOUSTRING argv):putf(stand error, argv),#
# (SIMPLEOUT argv):#
putf(stand error, ($g" "$, argv))
#ESAC#;
putf(stand error, $l$);
ASSERT (exception)
ASSERT (exception)
);
);


# Python style exceptions #
PROC raise undefined = (SIMPLEOUT argv)VOID:
raise exception("Undefined", argv);
PROC raise undefined = (USIMPLEOUT argv)VOID: raise exception("Undefined", argv);
PROC raise unimplemented=(USIMPLEOUT argv)VOID: raise exception("Unimplemented", argv);
PROC raise value error = (USIMPLEOUT argv)VOID: raise exception("Value Error",argv);
PROC raise index error = (USIMPLEOUT argv)VOID: raise exception("Index Error",argv);
PROC raise type error = (USIMPLEOUT argv)VOID: raise exception("Type Error",argv);


BOOL debug := FALSE, trace := FALSE;
PROC raise value error = (SIMPLEOUT argv)VOID:
raise exception("Value Error",argv);


PRIO INKEYS = 5, INVALUES = 5, NOTINKEYS = 5, NOTINVALUES = 5;
PROC raise index error = (SIMPLEOUT argv)VOID:
raise exception("Index Error",argv);


# Algol68G specific declarations #
# KEEP * #</lang>
INT match=0, no match=1, out of memory error=2, other error=3; # for RegEx searches #</lang>
<noinclude>{{template}}</noinclude>
<noinclude>{{template}}</noinclude>

Revision as of 04:46, 15 November 2011

<lang algol68># -*- coding: utf-8 -*- #

COMMENT

 This is an ALGOL 68 prelude file called prelude/general.
 It contains small routine that are not part of any standard, 
 but are none the less useful and widely used.

USAGE

 PR READ "prelude/general.a68" PR

END COMMENT

  1. Define some general routines and MODES #

PRIO MIN=8, MAX=8; OP MIN = (INT a,b)INT: (a<b|a|b),

  MAX = (INT a,b)INT: (a>b|a|b);

OP MIN = (REAL a,b)REAL: (a<b|a|b),

  MAX = (REAL a,b)REAL: (a>b|a|b);

MODE IUR = UNION(INT, REAL); OP R = (IUR x)REAL: (x|(REAL r):r, (INT i):REAL(i));

MODE IURUC = UNION(INT, REAL, COMPL); OP C = (IURUC x)COMPL: (x|(COMPL c): c, (REAL r):COMPL(r), (INT i):COMPL(i));

MODE CUCCUS = UNION(CHAR, #[]CHAR,# STRING); OP S = (CUCCUS x)STRING: (x|(STRING s):s, ([]CHAR cc): STRING(cc), (CHAR c):STRING(c));

MODE

 UCHAR =  STRING, LONGCHAR = UCHAR, USTRING=FLEX[0]LONGCHAR,
 LBITS =  UNION(SHORT SHORT BITS,  SHORT BITS,  BITS,  LONG BITS,  LONG LONG BITS),
 LBYTES = UNION(SHORT SHORT BYTES, SHORT BYTES, BYTES, LONG BYTES, LONG LONG BYTES),
 LINT =   UNION(SHORT SHORT INT,   SHORT INT,   INT,   LONG INT,   LONG LONG INT),
 LREAL =  UNION(SHORT SHORT REAL,  SHORT REAL,  REAL,  LONG REAL,  LONG LONG REAL),
 LCOMPL = UNION(SHORT SHORT COMPL, SHORT COMPL, COMPL, LONG COMPL, LONG LONG COMPL);

MODE SIMPLEOUT = [0]UNION(BOOL, CHAR, STRING, USTRING, LBITS, # LBYTES,# LINT, LREAL, LCOMPL); MODE SIMPLEOUTF = [0]UNION(FORMAT, SIMPLEOUT); MODE USIMPLEOUT = SIMPLEOUT # UNION(SIMPLEOUT, SIMPLEOUTF) #;

PRIO REPR = 8;

  1. Use MOID with "*:=" OPerators who's where the returned MODE is often VOIDed for convenience #

MODE MOID = VOID;

PROC raise exception = (STRING type, USIMPLEOUT argv)VOID:(

 BOOL exception = FALSE;
 putf(stand error, ($g$, "Exception"," ",type, ": "));
 #CASE argv IN#
 #  (SIMPLEOUSTRING argv):putf(stand error, argv),#
 #  (SIMPLEOUT argv):#
       putf(stand error, ($g" "$, argv))
 #ESAC#;
 putf(stand error, $l$);
 ASSERT (exception)

);

  1. Python style exceptions #

PROC raise undefined = (USIMPLEOUT argv)VOID: raise exception("Undefined", argv); PROC raise unimplemented=(USIMPLEOUT argv)VOID: raise exception("Unimplemented", argv); PROC raise value error = (USIMPLEOUT argv)VOID: raise exception("Value Error",argv); PROC raise index error = (USIMPLEOUT argv)VOID: raise exception("Index Error",argv); PROC raise type error = (USIMPLEOUT argv)VOID: raise exception("Type Error",argv);

BOOL debug := FALSE, trace := FALSE;

PRIO INKEYS = 5, INVALUES = 5, NOTINKEYS = 5, NOTINVALUES = 5;

  1. Algol68G specific declarations #

INT match=0, no match=1, out of memory error=2, other error=3; # for RegEx searches #</lang>


This is a template. There are many others. See Category:RCTemplates for a complete list of templates.