Provided by: mawk_1.3.4.20240905-1_amd64
NAME
mawk-code - dumping mawk's byte-code
SYNOPSIS
At startup, mawk compiles the script into byte-code. After that, it interprets the compiled byte-code. Use the -Wdump option to show the byte-code.
PROGRAM CODES
As mawk executes the program, it maintains a reference to the command to execute in cdp. After that there may be data and/or references in cdp[0], cdp[1], etc. When an operation requires operands, mawk pushes the values (or array/string references) onto the stack, which updates the stack pointer sp. When the operation completes, mawk consumes those entries on the stack, pushing the result (if any) onto the stack. While executing user-defined functions, mawk maintains a frame pointer fp to address the function's local variables. a_cat Concatenate array-indices. Usage: Forms a multiple array index by concatenating the elements of sp[1-cnt..0], with each element separated by SUBSEP. Parameters: cdp[0] cnt, the number of elements to concatenate follows the command. sp[0]..sp[1-cnt] hold reference to the elements to concatenate. Returns the index in sp[0]. a_del Delete an array item. Usage: delete array[expr] Parameters: sp[0] points to array sp[-1] is an expr a_length Find the length of an array. Usage: length(array) Parameters: sp[0] points to array. Returns the length of the array in sp[0]. a_pusha Push array address onto stack. Usage: This is used to set up a calling argument for a function. Parameters: cdp[0] array reference follows the command. Returns the array in sp[0]. a_test Test if an expression is present in an array. Usage: (expression in array) Parameters: sp[0] points to an array. sp[-1] is an expression. Returns 1 in sp[0] if the expression is found, 0 otherwise. add Add two numbers. Usage: first + second Parameters: sp[0] holds the second value. sp[-1] holds the first value. Returns the sum in sp[0]. add_asg Combined addition/assignment. Usage: target += source Parameters: sp[0] is the source expression sp[-1] points to the target Stores the sum in the target, leaving sp[0] pointing to the target. ae_pusha Push reference to array cell, given expression for its index. Usage: arrayname[expression] Parameters: cdp[0] an array reference follows the command. sp[0] has an expression, used for the index of a cell in the array. Returns a reference to the addressed cell in sp[0]. ae_pushi Push contents of array cell, given expression for its index. Usage: arrayname[expression] Parameters: sp[0] has an expression, used for the index of a cell in the array. Returns contents of the addressed cell in sp[0]. aloop Update reference to next cell for array loop. Usage: for ( i in arrayname ) statement Parameters: none Mawk maintains a stack of array-loop state. It updates the array/cell references in the current loop's state. assign Assigns a value. Usage: target = source Parameters: sp[0] is the source expression sp[-1] points to the target Stores the sum in the target, leaving sp[0] pointing to the target. atan2 Compute arc-tangent of two values. Usage: atan2( first, second ) Parameters: sp[0] holds the second value sp[-1] holds the first value Returns the result in sp[0]. call Call a function. Usage: function() Parameters: cdp[0] is a reference to the function block cdp[1] holds number of input arguments Returns function value in sp[0]. cat Concatenate two strings. Usage: first second Parameters: sp[0] is the second string. sp[-1] is the first string. Returns the result in sp[0]. close Close the file or pipe associated with an expression. Usage: close( expression ) Parameters: sp[0] holds the expression identifying the file to close Returns the status from closing the file, 0 on success or -1 on failure. cos Compute the cosine of a value in radians. Usage: cos( value ) Parameters: sp[0] is the value. Returns the result in sp[0]. del_a Delete an array. Usage: delete(array) Parameters: sp[0] is the array to delete. div Divide one number by another. Usage: first / second Parameters: sp[0] is the second value. sp[-1] is the first value. Returns the quotient in sp[0]. div_asg Combined division/assignment. Usage: target /= source Parameters: sp[0] is the source sp[-1] points to the target Stores the quotient in the target, leaving sp[0] pointing to the target. eq Compare two values. Usage: first == second Parameters: sp[0] is the second value sp[-1] is the first value Returns 1 in sp[0] if the values are equal, otherwise 0. exit Exits mawk with a specific exit-code. Usage: exit(exit_code) Parameters: sp[0] is the exit_code exit0 Exits mawk with success Usage: exit Parameters: none exp Compute base-e exponential function of a value. Usage: exp( value ) Parameters: sp[0] is the value Returns the result in sp[0]. f_add_asg Combination addition/assignment to NF. Usage: NF += expression Parameters: sp[0] is the expression to add f_assign Assign an expression to NF. Usage: NF = expression Parameters: sp[0] is the expression f_div_asg Combination division/assignment to NF. Usage: NF /= expression Parameters: sp[0] is the expression f_mod_asg Combination modulus/assignment to NF. Usage: NF %= expression Parameters: sp[0] is the expression f_mul_asg Combination multiplication/assignment to NF. Usage: NF *= expression Parameters: sp[0] is the expression f_post_dec Post-decrement using NF. Usage: NF-- Parameters: holds a reference to the field to use f_post_inc Post-increment using NF. Usage: NF++ Parameters: holds a reference to the field to use f_pow_asg Exponentiation using NF. Usage: NF ^= expression Parameters: sp[0] is the expression to use f_pre_dec Predecrement using NF. Usage: --NF Parameters: sp[0] holds a reference to the field to use f_pre_inc Preincrement using NF. Usage: ++NF Parameters: sp[0] holds a reference to the field to use f_pusha Push array reference to data split-up as fields.. Usage: $0 = expression getline Parameters: cdp[0] is a reference to the data to be split/assigned. Returns the resulting array reference in sp[0]. f_pushi Push contents of numbered field. Usage: $expression Parameters: cdp[0] holds a reference to $expression cdp[1] holds expression Returns the field's value in sp[0]. f_sub_asg Combination subtraction/assignment to NF. Usage: NF -= expression Parameters: sp[0] holds a reference to the field to use fe_pusha Push reference to numbered field. Usage: $number Parameters: sp[0] holds the field number Returns a reference to the field in sp[0]. fe_pushi Push content of numbered field. Usage: $number Parameters: sp[0] holds the field number Returns the field's content in sp[0]. fflush Flush the output file or pipe associated with an expression. Usage: fflush( expression ) Parameters: sp[0] is the expression value Returns the result in sp[0]. gt Test if first value is greater than the second. Usage: first > second Parameters: sp[0] holds the second value. sp[-1] holds the first value. Returns 1 in sp[0] if the first value is greater than, otherwise 0. gte Test if first value is greater than or equal to the second. Usage: first >= second Parameters: sp[0] holds the second value. sp[-1] holds the first value. Returns 1 in sp[0] if the first value is greater than or equal, otherwise 0. index Find the position of the second string in the first. Usage: index( first, second ) Parameters: sp[0] is the second string sp[0] is the first string Returns the position in sp[0] starting at 1 if found, 0 if not found. int Returns a value truncated towards zero.. Usage: int( value ) Parameters: sp[0] is the value Returns the result in sp[0]. jmain Go from BEGIN code to MAIN code. Usage: (internal state) Parameters: none jmp Jump to a new byte-code position, by a given number of bytes. Usage: (internal state) Parameters: cdp[0] holds the (signed) number of bytes by which to jump. jnz Jump to a new byte-code position if sp[0] is nonzero, by a given number of bytes. Usage: (internal state) Parameters: cdp[0] holds the (signed) number of bytes by which to jump. sp[0] holds a value to compare against 0. jz Jump to a new byte-code position if sp[0] is zero, by a given number of bytes. Usage: (internal state) Parameters: cdp[0] holds the (signed) number of bytes by which to jump. sp[0] holds a value to compare against 0. l_pusha Push a local address onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] holds the offset from the frame pointer fp. Returns the address in sp[0]. l_pushi Push contents of a local variable onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] holds the offset from the frame pointer fp. Returns the contents of the local variable in sp[0]. la_pusha Pushes a reference to an array onto the evaluation stack. Usage: arrayname Parameters: cdp[0] holds the offset from the frame pointer fp of a reference to an array. Returns a reference to the array in sp[0]. lae_pusha Pushes a reference to a given array cell onto the evaluation stack. Usage: arrayname[expression] Parameters: cdp[0] holds the offset from the frame pointer fp of a reference to an array. sp[0] holds an expression Returns a reference to the specified array cell in sp[0]. lae_pushi Pushes the contents of a given array cell onto the evaluation stack. Usage: arrayname[expression] Parameters: cdp[0] holds the offset from the frame pointer fp of a reference to an array. sp[0] holds an expression Returns the contents of the specified array cell in sp[0]. length Returns the length of a string or array value. Usage: length( value ) Parameters: sp[0] is the string or array reference Returns the length in sp[0]. ljnz Special jump for logical-OR, always preceded by test. Usage: (internal state) Parameters: cdp[0] holds the (signed) number of bytes by which to jump if the value is nonzero. sp[0] holds a value to compare against 0. ljz Special jump for logical-OR, always preceded by test. Usage: (internal state) Parameters: cdp[0] holds the (signed) number of bytes by which to jump if the value is zero. sp[0] holds a value to compare against 0. log Compute the natural logarithm of a value. Usage: log( value ) Parameters: sp[0] is the value Returns the result in sp[0]. lt Test if first value is less than the second. Usage: first < second Parameters: sp[0] holds the second value. sp[-1] holds the first value. Returns 1 in sp[0] if the first value is less than, otherwise 0. lte Test if first value is less than or equal to the second. Usage: first <= second Parameters: sp[0] holds the second value. sp[-1] holds the first value. Returns 1 in sp[0] if the first value is less than or equal, otherwise 0. match0 Test if $0 matches a given regular expression. Usage: $0 ~ regex Parameters: cdp[0] holds a reference to a regular expression. Returns 1 in sp[0] if $0 matches the regular expression, 0 otherwise. match1 Test if a given expression matches a given regular expression. Usage: expression ~ regex Parameters: cdp[0] holds a reference to a regular expression. sp[0] holds an expression to test. Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise. match2 Test if an expression in sp[-1] matches the regular expression in sp[0]. Usage: expression ~ regex Parameters: sp[0] holds a reference to a regular expression. sp[-1] holds an expression to test. Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise. mktime Converts a date specification in systime format to a timestamp. Usage: mktime( string ) Parameters: sp[0] holds the date-specification string Returns the result in sp[0]. mod Compute modulus/remainder with two operands. Usage: first % second Parameters: sp[0] holds the second operand sp[-1] holds the first operand Returns the remainder in sp[0]. mod_asg Assign modulus/remainder with two operands. Usage: first %= second Parameters: sp[0] holds the second operand cdp[0] holds the first operand Returns the remainder in sp[0] as well as replacing the first value. mul Compute product with two operands. Usage: first * second Parameters: sp[0] holds the second value sp[-1] holds the first value Returns the product in sp[0]. mul_asg Assign product with two operands. Usage: first *= second Parameters: sp[0] holds the second value sp[-1] holds the first value Returns the product in sp[0] as well as replacing the first value. neq Compare two values. Usage: first != second Parameters: sp[0] is the second value sp[-1] is the first value Returns 1 in sp[0] if the values are not equal, otherwise 0. next Read the next record, restart pattern testing. Usage: next Parameters: none nextfile Begin processing the next file listed on the command line. Usage: nextfile Parameters: none nf_pushi Push the number of fields (NF) onto the evaluation stack. Usage: (internal state) Parameters: none not Compute a logical negation. Usage: ! value Parameters: sp[0] holds a value to negate. Returns the result on the evaluation stack, i.e., 0 if the value is nonzero and 1 otherwise. ol_gl Read into $0 using getline. Usage: getline Parameters: none ol_gl_nr Read into $0 using getline, updating NR and FNR. Usage: getline < file Parameters: none omain Start executing the main section of the script (between BEGIN and END). Usage: (internal state) Parameters: none pop Pop the evaluation stack, discarding the value. Usage: (internal state) Parameters: none pop_al Finish an array “in” loop, deallocating the state information. Usage: (internal state) Parameters: none post_dec Post-decrement a value. Usage: value -- Parameters: sp[0] holds the value to decrement Returns the updated value in sp[0]. post_inc Post-increment a value. Usage: value ++ Parameters: sp[0] holds the value to increment Returns the updated value in sp[0]. pow Compute the first value raised to the power of the second value. Usage: first ^ second Parameters: sp[0] holds the second value sp[-1] holds the first value Returns the result in sp[0]. pow_asg Assign the first value raised to the power of the second value. Usage: variable = first ^ second Parameters: cdp[0] is a reference to the variable which will be assigned the result sp[0] holds the second value sp[-1] holds the first value pre_dec Pre-decrement a value. Usage: -- value Parameters: sp[0] holds the value to decrement. Returns the updated value in sp[0];. pre_inc Pre-increment a value. Usage: ++ value Parameters: sp[0] holds the value to decrement. Returns the updated value in sp[0];. pusha Push array address onto stack. Usage: (internal state) Parameters: cdp[0] array reference follows the command. Returns the array in sp[0]. pushc Push a data cell onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] is a reference to the data to push Returns a reference to the result in sp[0]. pushd Push a double floating value onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] is a reference to the data to push Returns a reference to the result in sp[0]. pushi Push contents of next referenced variable onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] is a reference to the data cell to copy. Returns a reference to the result in sp[0]. pushint Reserve the next slot on the evaluation stack, setting its type. Usage: (internal state) Parameters: cdp[0] holds the type to set in the new slot, e.g., for data via I/O redirection Returns a reference to the result in sp[0]. pushs Push a reference to a string value onto the evaluation stack. Usage: (internal state) Parameters: cdp[0] holds a reference to the string value Returns a reference to the result in sp[0]. rand Returns a random number between zero and one.. Usage: rand() Parameters: none Returns the result in sp[0]. range Test a range pattern: pat1, pat2 { action }. Usage: (internal state) Parameters: cdp[0].op a flag, test pat1 if on else pat2 cdp[1].op offset of pat2 code from cdp cdp[2].op offset of action code from cdp cdp[3].op offset of code after the action from cdp cdp[4] start of pat1 code sp[0] holds arguments for the action. ret Return a function value. Usage: return value Parameters: sp[0] holds the return value When calling a function, mawk saves the current stack, creating a new one. On return, mawk restores the previous stack and returns the function value in sp[0]. ret0 Return from a function without providing a return-value. Usage: return Parameters: sp[0] is modified to make the value uninitialized. As in the ret operation, mawk restores the previous stack. After the return, sp[0] is an uninitialized value. set_al Begin an array “in” loop. Usage: for ( iterator in arrayname ) statement Parameters: sp[0] holds a reference to the array sp[-1] holds a reference to the iteration variable Mawk pushes a new entry onto the array loop stack, and updates cdp to point to the statement to execute. sin Compute the sine of a value in radians. Usage: sin( value ) Parameters: sp[0] holds the value Returns the result in sp[0]. sprintf Returns a string constructed from expression-list according to format. Usage: sprintf( format [, value1 [,... ] ] ) Parameters: sp[0] is the last parameter value; there can be up to 255. Returns the resulting string in sp[0]. sqrt Returns the square root of a value. Usage: sqrt( value 0 Parameters: sp[0] is the value Returns the result in sp[0]. srand Seeds the random number generator. Usage: srand( value ) srand( ) Parameters: sp[0] is the seed value, which may be uninitialized Returns the previous seed value in sp[0]. stop Finish a range pattern. Usage: (internal state) Parameters: none strftime Formats the given timestamp using the given format. Usage: strftime( format , timestamp , utc ) strftime( format , timestamp ) strftime( format ) strftime( ) Parameters: Zero to three parameters may be on the stack. If all three are used, they are as follows: sp[0] is the utc flag sp[-1] is the timestamp value sp[-2] is the format Returns the result in sp[0]. sub Subtract the second value from the first. Usage: first - second Parameters: sp[0] holds the second value sp[-1] holds the first value Returns the result in sp[0]. sub_asg Assign the difference of two values to a variable. Usage: target = first - second Parameters: cdp[0] holds a reference to the variable to which to assign the result sp[0] holds the second value sp[-1] holds the first value Stores the difference in the target, leaving sp[0] pointing to the target. substr eturns the substring of string s, starting at index i, of length n. Usage: substr(s,i,n) substr(s,i) Parameters: Two or three parameters may be on the stack. If all three are used, they are as follows: sp[0] holds the length n. sp[0] holds the index i. sp[0] holds the string s. system Executes a command, returning the wait-status. Usage: status = system( command ) Parameters: sp[0] is the command to execute Returns the wait-status in sp[0]. systime Returns the current time of day as the number of seconds since the Epoch. Usage: systime( ) Parameters: none Returns the result in sp[0]. test Test a logical expression. Usage: value Parameters: sp[0] holds a value to test. Returns the result on the evaluation stack, i.e., 1 if the value is nonzero and 0 otherwise. tolower Copy a string, converting to lowercase. Usage: tolower( value ) Parameters: sp[0] is the value to convert Returns the result in sp[0]. toupper Copy a string, converting to uppercase. Usage: toupper( value ) Parameters: sp[0] is the value to convert Returns the result in sp[0]. uminus Unitary minus. Usage: - value Parameters: sp[0] contains a value to negate. As a side-effect, if the value is a string, it is cast to double floating point. Returns the result in sp[0]. uplus Unitary plus. Usage: + value Parameters: sp[0] contains a value to use. As a side-effect, if the value is a string, it is cast to double floating point. Returns the result in sp[0].
REGULAR EXPRESSIONS
M_1J mandatory jump M_2JA optional (undesirable) jump M_2JB optional (desirable) jump M_2JC pop pos'n, optional jump if advanced M_ACCEPT end of match M_ANY arbitrary character (.) M_CLASS character class M_END end of string ($) M_SAVE_POS push position onto stack M_START start of string (^) M_STR matching a literal string M_U arbitrary string (.*)