539 lines
9.3 KiB
C
539 lines
9.3 KiB
C
/**
|
|
* Utilities for the quality of service module mod_qos.
|
|
*
|
|
* See http://mod-qos.sourceforge.net/ for further
|
|
* details.
|
|
*
|
|
* Copyright (C) 2023 Pascal Buchbinder
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
#define S_W_MAX 6
|
|
#define S_H_MAX 7
|
|
|
|
static int s_0[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_1[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,1,0,0},
|
|
{ 0,1,0,1,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_2[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_3[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,1,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_4[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 1,0,0,1,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_5[S_H_MAX][S_W_MAX] = {
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_6[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,1,1,0,0},
|
|
{ 1,1,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_7[S_H_MAX][S_W_MAX] = {
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_8[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_9[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
/* ----------------------------------------------- */
|
|
static int s_a[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_b[S_H_MAX][S_W_MAX] = {
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_c[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_d[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_e[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_f[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,1,1,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 1,1,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_g[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0}
|
|
};
|
|
|
|
static int s_h[S_H_MAX][S_W_MAX] = {
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,1,1,0,0},
|
|
{ 1,1,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_i[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_j[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,1,1,0,0}
|
|
};
|
|
|
|
static int s_k[S_H_MAX][S_W_MAX] = {
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,1,1,0,0},
|
|
{ 1,1,0,0,0,0},
|
|
{ 1,0,1,0,0,0},
|
|
{ 1,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_l[S_H_MAX][S_W_MAX] = {
|
|
{ 0,1,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_m[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,1,0,1,0,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_n[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,1,1,0,0},
|
|
{ 1,1,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_o[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_p[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_q[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0}
|
|
};
|
|
|
|
static int s_r[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,1,1,0,0},
|
|
{ 1,1,0,0,1,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_s[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 1,1,1,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_t[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,1,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_u[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_v[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_w[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 1,1,0,1,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_x[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,1,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_y[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,1,1,1,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 1,1,1,1,0,0}
|
|
};
|
|
|
|
static int s_z[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,1,1,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 1,1,0,0,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_BRO[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_BRC[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_MI[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_LT[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,1,1,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 0,1,1,0,0,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_GT[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,1,1,0,0},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,1,1,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_SP[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_US[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_M[S_H_MAX][S_W_MAX] = {
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,1,0,1,1,0},
|
|
{ 1,0,1,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 1,0,0,0,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_DT[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_CM[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0}
|
|
};
|
|
|
|
static int s_SC[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0}
|
|
};
|
|
|
|
static int s_CO[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_SL[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,0,0,0,1},
|
|
{ 0,0,0,0,1,0},
|
|
{ 0,0,0,1,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,1,0,0,0,0},
|
|
{ 1,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_SQ[S_H_MAX][S_W_MAX] = {
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,1,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|
|
static int s_X[S_H_MAX][S_W_MAX] = {
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 1,1,1,1,1,0},
|
|
{ 0,0,0,0,0,0}
|
|
};
|
|
|