summaryrefslogtreecommitdiff
path: root/graphics/sam2p/psmlib.psm
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/sam2p/psmlib.psm')
-rw-r--r--graphics/sam2p/psmlib.psm199
1 files changed, 199 insertions, 0 deletions
diff --git a/graphics/sam2p/psmlib.psm b/graphics/sam2p/psmlib.psm
new file mode 100644
index 0000000000..d415c28bf8
--- /dev/null
+++ b/graphics/sam2p/psmlib.psm
@@ -0,0 +1,199 @@
+/* psmlib.psm -- utilites for writing PostScript code with the help of
+ * cpp, the C preprocessor
+ * compiled by pts@fazekas.hu at Fri Sep 20 23:38:32 CEST 2002
+ */
+
+#if USE_A85D
+#else
+ #if USE_HEXD
+ #else
+ #define USE_BINARY 1
+ #endif
+#endif
+
+#if USE_INDEXED2
+ #define USE_PALETTE 1
+#else
+ #if USE_TRANSPARENT8
+ #define USE_PALETTE 1
+ #endif
+#endif
+
+#if USE_NO_BIND
+ #define BIND_DEF def
+#else
+ #define BIND_DEF bind def
+#endif
+
+
+#if NDEBUG
+ #define DEBUG(msg)
+ #define ASSERT_TRUE_POP(str) pop
+ #define ASSERT_FALSE_POP(str) pop
+ #define ASSERT_TRUE(what,str)
+ #define ASSERT_INT()
+ #define INT_EQ eq
+ #define INT_NE ne
+ #define INT_LE le
+ #define INT_GT gt
+ #define INT_LT lt
+ #define BOOL_BIN(op,message) op
+ #define INT_BIN(op,message) op
+ #define DEBUGFORCE(msg)
+ #define ASSERT_STACK(list,message)
+#else
+ /-str /stringtype def
+ /-aryb /stringtype def % byte array
+ /-ary /arraytype def
+ /-int /integertype def
+ /-bool /booleantype def
+ /-dict /dicttype def
+ /handleerror.orig /handleerror load def
+ /handleerror {
+ (%stderr) (w) file
+ dup (!!!Fatal: GS error: ) writestring
+ dup $error /errorname get write==only
+ dup ( in ) writestring
+ dup $error /command get write==only
+ dup ( at ) writestring
+ dup $error /position get write==only
+ dup (.\n) writestring
+ flushfile flush
+ handleerror.orig
+ quit
+ }bind def
+ #define ASSERT_TRUE_POP(str) not{ str InternalError }if
+ #define ASSERT_FALSE_POP(str) { str InternalError }if
+ #define ASSERT_TRUE(what,str) what not{ str InternalError }if
+ #define ASSERT_INT(str) dup type/integertype ne{str InternalError}if
+ #define ASSERT_BOOL(str) dup type/booleantype ne{str InternalError}if
+ /DumpStack { % - DumpStack -
+ (Stack: ) print % from bottom to top
+ count 1 sub -1 0{
+ index
+ dup type /stringtype eq {pop ()}if
+ ===only
+ ( ) print
+ } for
+ (.\n) print
+ }bind def
+
+ /TypeStack { % <list> TypeStack <bool>
+ dup length count 2 sub eq {
+ true exch count 2 add 1 index length 1 sub 0 exch 1 exch
+ % Stack: ... true ary count(...)+5 0 1 ary.length-1
+ {
+ % Stack: ... true ary count* i
+ 2 index exch get 2 copy exch
+ % Stack: ... true ary count* ary[i] ary[i] count*
+ index type
+ % Stack: ... true ary count* ary[i] ary[i] stackitem.type
+ ne{
+ pop pop pop pop
+ % Stack: ...
+ false 0 0
+ exit
+ }if
+ pop 1 sub
+ % Stack: ... true ary count*-1
+ } for
+ % Stack: ... true|false ary count*
+ pop pop
+ }{
+ pop false
+ }ifelse
+ ASSERT_BOOL((TypeStack-bool))
+ }bind def
+ /InternalError { % <str> FatalError -
+ (%stderr) (w) file dup dup
+ (Internal muZCat Error: ) writestring
+ 2 index writestring
+ dup (.\n) writestring
+ flushfile
+ pop
+ quit
+ }bind def
+ /Stderr (%stderr) (w) file def
+ #ifdef DEBUGMSG
+ #define DEBUG(msg) msg Stderr exch writestring Stderr flushfile
+ #else
+ #define DEBUG(msg)
+ #endif
+ #define DEBUGFORCE(msg) msg Stderr exch writestring Stderr flushfile
+ #define INT_EQ ASSERT_INT((eq2int)) exch ASSERT_INT((eq1int)) exch eq
+ #define INT_NE ASSERT_INT((ne2int)) exch ASSERT_INT((ne1int)) exch ne
+ #define INT_LE ASSERT_INT((le2int)) exch ASSERT_INT((le1int)) exch le
+ #define INT_GT ASSERT_INT((gt2int)) exch ASSERT_INT((gt1int)) exch gt
+ #define INT_LT ASSERT_INT((lt2int)) exch ASSERT_INT((lt1int)) exch lt
+ #define BOOL_BIN(op,message) ASSERT_BOOL(message) exch ASSERT_BOOL(message) exch op
+ #define INT_BIN(op,message) ASSERT_INT(message) exch ASSERT_INT(message) exch op
+ #define ASSERT_STACK(list,message) TYPE_STACK(list) not{ DumpStack (assert stack: ) message concatstrings InternalError }if
+ #define TYPE_STACK(list) [ list ] TypeStack
+#endif
+
+/* at Sat Sep 21 19:07:59 CEST 2002 */
+#if USE_DEBUG2
+ #define DEBUG2(x) x
+#else
+ #define DEBUG2(x)
+#endif
+
+/* revised, A85D/read_eod at Sun Sep 22 00:27:13 CEST 2002 */
+/* Sample usage:
+ * { TE_read(===) % action to do with normal char
+ * #if !USE_NO_EOF
+ * { TE_read_pop exit } ifelse % action to do on EOF
+ * #endif
+ * } loop
+ */
+#if USE_A85D
+ #define TE_read_eod a85_getc ASSERT_TRUE(dup 511 eq,(EOD expected)) pop
+ #define TE_init /xS 32 def /xD 0 def /xC 0 def
+ #if USE_NO_EOF
+ #define TE_read(true_action) a85_getc true_action
+ #define PSM_A85_GETC \
+ {27 xS ge{exit}if STDIN read pop \
+ dup 122 eq{/xS 27 def/xD 0 def/xC 0 def}{dup 117 gt{ \
+ STDIN read{pop}if/xS 54 xS sub def}{dup 33 ge{xS 32 eq{dup/xC exch def/xD -1670420001 def}{dup 117 sub{1 85 \
+ 7225 614125}xS 28 sub get mul xD add/xD exch def}ifelse/xS xS 1 sub def}if}ifelse}ifelse pop}loop xS 22 eq{511}{xC \
+ 1868977 mul xD add xS 24 and neg bitshift 23 xS lt{xC 3 mul add}if 255 and/xS xS 3 eq{32}{xS 7 mod 3 \
+ eq{22}{xS 8 sub}ifelse}ifelse def}ifelse
+ /** TE_readstring(str) <substr> */
+ #define TE_readstring(str) dup length 1 sub 0 exch 1 exch{a85_getc 3 copy put pop pop}for
+ #else
+ #define TE_read(true_action) a85_getc dup 256 INT_LT { true_action }
+ #define TE_read_pop pop
+ /* #define TE_read_eod TE_read() { ASSERT_TRUE(false,(EOD expected)) } ifelse */
+ #define PSM_A85_GETC \
+ {27 xS ge{exit}if STDIN read not{511}if \
+ dup 122 eq{/xS 27 def/xD 0 def/xC 0 def}{dup 117 gt{ \
+ STDIN read{pop}if/xS 54 xS sub def}{dup 33 ge{xS 32 eq{dup/xC exch def/xD -1670420001 def}{dup 117 sub{1 85 \
+ 7225 614125}xS 28 sub get mul xD add/xD exch def}ifelse/xS xS 1 sub def}if}ifelse}ifelse pop}loop xS 22 eq{511}{xC \
+ 1868977 mul xD add xS 24 and neg bitshift 23 xS lt{xC 3 mul add}if 255 and/xS xS 3 eq{32}{xS 7 mod 3 \
+ eq{22}{xS 8 sub}ifelse}ifelse def}ifelse
+ #endif
+#endif
+#if USE_HEXD
+ #define TE_init
+ #if USE_NO_EOF
+ #define TE_read(true_action) STDIN C readhexstring pop 0 get true_action
+ #define TE_read_eod STDIN read pop pop /* read '>' */
+ #define TE_readstring(str) STDIN str readhexstring pop
+ #else
+ #error PostScript op readhexstring cannot detect EOD!
+ #define TE_read(true_action) STDIN C readhexstring { 0 get true_action }
+ #define TE_read_pop
+ #define TE_read_eod
+ #endif
+#endif
+#if USE_BINARY
+ #define TE_init
+ #define TE_read_eod
+ #if USE_NO_EOF
+ #define TE_read(true_action) STDIN read pop true_action
+ #define TE_readstring(str) STDIN str readstring pop
+ #else
+ #define TE_read(true_action) STDIN read { true_action }
+ #define TE_read_pop
+ #endif
+#endif