view interps/malbolge/malbolge.patch @ 12518:2d8fe55c6e65 draft default tip

<int-e> learn The password of the month is release incident pilot.
author HackEso <hackeso@esolangs.org>
date Sun, 03 Nov 2024 00:31:02 +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++;
   }