How about this. At least, it allows 2x2 block, isn't it ? (Not tested)
static koord neighbours[] = {
koord( 0, 1),
koord( 1, 0),
koord( 0, -1),
koord(-1, 0),
int streetdir = 0;
for (int i = 1; i < 4; i++) {
str****e_t* weg1 = (str****e_t*)welt->lookup_kartenboden(k + neighbours[i-1])->get_weg(road_wt);
str****e_t* weg2 = (str****e_t*)welt->lookup_kartenboden(k + neighbours[i])->get_weg(road_wt);
if(weg2 != NULL && weg1 == NULL) {
streetdir = i;
}
}
# This is 1
...
.hs
.S.
# This is 2
.s.
.hS
...
# This is 3
.S.
sh.
...
# This is 0
...
Sh.
.s.
# Result
ssss
s21s
s30s
ssss