view interps/malbolge/malbolge.patch @ 12500:e48c08805365 draft default tip

<b_jonas> ` learn \'The password of the month is Cthulhuquagdonic Mothraquagdonic Narwhalicorn.\' # https://logs.esolangs.org/libera-esolangs/2024-04.html#lKE Infinite craft
author HackEso <hackeso@esolangs.org>
date Wed, 01 May 2024 06:39:10 +0000
parents 859f9b4339e6
children
line wrap: on
line source

--- malbolge.c	2005-04-21 00:30:33.000000000 +0200
+++ malbolge-new.c	2005-06-03 21:51:11.775304752 +0200
@@ -73,15 +73,13 @@
   while ( ( x = getc( f ) ) != EOF )
   {
     if ( isspace( x ) ) continue;
-    if ( x < 127 && x > 32 )
+    if ( x < 33 || x > 126
+        || strchr( "ji*p</vo", xlat1[( x - 33 + i ) % 94] ) == NULL )
     {
-      if ( strchr( "ji*p</vo", xlat1[( x - 33 + i ) % 94] ) == NULL )
-      {
-        fputs( "invalid character in source file\n", stderr );
-        free( mem );
-        fclose( f );
-        return ( 1 );
-      }
+      fputs( "invalid character in source file\n", stderr );
+      free( mem );
+      fclose( f );
+      return ( 1 );
     }
     if ( i == 59049 )
     {
@@ -93,6 +91,8 @@
     mem[i++] = x;
   }
   fclose( f );
+  if ( i < 1 ) mem[i++] = 68;
+  if ( i < 2 ) mem[i++] = 67;
   while ( i < 59049 ) mem[i] = op( mem[i - 1], mem[i - 2] ), i++;
   exec( mem );
   free( mem );
@@ -108,7 +108,7 @@
   int x;
   for (;;)
   {
-    if ( mem[c] < 33 || mem[c] > 126 ) continue;
+    if ( mem[c] < 33 || mem[c] > 126 ) return;
     switch ( xlat1[( mem[c] - 33 + c ) % 94] )
     {
       case 'j': d = mem[d]; break;
@@ -130,7 +130,7 @@
         break;
       case 'v': return;
     }
-    mem[c] = xlat2[mem[c] - 33];
+    if ( mem[c] >= 33 && mem[c] <= 126 ) mem[c] = xlat2[mem[c] - 33];
     if ( c == 59048 ) c = 0; else c++;
     if ( d == 59048 ) d = 0; else d++;
   }